Healthcare Industry Signals

Companies providing medical products, health insurance, managed care, pharmacy services, and biotechnology solutions to improve patient outcomes.

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

Across 93 companies in Healthcare we detected 2510 areas, 437 services, 258 tools, and 249 standards — producing an aggregate signal score of 35078.

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

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

Healthcare Industry Technology Investment Report

Prepared by Naftiko May 2026

Executive Summary

The Healthcare industry presents one of the most complex and consequential technology investment landscapes across any major sector. Across 46 companies spanning biotechnology, diagnostics, health insurance, managed care, medical devices, and pharmacy, the sector has committed meaningfully to cloud infrastructure, data management, and security — three areas that consistently post the highest aggregate scores. Cloud leads the Foundational Layer with UnitedHealth Group scoring 171, far ahead of the peer group median. Data management in the Retrieval & Grounding layer reaches 143 for UnitedHealth Group with Johnson & Johnson and AstraZeneca close behind, signaling that the industry’s long-standing investment in clinical and operational data is now being channeled into structured retrieval infrastructure. Security in the Statefulness layer reaches 93 for the sector leader, reflecting the unavoidable compliance and breach-prevention pressures unique to healthcare.

The widest capability gap sits in fine-grained customization and agentic orchestration. Across the Customization & Adaptation layer, Domain Specialization tops out at a score of 2 for the best-in-class companies, and Data Pipelines peak at 16 — a stark contrast to the scores exceeding 100 registered in Cloud and Data. That gap is the most expensive inaction risk in the industry: companies building AI applications on top of robust cloud and data foundations but without disciplined fine-tuning, model versioning, and domain-specific customization will ship generic outputs into clinical and administrative workflows that demand precision. Among the clearest leaders across the scorecard are UnitedHealth Group, which holds the top position in 15 of 20+ scored areas, AstraZeneca, which consistently occupies the top three across cloud, AI, multimodal, and data layers, and Philips, which leads in Specifications and Software-as-a-Service and places second or third across nearly every Foundational area.


Layer 1: Foundational Layer

Foundational Layer measures the core technology investments that underpin AI-ready infrastructure, capturing depth across artificial intelligence, cloud adoption, open-source contribution, programming language diversity, and software engineering practices.

Artificial Intelligence — Top Company: UnitedHealth Group (86)

UnitedHealth Group leads Healthcare peers in Artificial Intelligence with a score of 86, followed by AstraZeneca at 79 and Philips at 72. HubSpot, ServiceNow, Datadog, GitHub, New Relic, and Salesforce are each deployed across 31 of the companies measured, establishing these platforms as near-universal infrastructure for AI-adjacent operations. The concentration of top scores among a payer, a biopharma, and a medtech company signals that AI investment in healthcare is not sector-specific — it is cutting across every sub-vertical, though the gap between UnitedHealth Group’s score and mid-tier companies like Merck (40) and CVS Health (37) suggests uneven translation of AI intent into measurable capability depth.

Cloud — Top Company: UnitedHealth Group (171)

Cloud is the highest-scoring area in the Foundational Layer, and UnitedHealth Group’s score of 171 is nearly 40 percent above the number-two company, Philips (125), which ties with Abbott. AstraZeneca (117) and Johnson & Johnson (114) round out the top five. Git, Terraform, PowerShell, PostgreSQL, and Prometheus are the dominant tools across all 31 measured companies, confirming that the sector has standardized on a mature cloud-native toolchain. The scale of UnitedHealth Group’s lead is consistent with its position as the largest U.S. health insurer and its extensive Optum technology subsidiary, but the breadth of strong scores from pharma and medtech companies shows that cloud investment is no longer primarily an insurance-sector phenomenon.

Open-Source — Top Company: UnitedHealth Group (52)

UnitedHealth Group leads Open-Source with a score of 52, with Johnson & Johnson at 42 and Philips at 38. Open-source depth is a reliable proxy for engineering maturity and platform thinking; the fact that Medtronic (34), Amgen (32), and Bristol Myers Squibb (32) all cluster tightly below Philips suggests that mid-tier open-source contributors in healthcare are a larger and more competitive cohort than the AI or Cloud rankings imply. The universal adoption of TensorFlow, Kubeflow, NumPy, Pandas, and Elasticsearch across 31 companies confirms that scientific computing and machine learning open-source stacks have become table stakes across the healthcare ecosystem.

Languages — Top Company: UnitedHealth Group (49)

UnitedHealth Group (49) and Philips (46) share the top of the Languages scoring area, with Boston Scientific (46) tying Philips and Johnson & Johnson (45) one point below. Python and Kotlin appear across all 31 measured companies, and the presence of Spring Boot and React Native at the same penetration rate reflects the dual demands of backend service development and mobile patient-facing applications. The relative parity in language diversity scores across the top ten companies — all clustered between 28 and 49 — indicates that programming language breadth has largely been commoditized; differentiation will increasingly come from how those languages are applied to ML pipelines and agentic systems rather than from adoption alone.

Code — Top Company: UnitedHealth Group (45)

UnitedHealth Group (45) and Medtronic (45) are co-leaders in Code practices, followed closely by Philips (43) and Johnson & Johnson (41). Medtronic’s tie for first is notable: as a medical device company, its software engineering discipline reflects the unique regulatory requirements of embedded and connected device software. SonarQube, Semantic Kernel, Angular, and ClickHouse are all present across 31 companies, indicating that code quality tooling and modern frontend frameworks have reached saturation in the sector. Companies like Merck (24) and Stryker (23) that score in the bottom quintile of this area face compounding disadvantages as AI-assisted coding tools become integrated into development workflows.


Layer 2: Retrieval & Grounding

Retrieval & Grounding evaluates how organizations build the data and retrieval infrastructure required to ground AI outputs in accurate, domain-specific information — covering data management, database architecture, virtualization, API specifications, and context engineering.

Data — Top Company: UnitedHealth Group (143)

UnitedHealth Group (143) leads the Data scoring area, but the number-two and number-three positions — Johnson & Johnson (131) and AstraZeneca (130) — are far closer to the top than in Cloud or AI, which reflects how uniformly the industry has prioritized data as a foundational asset. Abbott (112) and Novartis (110) round out the top five. The breadth of this high-scoring cohort makes strategic sense: every healthcare sub-vertical — from clinical trials and drug development to insurance claims and device telemetry — generates massive structured and unstructured data that must be retrieved accurately to support decision-making. Elasticsearch, PostgreSQL, and Pandas are universal tools, while Kubeflow and TensorFlow signal that retrieval infrastructure is being built to serve machine learning workflows specifically.

Databases — Top Company: UnitedHealth Group (44)

UnitedHealth Group (44) leads Databases, with Elevance Health (32) and AstraZeneca (32) sharing second place. Abbott (31) and Johnson & Johnson (30) follow closely. The relative compression of scores in this area compared to Data management indicates that while companies have invested in data assets, differentiation in database architecture is narrower — which may reflect the sector’s dependence on a relatively small set of certified, HIPAA-compliant database technologies. Molina Healthcare (20) and Moderna (19) represent the lower end of the top twenty, a gap worth monitoring as real-time inference workloads demand lower-latency database architectures than batch-oriented clinical systems typically provide.

Virtualization — Top Company: UnitedHealth Group (31)

UnitedHealth Group (31) and Philips (31) tie for the top Virtualization score, with Abbott (24) and Merck (23) trailing by a meaningful margin. Virtualization depth in healthcare is constrained by the persistence of on-premise systems in clinical environments and the regulatory complexity of virtualizing workloads that touch patient data. The score ceiling of 31 — low compared to Cloud scores above 100 — confirms that virtualization remains a partially realized capability across the industry, even among the leaders. Boston Scientific (23) and Johnson & Johnson (22) occupying the mid-tier reinforces this picture of incremental rather than transformational progress in this area.

Specifications — Top Company: Philips (17)

Philips leads Specifications with a score of 17, nudging ahead of UnitedHealth Group (15) and tying with Medtronic (13) and Johnson & Johnson (13). Philips’ leadership here is strategically coherent given its deep investment in connected health standards and interoperability protocols for medical imaging and patient monitoring systems. The low absolute scores across this area — the leader reaches only 17 — represent the sector’s largest untapped integration opportunity: without formal API and data specifications, AI systems built on top of health data cannot be reliably composed or governed at scale. Companies like GSK (5) and Roche (5) at the lower end have material ground to cover to participate in ecosystem-level interoperability.

Context Engineering — Sector-Wide

Context Engineering reflects collective patterns across Healthcare organizations rather than individual company rankings, indicating it is an emerging and relatively undifferentiated capability at this stage. The sector-wide adoption of Semantic Kernel — present across all 31 measured companies — alongside Git and Terraform signals that the underlying toolchain for context-aware applications is in place, but structured context engineering practices have not yet separated the leaders from the field. This is precisely the layer where early investment generates asymmetric returns: the companies that formalize context construction, memory management, and prompt governance now will be positioned to deploy reliable clinical AI applications ahead of peers who treat these concerns as afterthoughts.


Layer 3: Customization & Adaptation

Customization & Adaptation measures how organizations move beyond off-the-shelf AI to build purpose-built models and infrastructure — covering data pipelines, model registry and versioning, multimodal infrastructure, and domain specialization.

Data Pipelines — Top Company: UnitedHealth Group (16)

UnitedHealth Group leads Data Pipelines with a score of 16, followed by The Cigna Group (13) and AstraZeneca (12), which ties with Johnson & Johnson. The absolute scores here are strikingly low relative to the Data scores in the Retrieval & Grounding layer, which confirms that while healthcare companies have built extensive data repositories, the operational infrastructure for moving that data through model training and fine-tuning pipelines remains underdeveloped. Sanofi (11) and Novartis (11) in the top five represent pharma’s growing recognition that clinical and genomic data pipelines must be productionized to support drug discovery AI. Companies sitting below a score of 5 — including Becton Dickinson and Danaher — face the risk of being locked out of AI customization workflows as the sector’s pipeline leaders accelerate ahead.

Model Registry & Versioning — Top Company: UnitedHealth Group (21)

UnitedHealth Group (21) and Philips (21) share the top score in Model Registry & Versioning, ahead of AstraZeneca (19) and Johnson & Johnson (19). The presence of Molina Healthcare (16) in fifth place is notable: as a managed care organization, Molina’s investment in model versioning suggests that insurance and care management AI applications are generating enough model iteration to demand formal registry discipline. Walgreens (10) and Becton Dickinson (10) at the lower end of the top twenty are at a decision point: without model registry infrastructure, they cannot systematically improve AI applications or meet the reproducibility requirements that healthcare regulators are beginning to impose on algorithmic clinical tools.

Multimodal Infrastructure — Top Company: AstraZeneca (22)

AstraZeneca leads Multimodal Infrastructure with a score of 22, displacing UnitedHealth Group (19) from the top position — one of the few areas where UnitedHealth Group does not hold first place. Johnson & Johnson (19) ties UnitedHealth Group, and Philips (18) and Sanofi (15) follow. AstraZeneca’s leadership reflects its aggressive investment in imaging AI, genomic data analysis, and multi-modal drug discovery platforms, where combining text, imaging, and molecular data is a core scientific requirement rather than a future capability. Walgreens (11) and Roche (10) appearing in this layer signal that retail pharmacy and diagnostics companies are beginning to invest in the multimodal infrastructure their AI products will require.

Domain Specialization — Top Company: Kaiser Permanente (2)

Domain Specialization scores are uniformly low, with Kaiser Permanente, Molina Healthcare, Moderna, Amgen, UnitedHealth Group, Medtronic, Philips, AstraZeneca, Johnson & Johnson, Abbott, Novartis, and Boston Scientific all at a score of 2. The near-universal ceiling at 2 indicates that healthcare-specific AI model specialization — fine-tuning on clinical notes, radiology reports, genomic sequences, or claims data — has not yet been productionized at scale, even among the most sophisticated technology operators in the sector. This is the most consequential gap in the Healthcare AI stack: generic foundation models cannot reliably operate in clinical contexts without domain adaptation, and the companies that close this gap first will have a durable differentiation advantage in every patient-facing and diagnostic AI application.


Layer 4: Efficiency & Specialization

Efficiency & Specialization evaluates how organizations use automation, containerization, and internal platform capabilities to reduce operational friction and accelerate AI delivery.

Automation — Top Company: UnitedHealth Group (80)

UnitedHealth Group (80) leads Automation, with Philips (74) and Johnson & Johnson (70) close behind. Abbott (66) and AstraZeneca (62) round out the top five. Automation scores in the 50-80 range across the top fifteen companies reflect the sector’s genuine progress in automating clinical operations, claims processing, and lab workflows — areas where automation has tangible cost and safety implications. The gap between Stryker (33) and the top of the field remains wide, and for surgical robotics and orthopedic device companies like Stryker, automation investment in manufacturing and software delivery pipelines represents a direct path to margin improvement and faster software updates for connected products.

Containers — Top Company: UnitedHealth Group (41)

UnitedHealth Group (41) leads Containers, with Johnson & Johnson (34) second and Kaiser Permanente (30) and Abbott (30) tied for third. Kaiser Permanente’s strong showing in Containers is consistent with its integrated payer-provider model, which creates large-scale internal software deployment needs. CVS Health (28) and Elevance Health (25) represent the managed care and pharmacy segments’ meaningful progress in container adoption. Companies at the lower end — Walgreens (16) and Becton Dickinson (16) — are running the operational risk of slower deployment cycles and infrastructure sprawl that will limit their ability to iterate on AI-powered services as quickly as container-native peers.

Platform — Top Company: UnitedHealth Group (45)

UnitedHealth Group (45) leads Platform, followed by Johnson & Johnson (41) and Novartis (39). Philips (38) and AstraZeneca (38) are effectively tied for fourth. Novartis occupying third place in Platform reflects its substantial investment in internal data and AI platforms for drug discovery, including its partnership with Microsoft and its proprietary machine learning infrastructure. The range here — from UnitedHealth Group at 45 down to GSK at 28 — is narrower than in most other scoring areas, which suggests that internal platform investment has become a sector-wide priority rather than a differentiator limited to the largest operators.

Operations — Top Company: UnitedHealth Group (79)

UnitedHealth Group (79) leads Operations, followed by Johnson & Johnson (77) and AstraZeneca (69). Philips (68) and Kaiser Permanente (65) complete the top five. The Operations scoring area captures how well organizations run and scale their technology systems, and the density of high scores — seventeen companies above 45 — confirms that healthcare’s regulatory environment has, paradoxically, driven operational discipline: companies that manage FDA-regulated software and PHI-handling systems develop strong operational muscles by necessity. Albertsons (45) appearing in the top twenty reflects the pharmacy and grocery hybrid’s growing technology operations footprint supporting its healthcare services expansion.


Layer 5: Productivity

Productivity evaluates how organizations deploy software tools, development environments, and service portfolios to accelerate engineering and business output.

Software As A Service (SaaS) — Top Company: Philips (3)

Philips leads SaaS with a score of 3, followed by Johnson & Johnson (2) and Abbott (2). The extremely low absolute scores across this area — the maximum is 3 — reflect the healthcare sector’s historically cautious approach to third-party SaaS adoption for core clinical and administrative workflows, driven by data residency, HIPAA compliance, and vendor lock-in concerns. AbbVie, Molina Healthcare, Moderna, Sanofi, and Amgen all score 1, suggesting that while SaaS adoption exists, it is narrow in scope or not yet creating measurable strategic differentiation. This is an area where the sector’s risk posture is actively constraining productivity, and companies with clearer SaaS governance frameworks will adopt tools faster than those still managing SaaS through blanket restriction.

Code — Top Company: UnitedHealth Group (45)

UnitedHealth Group (45) and Medtronic (45) lead this area, mirroring the Foundational Layer Code scoring. Philips (43) and Johnson & Johnson (41) follow. The replication of Code scores across Productivity signals that software engineering practices that originated as foundational capabilities are now directly translating into productivity gains — particularly through AI-assisted coding tools that build on Git, SonarQube, and Semantic Kernel. The practical implication for companies like Merck (24) and Stryker (23) in the lower tier is that their slower software delivery cycles will widen as AI pair-programming tools raise the velocity ceiling for the leaders.

Services — Top Company: UnitedHealth Group (308)

Services is the highest-scoring area in the Productivity layer by a wide margin. UnitedHealth Group reaches 308, with Johnson & Johnson (278) and AstraZeneca (254) as the next two. Abbott (248) and Philips (243) complete the top five. The breadth and depth of service adoption across 31 companies using HubSpot, ServiceNow, Datadog, GitHub, Salesforce, and Amazon Web Services establishes that the sector has built extensive third-party service ecosystems. UnitedHealth Group’s Services score of 308 — nearly double its Cloud score — confirms that service integration, rather than just cloud infrastructure, is the primary driver of technology productivity in healthcare organizations at scale. Companies below 160 in this area are operating with meaningfully thinner service ecosystems.


Layer 6: Integration & Interoperability

Integration & Interoperability measures how organizations connect systems, exchange data, and build event-driven and standards-based architectures — a layer of particular strategic importance in healthcare, where interoperability has regulatory and clinical quality implications.

API — Top Company: UnitedHealth Group (32)

UnitedHealth Group (32) leads API scoring, with Philips (31) one point behind — closer than in most other areas. Johnson & Johnson (25), Abbott (22), and Medtronic (21) follow. Medtronic’s fifth-place position in API reflects its strategy of building device APIs and software platforms that connect medical devices to hospital information systems and third-party health applications. AbbVie (12) and GSK (11) scoring at the lower end of the top twenty signal that large pharmaceutical companies have underinvested in API exposure relative to their data assets, a gap that will impede partnership-based AI applications that require programmatic data access.

Integrations — Top Company: UnitedHealth Group (52)

UnitedHealth Group (52) leads Integrations by a meaningful margin, with AstraZeneca (37) and Johnson & Johnson (37) tied for second. Abbott (35) and Philips (34) round out the top five. Novartis at 33 maintaining a top-six position reflects its investment in cloud-based integration for drug discovery data. Becton Dickinson (19) and Pfizer (18) sitting at the lower end of the top twenty represent integration debt that limits their ability to orchestrate multi-system AI workflows, particularly in scenarios that require combining device data, lab results, and clinical records in real time.

Event-Driven — Top Company: UnitedHealth Group (29)

UnitedHealth Group (29) leads Event-Driven architecture, with Philips (24) second and Boston Scientific (20) third. The presence of Boston Scientific in third place is strategically significant: event-driven architecture for a medical device company means real-time data streams from implantable and wearable devices, and investment here directly underpins connected device clinical applications. Abbott (19) and AstraZeneca (17) follow, while Gilead Sciences (7) and AbbVie (6) trail — companies whose primary value chain is drug development rather than connected systems, but who will increasingly need event-driven infrastructure as digital therapeutics and patient monitoring programs expand.

Patterns — Top Company: UnitedHealth Group (22)

UnitedHealth Group (22) and Philips (21) lead Patterns, with AstraZeneca (19) and Abbott (18) close behind. Medtronic (17) and Johnson & Johnson (17) tie for fifth. Kroger (9) appearing in the top twenty reflects the pharmacy-grocery retailer’s growing healthcare data ambitions. Integration patterns — messaging, orchestration, choreography, and workflow design — are the connective tissue of complex multi-system healthcare environments. The consistent presence of the same top four companies across API, Integrations, Event-Driven, and Patterns confirms that UnitedHealth Group, Philips, AstraZeneca, and Abbott have built coherent integration strategies rather than assembling point solutions.

Apache — Top Company: UnitedHealth Group (15)

UnitedHealth Group (15) leads Apache ecosystem adoption, with Amgen (11) second and Abbott (9) third. Philips (8), AstraZeneca (8), The Cigna Group (8), and Johnson & Johnson (8) tie for fourth. The Apache ecosystem — encompassing Kafka, Spark, Flink, Airflow, and related frameworks — is fundamental to large-scale healthcare data processing, and Amgen’s second-place position reflects its bioinformatics and clinical data processing scale. Walgreens (4) and Thermo Fisher Scientific (4) in the lower tier of the top twenty suggest that pharmacy and life sciences instrumentation companies have not yet built the streaming data infrastructure that their next-generation analytics platforms will require.

CNCF — Top Company: UnitedHealth Group (36)

UnitedHealth Group (36) leads CNCF ecosystem adoption, followed by Johnson & Johnson (33) and Novartis (30). Kaiser Permanente (28), CVS Health (28), and Abbott (28) tie for fourth. The Cloud Native Computing Foundation ecosystem — Kubernetes, Prometheus, Envoy, Helm, and related projects — is now embedded across 31 companies at the tool level, but depth of adoption varies significantly. Novartis occupying third place in CNCF reflects its multi-cloud Kubernetes strategy for ML workloads. Companies in the 18-20 range — Bristol Myers Squibb, Pfizer, Becton Dickinson — have the tooling present but have not yet translated it into the level of operational depth the top cohort demonstrates.


Layer 7: Statefulness

Statefulness evaluates how organizations manage system state, observability, governance, security, and data integrity across distributed technology environments.

Observability — Top Company: UnitedHealth Group (59)

UnitedHealth Group (59) leads Observability, with AstraZeneca (39) and Johnson & Johnson (38) in second and third. Abbott (37), Moderna (36), and Medtronic (36) follow closely. Moderna’s fifth-place tie is noteworthy: the company’s rapid scaling of mRNA manufacturing and clinical operations since 2020 has required building observability infrastructure at speed, and those investments are now generating measurable depth. Datadog and New Relic, deployed across all 31 companies, are the universal observability services. GSK (27) at the edge of the top twenty has room to close the gap before the shift to AI-intensive operations — where observability is essential for model performance monitoring — makes the distance more costly.

Governance — Top Company: UnitedHealth Group (41)

UnitedHealth Group (41) leads Governance, with Johnson & Johnson (38) and Philips (36) tying with AstraZeneca (36). Novartis (33) rounds out the top five. Governance scores in the 25-41 range for the top ten companies indicate a sector that has built governance infrastructure in response to regulatory mandates — HIPAA, FDA software requirements, and GDPR for European operations — rather than primarily as a strategic capability. Thermo Fisher Scientific (19) in the upper tier of this area reflects the life sciences tools company’s need to govern data and systems across its clinical research services division. CVS Health (16) at the lower edge of the top twenty has a governance gap that becomes more exposed as its HealthHUB clinical services strategy generates more PHI-bearing workflows.

Security — Top Company: UnitedHealth Group (93)

Security is the standout high-scoring area in the Statefulness layer. UnitedHealth Group (93) leads decisively, with Johnson & Johnson (74) second and AstraZeneca (57), Abbott (54), Kaiser Permanente (52), and Medtronic (52) in the next tier. Healthcare’s security investment intensity is higher than almost any other industry, driven by the combination of ransomware targeting, PHI regulatory liability, and connected medical device attack surfaces. The density of scores above 40 — fifteen of the top twenty companies exceed that threshold — reflects sector-wide recognition that security is non-negotiable infrastructure rather than a discretionary investment. Walgreens (33) and Bristol Myers Squibb (33) at the lower end of the top twenty have investment levels more typical of sectors without the same concentration of regulatory and reputational security risk.

Data — Top Company: UnitedHealth Group (143)

The Statefulness Data scoring area mirrors the Retrieval & Grounding Data scores, confirming that data management is both the sector’s primary strength and its most consistent differentiator. UnitedHealth Group (143), Johnson & Johnson (131), AstraZeneca (130), Abbott (112), and Novartis (110) form a top tier with scores that dwarf the comparable areas in Customization, Productivity, and Governance. The implication is structural: healthcare companies have the data assets to support sophisticated AI applications but have not yet built the customization, pipeline, and domain specialization infrastructure to fully exploit those assets. Closing that gap is the central strategic design challenge the industry faces in 2026.


Layer 8: Measurement & Accountability

Measurement & Accountability captures how organizations test systems, measure engineering quality, track observability signals, improve developer experience, and connect technology investment to business outcomes.

Testing & Quality — Top Company: UnitedHealth Group (26)

UnitedHealth Group (26) leads Testing & Quality, with Philips (24) and Abbott (23) close behind. Medtronic (17) and Johnson & Johnson (16) follow. Medtronic’s fourth-place position reflects the FDA’s stringent software quality requirements for medical device software, which compel investment in testing infrastructure that translates into measurable scores. SonarQube deployed across all 31 companies confirms that static analysis and code quality gates are universal in the sector. Humana (6) and Stryker (6) at the lower end of the top twenty have testing maturity gaps that become increasingly significant as AI-assisted clinical decision tools face regulatory scrutiny over their validation and testing provenance.

Observability — Top Company: UnitedHealth Group (59)

The Observability scores here align with the Statefulness layer, reinforcing that UnitedHealth Group (59), AstraZeneca (39), and Johnson & Johnson (38) have built observability as a genuine enterprise capability rather than a collection of deployed tools. Moderna (36) and Medtronic (36) continue to show investment depth consistent with their post-pandemic technology scaling programs. The presence of GSK (27) at the edge of the top twenty in both Statefulness and Measurement layer observability confirms a consistent pattern: GSK has mature base infrastructure but lags in operationalizing that infrastructure into the depth of monitoring that AI-intensive pipelines demand.

Developer Experience — Top Company: UnitedHealth Group (24)

UnitedHealth Group (24) leads Developer Experience, with Medtronic (22), Philips (22), Johnson & Johnson (22), and Abbott (22) all at exactly the same score in second place. The four-way tie at 22 is unusual across the entire scorecard and indicates that developer experience investment has converged at a similar level across the sector’s leading medical technology and integrated health companies. Molina Healthcare (20) standing among the leaders in this area reflects its strategy of attracting engineering talent to build Medicaid-focused technology platforms. CVS Health (15) and Bristol Myers Squibb (15) scoring at the lower end of the top twenty have less mature developer experience infrastructure, which will increasingly influence their ability to recruit AI engineers in a competitive talent market.

ROI & Business Metrics — Top Company: UnitedHealth Group (56)

UnitedHealth Group (56) and AstraZeneca (56) tie for the top ROI & Business Metrics score, followed by Johnson & Johnson (54) and Abbott (54). Novartis (52) rounds out the top five. AstraZeneca’s tie with UnitedHealth Group in this area is significant: pharma companies that have built rigorous measurement frameworks for AI-driven drug discovery ROI are generating a new class of internal proof points that will drive further investment. CVS Health (49) in sixth place reflects its retail health strategy’s need to measure technology investment against clinical and commercial outcomes simultaneously. Danaher (36) at the lower end of the top twenty has a measurement gap relative to the sophistication of its life sciences instrumentation business.


Layer 9: Governance & Risk

Governance & Risk measures how organizations manage regulatory compliance, AI review and approval processes, security architecture, data governance, and privacy obligations — areas where healthcare faces the most concentrated external pressure of any industry.

Regulatory Posture — Top Company: UnitedHealth Group (13)

UnitedHealth Group (13) leads Regulatory Posture, with Philips (12) and The Cigna Group (12) tied for second. Elevance Health (11), Medtronic (11), Abbott (11), and Novartis (11) all tie for fourth place. The compression of scores in this area — from 13 at the top to single digits by the fifteenth company — reflects the regulatory floor that every healthcare company must maintain rather than the ceiling that distinguishes leaders. AstraZeneca (8) scoring below the top ten in Regulatory Posture despite leading in several other areas suggests that its regulatory investment is distributed across jurisdictions in ways that may not be fully captured by this scoring area, or that it has more room to formalize its AI regulatory framework.

AI Review & Approval — Top Company: UnitedHealth Group (18)

UnitedHealth Group (18) leads AI Review & Approval, with Philips (17) and AstraZeneca (17) tied for second. Johnson & Johnson (16) and Abbott (13) follow. The absolute scores in this area remain low relative to the sector’s exposure to AI-driven clinical tools — a mismatch that reflects the industry’s early stage in establishing formal AI review committees, algorithmic impact assessments, and model approval workflows for patient-facing applications. Stryker (7) and Elevance Health (8) in the lower tier of the top twenty have meaningful work to do before their AI deployment pipelines align with the FDA’s Software as a Medical Device guidance and the evolving CMS requirements for algorithmic prior authorization tools.

Security — Top Company: UnitedHealth Group (93)

The Security scores in the Governance & Risk layer match the Statefulness layer exactly, confirming security as a deeply embedded and consistently maintained enterprise capability for the healthcare leaders. UnitedHealth Group (93), Johnson & Johnson (74), AstraZeneca (57), Abbott (54), Kaiser Permanente (52), and Medtronic (52) hold the same positions across both layers. The sector’s security investment is the single area where Healthcare companies consistently score at levels that indicate genuine strategic depth rather than compliance-floor investment, and that depth will become a critical foundation as AI systems handling PHI become subject to more granular security scrutiny from both regulators and payers.

Governance — Top Company: UnitedHealth Group (41)

UnitedHealth Group (41) and Johnson & Johnson (38) lead Governance in this layer, consistent with the Statefulness scores. Philips (36) and AstraZeneca (36) tie for third. Novartis (33) and Abbott (30) complete the top six. The consistency of Governance scores across both the Statefulness and Governance & Risk layers for the same companies confirms that governance investment in healthcare is structural — built into organizational processes and system architectures — rather than episodic. CVS Health (16) scoring lower than its size and complexity might suggest represents a governance maturity gap that becomes particularly exposed as it expands MinuteClinic and HealthHUB service lines that generate patient clinical data.

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

Amgen leads Privacy & Data Rights with a score of 6 — the only scoring area in the entire report where UnitedHealth Group does not hold first or second place. UnitedHealth Group (5), Philips (5), AstraZeneca (5), CVS Health (5), Abbott (5), Novartis (5), and Boston Scientific (5) all tie at five points. The uniformly low absolute scores across all companies signal that formal privacy engineering — data minimization, consent management, differential privacy, and data subject rights infrastructure — is an underdeveloped discipline across Healthcare, even relative to the sector’s extensive security investment. The gap between robust security scores and weak privacy engineering scores reflects an industry that has invested heavily in keeping data from being stolen but has invested far less in governing how that data is used once it is inside the enterprise.


Layer 10: Economics & Sustainability

Economics & Sustainability evaluates how organizations manage the financial, operational, and strategic dimensions of their technology ecosystems — including AI cost management, cloud provider strategy, ecosystem partnerships, and talent organization design.

AI FinOps — Top Company: Sanofi (9)

Sanofi (9) leads AI FinOps, tying with AstraZeneca (9) and displacing UnitedHealth Group (7) from the top position. Elevance Health (7), Abbott (7), Novartis (7), and Boston Scientific (7) all tie with UnitedHealth Group at 7. Sanofi’s and AstraZeneca’s leadership in AI FinOps reflects their experience managing large-scale compute costs for drug discovery AI, where GPU cluster expenses and model training costs are material line items. The low absolute scores across this area — the ceiling is 9 — indicate that Healthcare as a sector has not yet built the AI cost management discipline needed to govern the economics of scaled AI deployment across clinical, research, and administrative functions simultaneously.

Provider Strategy — Top Company: UnitedHealth Group (17)

UnitedHealth Group (17) and Johnson & Johnson (17) tie for the top Provider Strategy score, with AstraZeneca (16) close behind. Philips (13) and Novartis (13) follow. Provider Strategy scores measure how deliberately organizations manage their relationships with cloud providers, including multi-cloud architecture, reserved instance management, and provider-specific service adoption depth. The tight cluster of scores in the 13-17 range for the top ten companies suggests that Healthcare has largely converged on multi-cloud strategies rather than single-provider concentration, consistent with the sector’s risk-averse operational culture. Roche (6) and Abbvie (6) at the lower end have provider strategies that may expose them to vendor negotiating disadvantage as cloud AI service costs become a larger share of their technology budgets.

Partnerships & Ecosystem — Top Company: UnitedHealth Group (24)

UnitedHealth Group (24) leads Partnerships & Ecosystem, with Abbott (20) and Boston Scientific (20) tied for second. Philips (18) and Novartis (18) follow. Abbott and Boston Scientific occupying second place jointly reflects the medical device sector’s established practice of building commercial ecosystems around connected devices — app stores, developer platforms, and clinical integration partnerships. Johnson & Johnson (16), Pfizer (16), and AstraZeneca (16) tying in the next tier signals that pharma’s ecosystem investment has been more focused on research partnerships than on technology developer ecosystems. CVS Health (12) and Merck (12) scoring at the lower end of the top twenty have partnership ecosystem positions that do not fully reflect their scale, particularly as healthcare platform models become more commercially attractive.

Talent & Organizational Design — Top Company: Sanofi (14)

Sanofi (14) leads Talent & Organizational Design, tying with Philips (14) and AstraZeneca (14), with UnitedHealth Group (13) one point behind. Sanofi’s leadership here reflects its 2023-2025 restructuring that repositioned it as a technology-forward pharmaceutical company, including significant AI and data science hiring. Albertsons (12) and Humana (12) in the top five position two healthcare-adjacent companies — a pharmacy-grocery chain and a Medicare-focused insurer — alongside pharma and medtech leaders, reflecting the cross-sector nature of AI talent competition. Merck (8) and Becton Dickinson (8) at the lower end of the top twenty have organizational design gaps that will limit their ability to attract and deploy the engineering talent required for competitive AI development.


Layer 11: Measurement & Accountability (Evaluation Subtheme)

This layer captures the sector’s self-assessment and benchmarking posture — how organizations measure AI investment effectiveness, track benchmark performance, and connect technology deployment to verifiable business outcomes.

ROI & Business Metrics — Top Company: UnitedHealth Group (56)

As noted earlier, UnitedHealth Group (56) and AstraZeneca (56) lead ROI & Business Metrics, both reaching a score that is among the highest in this layer. Johnson & Johnson (54) and Abbott (54) follow. The cluster of high scores in this area across pharma and integrated health companies reflects the sector’s increasing demand for evidence-based justification of AI investment — a cultural shift driven both by cost pressures on payers and regulators and by the scientific culture of biopharma that expects documented evidence before scaling any new intervention. Danaher (36) and Molina Healthcare (36) at the lower end of the top twenty have measurement frameworks that will need to mature as their AI applications move from pilot to production.


Industry Strategic Assessment

Healthcare enters the second half of the 2020s with one of the most well-developed foundational technology profiles of any major industry: cloud infrastructure at depth, data assets at scale, security investment that commands respect, and services ecosystems that span every operational domain. UnitedHealth Group, AstraZeneca, and Johnson & Johnson have built comprehensive technology profiles that score competitively across all eleven layers, and the breadth of the mid-tier — companies like Novartis, Abbott, Philips, and Kaiser Permanente consistently placing in the top five across multiple areas — confirms that technology investment is industry-wide rather than concentrated in a handful of outliers. The universal adoption of core services and tools across 31 companies establishes a common platform on which the sector’s next phase of differentiation will be built.

The most urgent strategic risk in healthcare technology is the chasm between data richness and AI customization depth. Companies that score 100-plus in Data and Cloud but 2 in Domain Specialization are sitting on clinical data assets they cannot yet activate through purpose-built AI models. That gap compounds over time: every quarter spent without productionized fine-tuning pipelines and model registries is a quarter in which generic AI outputs enter clinical workflows that carry patient safety and regulatory risk. Privacy & Data Rights scoring near zero across the sector adds a second dimension of exposure — as the FTC, OCR, and state attorneys general intensify enforcement of AI and health data use, companies without formal privacy engineering frameworks face regulatory action that will be far more disruptive than the investment required to build those capabilities now. The low SaaS adoption scores, while reflecting legitimate compliance caution, also reveal an organizational risk posture that is slowing productivity gains in administrative and research functions where PHI exposure is lower and SaaS adoption could be expanded safely.

Healthcare’s two areas of genuine, durable strength are Security and Data — and both have compounding value. A sector that protects patient data rigorously and manages it at scale is positioned to be the trust anchor for AI applications that combine clinical, genomic, insurance, and behavioral data in ways that less secure industries cannot credibly offer. The companies that translate those foundational strengths into customized AI pipelines, formal governance frameworks, and measurable clinical outcomes will set the terms of competition for the rest of the decade. Naftiko’s design partnership work helps healthcare technology leaders close the specific gaps that their scoring profiles reveal — from fine-tuning infrastructure and model registry architecture to API specification standards and privacy engineering programs — using a structured capability framework calibrated to the regulatory and clinical realities of this industry. The window for first-mover advantage in healthcare AI design is open, and the companies that act on their data and security foundations now will be the ones defining best practice for the sector three years from now.


This report was prepared by Naftiko using proprietary signal analysis across 35 scored Healthcare companies. Scores reflect observed technology investment signals and do not constitute an endorsement of any company’s products, services, or investment suitability. For partnership inquiries, contact Naftiko directly.

Companies — Total:93

  • Abbott
    A global healthcare company manufacturing medical devices, diagnostics, nutritional products, and branded generic pharmaceuticals. Known...
  • AbbVie
    A biopharmaceutical company focused on developing treatments for immunology, oncology, and neuroscience. Maker of blockbuster...
  • Acadia Healthcare
    Acadia Healthcare is a major US corporation and Fortune 1000 company. The Acadia Healthcare API...
  • AdaptHealth
    AdaptHealth is a national provider of home medical equipment, supplies, and related services in the...
  • Agilent Technologies
    Agilent Technologies is a global leader in life sciences, diagnostics, and applied chemical markets, providing...
  • Agilon Health
    Agilon Health is a healthcare services company that partners with primary care physicians to transform...
  • Albertsons
    One of the largest food and drug retailers in the United States operating over 2,200...
  • Align Technology
    Profile for Align Technology in the API Evangelist network. Fortune F1000 (rank 888).
  • Amgen
    One of the world's largest independent biotechnology companies focused on human therapeutics. Develops and manufactures...
  • AstraZeneca
    A British-Swedish multinational pharmaceutical and biotechnology company focused on oncology, cardiovascular, renal, metabolism, and respiratory...
  • Baxter International
    Baxter International is a global medical products company that develops, manufactures, and markets products related...
  • Becton Dickinson
    A global medical technology company manufacturing and selling medical devices, instrument systems, and reagents. A...
  • Bio-Rad Laboratories
    Bio-Rad Laboratories is a global leader in developing and manufacturing a wide range of products...
  • Biogen
    Biogen is a global biotechnology company that discovers, develops, and delivers therapies for people living...
  • Boston Scientific
    A global medical device manufacturer developing minimally invasive technologies for cardiology, endoscopy, urology, and neuromodulation....
  • BrightSpring Health Services
    BrightSpring Health Services is a leading Fortune 500 provider of comprehensive home and community-based health...
  • Bristol Myers Squibb
    A global pharmaceutical company focused on discovering and developing medicines for serious diseases including cancer...
  • Brookdale Senior Living
    Brookdale Senior Living is one of the largest operators of senior living communities in the...
  • Cano Health
    Cano Health is a primary care provider focused on delivering value-based care to seniors and...
  • Cardinal Health
    Cardinal Health is a Fortune 15 global integrated healthcare services and products company that provides...
  • Cencora
    Cencora (formerly AmerisourceBergen, renamed August 2023) is a leading global pharmaceutical solutions organization that connects...
  • Centene
    Centene Corporation is a leading managed care organization providing government-sponsored healthcare programs including Medicaid, Medicare,...
  • Centene Corporation
    A leading managed care company providing health insurance primarily to government-sponsored programs including Medicaid, Medicare,...
  • Cigna
    Cigna Healthcare is a leading global health services company offering medical, dental, behavioral, and pharmacy...
  • Community Health Systems
    Community Health Systems (CHS) is a Fortune 500 hospital operator that owns, leases, and operates...
  • Cooper
    Profile for Cooper in the API Evangelist network. Fortune F1000 (rank 848).
  • CVS Health
    A diversified health services company operating the largest pharmacy chain in the United States. Also...
  • Danaher
    A global science and technology conglomerate operating in life sciences, diagnostics, and environmental solutions. Owns...
  • DaVita
    DaVita Inc. is a Fortune 500 kidney care company operating in-center hemodialysis, home hemodialysis, and...
  • Dentsply Sirona
    Dentsply Sirona is the world's largest manufacturer of professional dental products and technologies, providing comprehensive...
  • Dexcom
    Dexcom is a leading medical device company that develops, manufactures, and distributes continuous glucose monitoring...
  • Edwards Lifesciences
    Edwards Lifesciences is a global leader in patient-focused innovations for structural heart disease and critical...
  • Elevance Health
    One of the largest health insurance companies in the United States, formerly known as Anthem....
  • Encompass Health
    Encompass Health is a major US corporation and Fortune 1000 company. The Encompass Health API...
  • Ensign Group
    Ensign Group is a major US corporation and Fortune 1000 company. The Ensign Group API...
  • Envista Holdings
    Envista Holdings is a global family of dental products companies and a Fortune 1000 firm...
  • Exact Sciences
    Exact Sciences is a molecular diagnostics company and a Fortune 1000 firm best known for...
  • Fortive
    Fortive Corporation is a Fortune 500 diversified industrial technology conglomerate headquartered in Everett, Washington. The...
  • GE HealthCare Technologies
    GE HealthCare Technologies (NASDAQ: GEHC) is a global medical technology, pharmaceutical diagnostics, and digital solutions...
  • Gilead Sciences
    A biopharmaceutical company focused on developing and commercializing treatments for life-threatening diseases. A global leader...
  • GSK
    A British multinational pharmaceutical and biotechnology company focused on vaccines, specialty medicines, and general medicines....
  • HCA Healthcare
    HCA Healthcare is one of the largest for-profit operators of healthcare facilities in the world,...
  • Henry Schein
    Henry Schein is a worldwide distributor of medical and dental supplies including vaccines, pharmaceuticals, financial...
  • Hologic
    Hologic develops diagnostics, surgical, and medical imaging technologies designed to advance women's health. Explore products...
  • Humana
    A major health insurance company in the United States with a strong focus on Medicare...
  • Illumina
    Profile for Illumina in the API Evangelist network. Fortune F1000 (rank 687).
  • Intuitive Surgical
    Intuitive Surgical is the global leader in robotic-assisted minimally invasive surgery, developing and marketing the...
  • IQVIA
    A leading global provider of advanced analytics, technology solutions, and clinical research services to the...
  • Johnson & Johnson
    A global healthcare company operating in pharmaceuticals, medical devices, and consumer health products. One of...
  • Kaiser Permanente
    One of the largest nonprofit health plans in the United States integrating health insurance with...
  • Kroger
    The largest supermarket chain by revenue in the United States operating nearly 2,800 stores under...
  • Labcorp
    Labcorp helps patients, providers, organizations, and biopharma companies guide vital healthcare decisions every day. Labcorp...
  • McKesson
    McKesson is a Fortune 500 healthcare company providing wholesale medical supplies and equipment, pharmaceutical distribution,...
  • Medical Mutual of Ohio
    Medical Mutual of Ohio is the oldest and one of the largest health insurance companies...
  • Medtronic
    The world's largest medical device company developing therapies for cardiovascular, neurological, diabetes, and surgical conditions....
  • Merck
    A global pharmaceutical company discovering and developing medicines, vaccines, and animal health products. Known for...
  • Moderna
    A biotechnology company pioneering messenger RNA therapeutics and vaccines. Rose to global prominence through its...
  • ModivCare
    ModivCare Inc. is a technology-enabled healthcare services company that provides a suite of integrated supportive...
  • Molina Healthcare
    A managed care company providing health insurance primarily through government-sponsored programs like Medicaid and Medicare....
  • NeueHealth
    NeueHealth operates a healthcare platform that aligns interests across consumers, payors, and providers to enable...
  • Novartis
    A Swiss multinational pharmaceutical corporation and one of the largest pharmaceutical companies in the world...
  • Novo Nordisk
    A Danish multinational pharmaceutical company and the world leader in diabetes care. Also develops treatments...
  • Option Care Health
    Profile for Option Care Health in the API Evangelist network. Fortune F1000 (rank 918).
  • Oscar Health
    Oscar Health is a technology-driven health insurance company offering individual, small group, and Medicare Advantage...
  • Owens & Minor
    Owens & Minor is a global Fortune 500 healthcare solutions company providing essential products and...
  • PACS Group
    PACS Group, Inc. is a leading post-acute care company that operates skilled nursing and senior...
  • Pfizer
    A global pharmaceutical and biotechnology company developing medicines and vaccines for a wide range of...
  • Philips
    A Dutch multinational health technology company focused on diagnostic imaging, patient monitoring, and connected care...
  • Quest Diagnostics
    Quest Diagnostics is a Fortune 500 company and the world's leading provider of diagnostic information...
  • QuidelOrtho
    QuidelOrtho is a diagnostics company that transforms diagnostic data into action across the entire healthcare...
  • Regeneron
    A leading biotechnology company that invents, develops, and commercializes life-transforming medicines. Known for its EYLEA...
  • Regeneron Pharmaceuticals
    Regeneron Pharmaceuticals is a leading biotechnology company that invents, develops, and commercializes life-transforming medicines for...
  • Resmed
    Fortune 1000 company Resmed. Public API documentation has not yet been catalogued in the API...
  • Revvity
    Revvity is a life sciences and diagnostics company providing instruments, software, reagents, and services to...
  • Rite Aid
    Rite Aid is one of the nation's leading drugstore chains, providing prescription drugs, health and...
  • Roche
    A Swiss multinational healthcare company and the world's largest biotech company by revenue. A global...
  • Sanofi
    A French multinational pharmaceutical and healthcare company focused on immunology, oncology, rare diseases, and vaccines....
  • Select Medical Holdings
    Select Medical Holdings is one of the largest operators of specialty hospitals, outpatient rehabilitation clinics,...
  • Stryker
    A global medical technology company offering orthopedic implants, surgical equipment, and neurotechnology products. A leader...
  • Surgery Partners
    Surgery Partners is a leading operator of surgical facilities and ancillary services in the United...
  • Teladoc Health
    Teladoc Health is a global leader in whole-person virtual care, providing on-demand healthcare, expert medical...
  • Teleflex
    Fortune 1000 company Teleflex. Public API documentation has not yet been catalogued in the API...
  • Tenet Healthcare
    Tenet Healthcare is a diversified healthcare services company and Fortune 500 organization operating regionally focused,...
  • The Cigna Group
    A global health services company providing health insurance, pharmacy benefits, and behavioral health services. Serves...
  • Thermo Fisher Scientific
    The world's largest serving science company providing laboratory equipment, instruments, reagents, and consumables. Supports research,...
  • UnitedHealth Group
    UnitedHealth Group is a diversified health care company with two distinct platforms, UnitedHealthcare for health...
  • UnitedHealth Group
    The largest healthcare company in the world by revenue, operating UnitedHealthcare insurance and Optum health...
  • Universal Health Services
    Universal Health Services (UHS) is one of the nation's largest hospital management companies, operating acute...
  • UPMC
    A world-renowned health care provider and insurer headquartered in Pittsburgh, Pennsylvania. One of the largest...
  • Vertex Pharmaceuticals
    Vertex Pharmaceuticals is a global biotechnology company headquartered in Boston, Massachusetts, focused on scientific innovation...
  • Walgreens
    One of the largest pharmacy store chains in the United States operating thousands of locations...
  • Walgreens Boots Alliance
    Walgreens Boots Alliance (WBA) is a global pharmacy-led health and wellbeing enterprise operating in more...
  • Zimmer Biomet
    Zimmer Biomet is a global medical technology company that designs, manufactures, and markets orthopedic reconstructive...

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

Sort
Expand
2185 capabilities

Retrieves material master data from SAP by material number, returning description, unit of measure, material group, and plant assignments.

naftiko: '0.5'
info:
  label: SAP Material Master Lookup
  description: Retrieves material master data from SAP by material number, returning description, unit of measure, material group, and plant assignments.
  tags:
  - supply-chain
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: material-master
    port: 8080
    tools:
    - name: get-material-master
      description: Given a SAP material number, return the material description, base unit of measure, material group, and assigned plants. Use when supply chain needs material details.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number.
      call: sap-erp.get-material
      with:
        material: '{{material_number}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.d.MaterialDescription
      - name: base_uom
        type: string
        mapping: $.d.BaseUnitOfMeasure
      - name: material_group
        type: string
        mapping: $.d.MaterialGroup
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Material('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material
        method: GET
Open in Framework → View in Fleet → sap-material-master-lookup.yml

Retrieves a travel request from SAP Concur by request ID, returning trip details, estimated cost, and approval status.

naftiko: '0.5'
info:
  label: SAP Concur Travel Request Lookup
  description: Retrieves a travel request from SAP Concur by request ID, returning trip details, estimated cost, and approval status.
  tags:
  - finance
  - travel
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: travel-management
    port: 8080
    tools:
    - name: get-travel-request
      description: Given a Concur travel request ID, return the trip destination, dates, estimated cost, and approval status. Use when employees need travel request visibility.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: SAP Concur travel request ID.
      call: concur.get-request
      with:
        id: '{{request_id}}'
      outputParameters:
      - name: destination
        type: string
        mapping: $.MainDestination
      - name: start_date
        type: string
        mapping: $.StartDate
      - name: total_estimated_amount
        type: number
        mapping: $.TotalEstimatedAmount
      - name: approval_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: requests
      path: /travelrequest/requests/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-request
        method: GET
Open in Framework → View in Fleet → sap-concur-travel-request-lookup.yml

Triggers a Power BI dataset refresh for the executive KPI dashboard and posts a confirmation to the leadership Teams channel.

naftiko: '0.5'
info:
  label: Power BI Executive Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the executive KPI dashboard and posts a confirmation to the leadership Teams channel.
  tags:
  - analytics
  - power-bi
  - reporting
  - executive
capability:
  exposes:
  - type: mcp
    namespace: exec-reporting
    port: 8080
    tools:
    - name: refresh-executive-dashboard
      description: Trigger a Power BI dataset refresh for the executive KPI dashboard and notify the leadership Teams channel when complete. Use each morning before leadership stand-ups to ensure dashboards reflect current data.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the executive KPI dashboard.
      - name: leadership_channel_id
        in: body
        type: string
        description: Leadership Teams channel ID.
      steps:
      - name: refresh-pbi
        type: call
        call: powerbi-exec.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-leadership
        type: call
        call: msteams-exec.post-channel-message
        with:
          channel_id: '{{leadership_channel_id}}'
          text: 'Executive KPI dashboard refresh triggered (dataset {{dataset_id}}). Refresh ID: {{refresh-pbi.refreshId}}'
  consumes:
  - type: http
    namespace: powerbi-exec
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams-exec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-executive-dashboard-refresh.yml

Triggers SAP S/4HANA month-end financial close, validates journal completeness, and notifies the finance team via Teams upon completion.

naftiko: '0.5'
info:
  label: Monthly Financial Period Close
  description: Triggers SAP S/4HANA month-end financial close, validates journal completeness, and notifies the finance team via Teams upon completion.
  tags:
  - finance
  - erp
  - period-close
  - sap
  - accounting
capability:
  exposes:
  - type: mcp
    namespace: finance-period-close
    port: 8080
    tools:
    - name: trigger-period-close
      description: Given a fiscal period and company code, initiate the SAP S/4HANA period close sequence and 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. 'ABBT'.
      - name: finance_channel_id
        in: body
        type: string
        description: Finance Teams channel ID.
      steps:
      - name: close-period
        type: call
        call: sap-fi-close.close-period
        with:
          fiscal_period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: validate-postings
        type: call
        call: sap-fi-journal.check-completeness
        with:
          fiscal_period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: notify-finance
        type: call
        call: msteams-finsclose.post-channel-message
        with:
          channel_id: '{{finance_channel_id}}'
          text: 'Period {{fiscal_period}} closed for company {{company_code}}. Journal status: {{validate-postings.status}} | Open items: {{validate-postings.open_count}}'
  consumes:
  - type: http
    namespace: sap-fi-close
    baseUri: https://abbott-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-fi-journal
    baseUri: https://abbott-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-finsclose
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → monthly-financial-period-close.yml

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

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure Observability
  description: When a GitHub Actions workflow fails on a protected branch, opens a Jira bug, creates 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 in the engineering project, create a Datadog deployment 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.
      - 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-eng.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}'
          description: 'Commit: {{commit_sha}}

            Run: {{run_url}}'
      - name: log-deploy-event
        type: call
        call: datadog-ci.create-event
        with:
          title: 'CI Failure: {{repo}} — {{branch}}'
          text: Commit {{commit_sha}} | Workflow {{workflow_name}} failed
          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-eng
    baseUri: https://abbott.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-ci
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-observability.yml

Launches a compensation review cycle by pulling performance ratings from Workday, generating recommendations, notifying managers, and creating approval tasks.

naftiko: '0.5'
info:
  label: Workday Compensation Review Orchestration
  description: Launches a compensation review cycle by pulling performance ratings from Workday, generating recommendations, notifying managers, and creating approval tasks.
  tags:
  - hr
  - finance
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: comp-review
    port: 8080
    tools:
    - name: launch-comp-review
      description: Given a department code and review cycle name, pull performance data, generate comp recommendations, notify managers, and create approval workflows. Use when HR launches annual compensation reviews.
      inputParameters:
      - name: department_code
        in: body
        type: string
        description: Workday department code.
      - name: cycle_name
        in: body
        type: string
        description: Compensation review cycle name.
      steps:
      - name: get-performance-data
        type: call
        call: workday.get-performance-ratings
        with:
          department: '{{department_code}}'
      - name: generate-recommendations
        type: call
        call: workday.create-comp-recommendations
        with:
          department: '{{department_code}}'
          cycle: '{{cycle_name}}'
          performance_data: '{{get-performance-data.ratings}}'
      - name: create-approval-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Compensation review approval: {{department_code}} - {{cycle_name}}'
          assigned_group: HR_Compensation
          category: hr_compensation
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: hr-compensation
          text: 'Compensation review cycle ''{{cycle_name}}'' launched for department {{department_code}}. {{generate-recommendations.count}} recommendations generated. Approval task: {{create-approval-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: performance
      path: /performance/ratings
      operations:
      - name: get-performance-ratings
        method: GET
    - name: compensation
      path: /compensation/recommendations
      operations:
      - name: create-comp-recommendations
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-compensation-review-orchestration.yml

Retrieves the current status of a pending FDA 510(k) premarket notification by submission number from the regulatory affairs tracking system.

naftiko: '0.5'
info:
  label: FDA 510(k) Submission Status Lookup
  description: Retrieves the current status of a pending FDA 510(k) premarket notification by submission number from the regulatory affairs tracking system.
  tags:
  - regulatory
  - fda
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: get-510k-status
      description: Given a 510(k) submission number, return the current review status, reviewer assignment, and expected decision date. Use when regulatory affairs needs to check submission progress.
      inputParameters:
      - name: submission_number
        in: body
        type: string
        description: FDA 510(k) submission number, e.g. 'K231234'.
      call: veeva-vault.get-submission
      with:
        submission_id: '{{submission_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.status
      - name: reviewer
        type: string
        mapping: $.data.assigned_reviewer
      - name: expected_decision_date
        type: string
        mapping: $.data.target_date
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://abbott-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: submissions
      path: /objects/submission__c/{{submission_id}}
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: get-submission
        method: GET
Open in Framework → View in Fleet → fda-510-k-submission-status-lookup.yml

Retrieves metadata for archived data files in Amazon S3, returning object size, storage class, and last modified date.

naftiko: '0.5'
info:
  label: Amazon S3 Data Archive Lookup
  description: Retrieves metadata for archived data files in Amazon S3, returning object size, storage class, and last modified date.
  tags:
  - data
  - cloud
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: data-archive
    port: 8080
    tools:
    - name: get-archive-metadata
      description: Given an S3 bucket and key prefix, return matching object metadata including size, storage class, and timestamps. Use when data teams need to locate archived datasets.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: S3 bucket name.
      - name: prefix
        in: body
        type: string
        description: Object key prefix.
      call: s3.list-objects
      with:
        bucket: '{{bucket}}'
        prefix: '{{prefix}}'
      outputParameters:
      - name: object_count
        type: integer
        mapping: $.KeyCount
      - name: total_size_bytes
        type: integer
        mapping: $.total_size
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_s3_auth
      placement: header
    resources:
    - name: objects
      path: /{{bucket}}?list-type=2&prefix={{prefix}}
      inputParameters:
      - name: bucket
        in: path
      - name: prefix
        in: query
      operations:
      - name: list-objects
        method: GET
Open in Framework → View in Fleet → amazon-s3-data-archive-lookup.yml

At sprint start, syncs the Jira backlog prioritization to the Confluence planning page and posts the sprint goal to the engineering Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Planning Board Sync
  description: At sprint start, syncs the Jira backlog prioritization to the Confluence planning page and posts the sprint goal to the engineering Teams channel.
  tags:
  - devops
  - jira
  - confluence
  - agile
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: sprint-planning
    port: 8080
    tools:
    - name: sync-sprint-plan
      description: Given a Jira sprint ID and Confluence page ID, retrieve the sprint's planned issues and update the Confluence sprint planning page with the current backlog. Post the sprint goal to the engineering Teams channel. Use at sprint kickoff.
      inputParameters:
      - name: sprint_id
        in: body
        type: string
        description: Jira sprint ID to sync.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID for the sprint planning document.
      - name: eng_channel_id
        in: body
        type: string
        description: Engineering Teams channel ID.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira-sprint.get-sprint-issues
        with:
          sprint_id: '{{sprint_id}}'
      - name: update-confluence
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          content: 'Sprint {{sprint_id}} planned issues: {{get-sprint-issues.issue_keys}}'
      - name: post-sprint-goal
        type: call
        call: msteams-sprint.post-channel-message
        with:
          channel_id: '{{eng_channel_id}}'
          text: 'Sprint {{sprint_id}} started. {{get-sprint-issues.total_count}} issues planned. Confluence updated: {{update-confluence.url}}'
  consumes:
  - type: http
    namespace: jira-sprint
    baseUri: https://abbott.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - 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://abbott.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
  - type: http
    namespace: msteams-sprint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-planning-board-sync.yml

Generates a supplier quality scorecard by pulling rejection rates from SAP, audit findings from ServiceNow, and delivery performance from the procurement system.

naftiko: '0.5'
info:
  label: Supplier Quality Scorecard Generation
  description: Generates a supplier quality scorecard by pulling rejection rates from SAP, audit findings from ServiceNow, and delivery performance from the procurement system.
  tags:
  - quality
  - procurement
  - sap
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: supplier-quality
    port: 8080
    tools:
    - name: generate-supplier-scorecard
      description: Given a supplier ID, gather rejection rates, audit findings, and delivery metrics to produce a quality scorecard. Use when procurement or quality teams evaluate supplier performance.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: SAP supplier/vendor number.
      steps:
      - name: get-rejection-data
        type: call
        call: sap-erp.get-supplier-rejections
        with:
          vendor_id: '{{supplier_id}}'
      - name: get-audit-findings
        type: call
        call: servicenow.query-supplier-audits
        with:
          supplier_id: '{{supplier_id}}'
      - name: get-delivery-performance
        type: call
        call: sap-erp.get-delivery-metrics
        with:
          vendor_id: '{{supplier_id}}'
      - name: calculate-scorecard
        type: call
        call: snowflake.execute-query
        with:
          query_name: supplier_scorecard
          params: '{{supplier_id}},{{get-rejection-data.rejection_rate}},{{get-audit-findings.findings_count}},{{get-delivery-performance.on_time_rate}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_VENDOR_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: rejections
      path: /A_VendorRejection(Vendor='{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-supplier-rejections
        method: GET
    - name: delivery
      path: /A_VendorDelivery(Vendor='{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-delivery-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: audits
      path: /table/u_supplier_audit
      operations:
      - name: query-supplier-audits
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → supplier-quality-scorecard-generation.yml

Sends a contract for electronic signature via DocuSign, updates the Salesforce opportunity with the envelope status, and notifies legal when fully executed.

naftiko: '0.5'
info:
  label: DocuSign Contract Execution Orchestration
  description: Sends a contract for electronic signature via DocuSign, updates the Salesforce opportunity with the envelope status, and notifies legal when fully executed.
  tags:
  - legal
  - sales
  - docusign
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: contract-execution
    port: 8080
    tools:
    - name: send-contract-for-signature
      description: Given a Salesforce opportunity ID and contract template, send the contract via DocuSign, update CRM, and notify legal upon completion. Use when sales needs to execute a customer contract.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: template_id
        in: body
        type: string
        description: DocuSign template identifier.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{opportunity_id}}'
      - name: send-envelope
        type: call
        call: docusign.create-envelope
        with:
          template_id: '{{template_id}}'
          signer_email: '{{get-opportunity.contact_email}}'
          signer_name: '{{get-opportunity.contact_name}}'
      - name: update-crm
        type: call
        call: salesforce.update-opportunity
        with:
          opp_id: '{{opportunity_id}}'
          contract_status: Sent for Signature
          envelope_id: '{{send-envelope.envelope_id}}'
      - name: notify-legal
        type: call
        call: msteams.send-message
        with:
          channel_id: legal-contracts
          text: 'Contract sent for {{get-opportunity.account_name}} via DocuSign. Envelope: {{send-envelope.envelope_id}}. Opportunity: {{opportunity_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbott.my.salesforce.com/services/data/v59.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
      - name: update-opportunity
        method: PATCH
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /accounts/{{account_id}}/envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → docusign-contract-execution-orchestration.yml

Retrieves budget vs actual figures for an SAP cost center, returning planned budget, actual spend, and variance.

naftiko: '0.5'
info:
  label: SAP Cost Center Budget Lookup
  description: Retrieves budget vs actual figures for an SAP cost center, returning planned budget, actual spend, and variance.
  tags:
  - finance
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: cost-center-budget
    port: 8080
    tools:
    - name: get-cost-center-budget
      description: Given a cost center code and fiscal period, return the planned budget, actual spend, and variance. Use when finance needs budget performance data.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: SAP cost center code.
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period, e.g. '2026-03'.
      call: sap-erp.get-budget
      with:
        cost_center: '{{cost_center}}'
        period: '{{fiscal_period}}'
      outputParameters:
      - name: planned_budget
        type: number
        mapping: $.d.PlannedAmount
      - name: actual_spend
        type: number
        mapping: $.d.ActualAmount
      - name: variance
        type: number
        mapping: $.d.Variance
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/FI_CO_BUDGET_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: budgets
      path: /A_CostCenterBudget(CostCenter='{{cost_center}}',Period='{{period}}')
      inputParameters:
      - name: cost_center
        in: path
      - name: period
        in: path
      operations:
      - name: get-budget
        method: GET
Open in Framework → View in Fleet → sap-cost-center-budget-lookup.yml

When an environmental monitoring sensor detects an out-of-spec condition in a cleanroom, creates an incident, alerts quality, logs a deviation, and triggers investigation.

naftiko: '0.5'
info:
  label: Environmental Monitoring Alert Response
  description: When an environmental monitoring sensor detects an out-of-spec condition in a cleanroom, creates an incident, alerts quality, logs a deviation, and triggers investigation.
  tags:
  - manufacturing
  - quality
  - compliance
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: env-monitoring
    port: 8080
    tools:
    - name: handle-env-excursion
      description: Given a sensor ID, parameter name, and measured value, create an incident, alert quality, log a deviation, and initiate investigation. Use when cleanroom environmental monitoring detects out-of-spec conditions.
      inputParameters:
      - name: sensor_id
        in: body
        type: string
        description: Environmental monitoring sensor identifier.
      - name: parameter_name
        in: body
        type: string
        description: Parameter out of spec, e.g. 'particle_count', 'temperature', 'humidity'.
      - name: measured_value
        in: body
        type: string
        description: The measured out-of-spec value.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Environmental excursion: {{parameter_name}} at sensor {{sensor_id}}'
          category: manufacturing_quality
          priority: '2'
          assigned_group: Quality_Assurance
      - name: log-deviation
        type: call
        call: servicenow.create-deviation
        with:
          description: 'Environmental excursion: {{parameter_name}} measured {{measured_value}} at sensor {{sensor_id}}'
          area: cleanroom
          incident_ref: '{{create-incident.number}}'
      - name: alert-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-alerts
          text: 'ENV ALERT: {{parameter_name}} excursion at sensor {{sensor_id}}. Value: {{measured_value}}. Deviation: {{log-deviation.number}}. Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
    - name: deviations
      path: /table/u_deviation
      operations:
      - name: create-deviation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → environmental-monitoring-alert-response.yml

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

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Response
  description: When AWS Cost Anomaly Detection raises an alert, creates a Datadog event, opens a Jira ticket for the cloud team, and posts an alert to the FinOps Teams channel.
  tags:
  - finops
  - cloud
  - aws
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: finops-ops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS cost anomaly ID, service name, and estimated overage, create a Datadog warning event, open a Jira ticket for the cloud FinOps team, and post to the FinOps Teams channel. Use when AWS Cost Anomaly Detection triggers above the configured 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 cost 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.create-event
        with:
          title: 'AWS Cost Anomaly: {{service_name}}'
          text: Anomaly {{anomaly_id}} — estimated overage ${{estimated_overage_usd}}
          alert_type: warning
      - name: open-jira
        type: call
        call: jira-cloud.create-issue
        with:
          project_key: CLOUD
          issuetype: Task
          summary: 'Cost anomaly: {{service_name}} +${{estimated_overage_usd}}'
          description: 'AWS anomaly {{anomaly_id}}. Datadog: {{create-dd-event.id}}. Investigate and remediate.'
      - 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
    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-cloud
    baseUri: https://abbott.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-response.yml

When an R&D experiment completes, ingests results into Snowflake, triggers quality validation, generates summary statistics, and notifies the research team.

naftiko: '0.5'
info:
  label: R&D Experiment Data Pipeline Orchestration
  description: When an R&D experiment completes, ingests results into Snowflake, triggers quality validation, generates summary statistics, and notifies the research team.
  tags:
  - rd
  - analytics
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rd-data-pipeline
    port: 8080
    tools:
    - name: process-experiment-results
      description: Given an experiment ID and data file path, ingest results, validate quality, generate statistics, and notify researchers. Use when laboratory automation completes an experiment run.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: R&D experiment identifier.
      - name: data_path
        in: body
        type: string
        description: S3 path to the experiment results file.
      steps:
      - name: ingest-data
        type: call
        call: snowflake.execute-query
        with:
          query_name: ingest_experiment_data
          params: '{{experiment_id}},{{data_path}}'
      - name: validate-quality
        type: call
        call: snowflake.execute-query
        with:
          query_name: validate_experiment_quality
          params: '{{experiment_id}}'
      - name: generate-statistics
        type: call
        call: snowflake.execute-query
        with:
          query_name: experiment_summary_stats
          params: '{{experiment_id}}'
      - name: notify-researchers
        type: call
        call: msteams.send-message
        with:
          channel_id: rd-lab-results
          text: 'Experiment {{experiment_id}} processed. Quality: {{validate-quality.pass_rate}}% pass rate. Mean result: {{generate-statistics.mean_value}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → r-d-experiment-data-pipeline-orchestration.yml

Tracks regulatory submission status for clinical trial documents in Veeva Vault, logs updates in ServiceNow, and notifies the regulatory affairs team via Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Regulatory Submission Tracker
  description: Tracks regulatory submission status for clinical trial documents in Veeva Vault, logs updates in ServiceNow, and notifies the regulatory affairs team via Teams.
  tags:
  - regulatory
  - clinical
  - veeva
  - servicenow
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: track-submission-status
      description: Given a Veeva Vault document ID, retrieve the current regulatory submission status, update the corresponding ServiceNow record, and notify the regulatory affairs Teams channel. Use when regulatory teams need to track submission milestones.
      inputParameters:
      - name: vault_document_id
        in: body
        type: string
        description: Veeva Vault document ID for the regulatory submission.
      - name: servicenow_record_id
        in: body
        type: string
        description: ServiceNow record sys_id to update with submission status.
      - name: teams_channel_id
        in: body
        type: string
        description: Regulatory affairs Teams channel ID.
      steps:
      - name: get-doc-status
        type: call
        call: veeva-vault.get-document
        with:
          document_id: '{{vault_document_id}}'
      - name: update-snow-record
        type: call
        call: servicenow-reg.update-record
        with:
          sys_id: '{{servicenow_record_id}}'
          submission_status: '{{get-doc-status.lifecycle_state}}'
          last_updated: '{{get-doc-status.modified_date}}'
      - name: notify-reg-team
        type: call
        call: msteams-reg.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Regulatory submission {{vault_document_id}} status: {{get-doc-status.lifecycle_state}} (updated {{get-doc-status.modified_date}}). ServiceNow updated: {{servicenow_record_id}}'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://abbott.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: servicenow-reg
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/u_regulatory_submission/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: msteams-reg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-regulatory-submission-tracker.yml

Manages reagent lot release by checking QC test results in SAP, verifying specifications, creating the release certificate, and notifying distribution.

naftiko: '0.5'
info:
  label: Diagnostic Reagent Lot Release Orchestration
  description: Manages reagent lot release by checking QC test results in SAP, verifying specifications, creating the release certificate, and notifying distribution.
  tags:
  - quality
  - manufacturing
  - diagnostics
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lot-release
    port: 8080
    tools:
    - name: release-reagent-lot
      description: Given a batch number and product code, verify QC results, generate release certificate, update SAP status, and notify distribution. Use when quality assurance releases a diagnostic reagent lot.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: Manufacturing batch number.
      - name: product_code
        in: body
        type: string
        description: Diagnostic reagent product code.
      steps:
      - name: get-qc-results
        type: call
        call: sap-erp.get-inspection
        with:
          batch: '{{batch_number}}'
          material: '{{product_code}}'
      - name: update-batch-status
        type: call
        call: sap-erp.release-batch
        with:
          batch: '{{batch_number}}'
          status: released
      - name: create-certificate
        type: call
        call: servicenow.create-task
        with:
          short_description: 'CoA generation: Batch {{batch_number}} - {{product_code}}'
          category: quality_release
          assigned_group: Quality_Assurance
      - name: notify-distribution
        type: call
        call: msteams.send-message
        with:
          channel_id: diagnostics-distribution
          text: 'Reagent lot {{batch_number}} ({{product_code}}) released. QC result: {{get-qc-results.result}}. CoA task: {{create-certificate.number}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspections
      path: /A_InspectionResult
      operations:
      - name: get-inspection
        method: GET
    - name: batches
      path: /A_BatchRelease
      operations:
      - name: release-batch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → diagnostic-reagent-lot-release-orchestration.yml

When a medical device complaint exceeds severity threshold, automatically creates a CAPA record, notifies the quality team, and updates the complaint tracking system.

naftiko: '0.5'
info:
  label: Device Complaint to CAPA Orchestration
  description: When a medical device complaint exceeds severity threshold, automatically creates a CAPA record, notifies the quality team, and updates the complaint tracking system.
  tags:
  - quality
  - regulatory
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-complaint-capa
    port: 8080
    tools:
    - name: escalate-complaint-to-capa
      description: Given a complaint case ID, evaluate severity and create a CAPA if threshold is met, notify quality leadership, and update the complaint record. Use when quality assurance identifies a high-severity device complaint.
      inputParameters:
      - name: complaint_case_id
        in: body
        type: string
        description: Salesforce complaint case ID.
      steps:
      - name: get-complaint
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{complaint_case_id}}'
      - name: create-capa
        type: call
        call: servicenow.create-capa
        with:
          short_description: 'CAPA from complaint: {{get-complaint.subject}}'
          severity: '{{get-complaint.severity}}'
          product_code: '{{get-complaint.product_code}}'
          source_complaint: '{{complaint_case_id}}'
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-leadership
          text: 'CAPA {{create-capa.number}} created from device complaint {{complaint_case_id}} - Severity: {{get-complaint.severity}} - Product: {{get-complaint.product_code}}'
      - name: update-complaint
        type: call
        call: salesforce.update-case
        with:
          case_id: '{{complaint_case_id}}'
          capa_reference: '{{create-capa.number}}'
          status: CAPA Initiated
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbott.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
      - name: update-case
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: capa
      path: /table/u_capa
      operations:
      - name: create-capa
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → device-complaint-to-capa-orchestration.yml

Checks a GitHub repository for branch protection rules, required reviewers, and security scanning configuration.

naftiko: '0.5'
info:
  label: GitHub Repository Compliance Check
  description: Checks a GitHub repository for branch protection rules, required reviewers, and security scanning configuration.
  tags:
  - security
  - devops
  - github
capability:
  exposes:
  - type: mcp
    namespace: repo-compliance
    port: 8080
    tools:
    - name: check-repo-compliance
      description: Given a GitHub repository name, return branch protection status, required reviewer count, and security scanning enablement. Use when engineering leads need to verify repo governance.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name in org/repo format.
      call: github.get-repo-settings
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: branch_protection_enabled
        type: boolean
        mapping: $.data.branch_protection
      - name: required_reviewers
        type: integer
        mapping: $.data.required_reviewers
      - name: security_scanning
        type: boolean
        mapping: $.data.security_scanning_enabled
  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-settings
        method: GET
Open in Framework → View in Fleet → github-repository-compliance-check.yml

When a product recall is initiated, creates a ServiceNow high-priority incident, notifies the recall coordinator team in Teams, and opens a Salesforce case for customer communication tracking.

naftiko: '0.5'
info:
  label: Recall Management Notification Workflow
  description: When a product recall is initiated, creates a ServiceNow high-priority incident, notifies the recall coordinator team in Teams, and opens a Salesforce case for customer communication tracking.
  tags:
  - regulatory
  - recall
  - servicenow
  - salesforce
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: recall-ops
    port: 8080
    tools:
    - name: initiate-recall-workflow
      description: Given a product lot number, recall class, and affected market, create a P1 ServiceNow recall incident, open a Salesforce case for customer communication tracking, and notify the recall coordinator Teams channel. Use when a product recall decision is made.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Product name subject to recall.
      - name: lot_numbers
        in: body
        type: string
        description: Comma-separated list of affected lot numbers.
      - name: recall_class
        in: body
        type: string
        description: 'FDA recall classification: I, II, or III.'
      - name: affected_markets
        in: body
        type: string
        description: Comma-separated list of affected markets/countries.
      - name: recall_channel_id
        in: body
        type: string
        description: Recall coordinator Teams channel ID.
      steps:
      - name: create-recall-incident
        type: call
        call: servicenow-recall.create-incident
        with:
          short_description: Product Recall — {{product_name}} — Class {{recall_class}}
          description: 'Lots: {{lot_numbers}} | Markets: {{affected_markets}}'
          priority: '1'
          category: Product_Recall
      - name: create-cx-case
        type: call
        call: salesforce-recall.create-case
        with:
          subject: Recall notification — {{product_name}} Class {{recall_class}}
          description: 'Recall initiated. Lots: {{lot_numbers}}. INC: {{create-recall-incident.number}}'
          priority: High
      - name: notify-recall-team
        type: call
        call: msteams-recall.post-channel-message
        with:
          channel_id: '{{recall_channel_id}}'
          text: 'PRODUCT RECALL: {{product_name}} Class {{recall_class}} | Lots: {{lot_numbers}} | Markets: {{affected_markets}} | INC: {{create-recall-incident.number}} | Case: {{create-cx-case.case_number}}'
  consumes:
  - type: http
    namespace: servicenow-recall
    baseUri: https://abbott.service-now.com/api/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-recall
    baseUri: https://abbott.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams-recall
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → recall-management-notification-workflow.yml

Queries the Kong API gateway for health status of registered services, returning uptime, request counts, and error rates.

naftiko: '0.5'
info:
  label: API Gateway Health Check
  description: Queries the Kong API gateway for health status of registered services, returning uptime, request counts, and error rates.
  tags:
  - it
  - integration
  - kong
capability:
  exposes:
  - type: mcp
    namespace: api-health
    port: 8080
    tools:
    - name: check-api-gateway-health
      description: Given a service name, return the API gateway health metrics including uptime, request volume, and error rate. Use when platform engineering needs API service visibility.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Kong service name.
      call: kong.get-service-status
      with:
        service: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.status
      - name: request_count
        type: integer
        mapping: $.data.request_count
      - name: error_rate
        type: number
        mapping: $.data.error_rate
  consumes:
  - type: http
    namespace: kong
    baseUri: https://abbott-api.konghq.com/admin-api
    authentication:
      type: apikey
      key: apikey
      value: $secrets.kong_admin_key
      placement: header
    resources:
    - name: services
      path: /services/{{service}}/status
      inputParameters:
      - name: service
        in: path
      operations:
      - name: get-service-status
        method: GET
Open in Framework → View in Fleet → api-gateway-health-check.yml

When a critical security alert fires, creates a security incident, isolates the affected endpoint, notifies the SOC team, and logs the event for compliance.

naftiko: '0.5'
info:
  label: Security Incident Response Orchestration
  description: When a critical security alert fires, creates a security incident, isolates the affected endpoint, notifies the SOC team, and logs the event for compliance.
  tags:
  - security
  - it
  - crowdstrike
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-incident-response
    port: 8080
    tools:
    - name: respond-to-security-incident
      description: Given a CrowdStrike detection ID and hostname, create a security incident, isolate the endpoint, notify the SOC, and log for compliance. Use when SOC analysts confirm a real threat.
      inputParameters:
      - name: detection_id
        in: body
        type: string
        description: CrowdStrike detection ID.
      - name: hostname
        in: body
        type: string
        description: Affected endpoint hostname.
      steps:
      - name: create-sec-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Security incident: threat on {{hostname}}'
          category: security
          priority: '1'
          assigned_group: SOC
      - name: isolate-endpoint
        type: call
        call: crowdstrike.contain-host
        with:
          hostname: '{{hostname}}'
      - name: notify-soc
        type: call
        call: msteams.send-message
        with:
          channel_id: security-ops-center
          text: 'CRITICAL: Security incident {{create-sec-incident.number}} - Host {{hostname}} isolated. Detection: {{detection_id}}. Containment status: {{isolate-endpoint.status}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/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: hosts
      path: /devices/entities/host-actions/v2
      operations:
      - name: contain-host
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → security-incident-response-orchestration.yml

Enrolls a Salesforce lead in a Marketo nurture program based on product interest, and syncs engagement data back to Salesforce after 30 days.

naftiko: '0.5'
info:
  label: Marketo Lead Nurture Enrollment
  description: Enrolls a Salesforce lead in a Marketo nurture program based on product interest, and syncs engagement data back to Salesforce after 30 days.
  tags:
  - marketing
  - salesforce
  - marketo
  - lead-nurture
  - crm
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 marketing qualifies a lead for a product-specific 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-marketo
        type: call
        call: marketo-nurture.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://abbott.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-nurture
    baseUri: https://abbott.mktorest.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.marketo_token
    resources:
    - name: program-members
      path: /leads/programs/{{program_id}}.json
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: add-to-program
        method: POST
Open in Framework → View in Fleet → marketo-lead-nurture-enrollment.yml

Retrieves Abbott employer brand metrics from LinkedIn including follower count, engagement rate, and talent pipeline statistics.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Metrics Lookup
  description: Retrieves Abbott employer brand metrics from LinkedIn including follower count, engagement rate, and talent pipeline statistics.
  tags:
  - hr
  - marketing
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: employer-brand
    port: 8080
    tools:
    - name: get-employer-metrics
      description: Return current LinkedIn employer brand metrics including follower count, post engagement rate, and talent pipeline size. Use when HR or employer brand teams need performance data.
      inputParameters:
      - name: time_period
        in: body
        type: string
        description: Reporting period, e.g. 'last_30_days'.
      call: linkedin.get-organization-stats
      with:
        period: '{{time_period}}'
      outputParameters:
      - name: follower_count
        type: integer
        mapping: $.data.followerCount
      - name: engagement_rate
        type: number
        mapping: $.data.engagementRate
      - name: talent_pipeline_size
        type: integer
        mapping: $.data.talentPipelineSize
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: organization-stats
      path: /organizationPageStatistics
      operations:
      - name: get-organization-stats
        method: GET
Open in Framework → View in Fleet → linkedin-employer-brand-metrics-lookup.yml

Enriches a Salesforce healthcare customer account with ZoomInfo firmographic data and syncs the updated record to SAP for billing alignment.

naftiko: '0.5'
info:
  label: Salesforce Customer Account Enrichment
  description: Enriches a Salesforce healthcare customer account with ZoomInfo firmographic data and syncs the updated record to SAP for billing alignment.
  tags:
  - crm
  - sales
  - salesforce
  - data-enrichment
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: crm-enrichment
    port: 8080
    tools:
    - name: enrich-customer-account
      description: Given a Salesforce account ID and ZoomInfo company match key, fetch firmographic data from ZoomInfo, update the Salesforce account, and sync key fields to the SAP customer master. Use when account records need to be refreshed with current company data.
      inputParameters:
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce Account record ID.
      - name: zoominfo_company_id
        in: body
        type: string
        description: ZoomInfo company ID for firmographic lookup.
      steps:
      - name: get-firmographics
        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: '{{get-firmographics.employee_count}}'
          annual_revenue: '{{get-firmographics.revenue}}'
          industry: '{{get-firmographics.industry}}'
      - name: sync-sap-customer
        type: call
        call: sap-erp-crm.update-customer
        with:
          account_id: '{{salesforce_account_id}}'
          company_name: '{{get-firmographics.company_name}}'
          industry: '{{get-firmographics.industry}}'
  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://abbott.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: sap-erp-crm
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/BUSINESS_PARTNER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: customers
      path: /A_BusinessPartner/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-customer
        method: PATCH
Open in Framework → View in Fleet → salesforce-customer-account-enrichment.yml

Looks up a manufacturing batch record in SAP to return batch status, yield data, and quality release information.

naftiko: '0.5'
info:
  label: Manufacturing Batch Record Status Check
  description: Looks up a manufacturing batch record in SAP to return batch status, yield data, and quality release information.
  tags:
  - manufacturing
  - quality
  - sap
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-batch
    port: 8080
    tools:
    - name: get-batch-status
      description: Given a batch number, return the manufacturing batch record status, yield percentage, and quality release status. Use when production teams need batch visibility.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: SAP batch number, e.g. 'BATCH-2026-001234'.
      call: sap-erp.get-batch-record
      with:
        batch_id: '{{batch_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.BatchStatus
      - name: yield_percentage
        type: number
        mapping: $.d.YieldPercent
      - name: quality_release
        type: string
        mapping: $.d.QualityReleaseStatus
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batch-records
      path: /A_BatchRecord('{{batch_id}}')
      inputParameters:
      - name: batch_id
        in: path
      operations:
      - name: get-batch-record
        method: GET
Open in Framework → View in Fleet → manufacturing-batch-record-status-check.yml

Coordinates a new FreeStyle Libre product launch by creating a Marketo campaign, updating Salesforce opportunity stages, and scheduling LinkedIn promotional content.

naftiko: '0.5'
info:
  label: FreeStyle Libre Device Launch Campaign
  description: Coordinates a new FreeStyle Libre product launch by creating a Marketo campaign, updating Salesforce opportunity stages, and scheduling LinkedIn promotional content.
  tags:
  - marketing
  - salesforce
  - marketo
  - linkedin
  - medical-devices
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: setup-device-launch-campaign
      description: Given a product name, launch date, and target segment, create a Marketo email campaign, update related Salesforce opportunities to the pre-launch stage, and schedule a LinkedIn post for the launch date. Use when marketing a new medical device launch.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Product name, e.g. 'FreeStyle Libre 3 Plus'.
      - name: launch_date
        in: body
        type: string
        description: Product launch date in YYYY-MM-DD format.
      - name: target_segment
        in: body
        type: string
        description: Target audience segment, e.g. 'Endocrinologists' or 'Diabetes Care'.
      - name: linkedin_copy
        in: body
        type: string
        description: Copy text for the LinkedIn announcement post.
      steps:
      - name: create-marketo-campaign
        type: call
        call: marketo.create-campaign
        with:
          name: '{{product_name}} Launch — {{launch_date}}'
          segment: '{{target_segment}}'
          start_date: '{{launch_date}}'
      - name: update-sf-opportunities
        type: call
        call: salesforce-opps.update-opportunities
        with:
          product_name: '{{product_name}}'
          stage_name: Pre-Launch
      - name: schedule-linkedin-post
        type: call
        call: linkedin-mkt.create-post
        with:
          text: '{{linkedin_copy}}'
          scheduled_time: '{{launch_date}}'
  consumes:
  - type: http
    namespace: marketo
    baseUri: https://abbott.mktorest.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.marketo_token
    resources:
    - name: campaigns
      path: /campaigns.json
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: salesforce-opps
    baseUri: https://abbott.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: update-opportunities
        method: PATCH
  - type: http
    namespace: linkedin-mkt
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → freestyle-libre-device-launch-campaign.yml

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

naftiko: '0.5'
info:
  label: New Hire 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 the employee's 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 Abbott, {{get-employee.first_name}}! Your IT onboarding ticket is {{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://abbott.service-now.com/api/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://abbott.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-hire-onboarding-orchestration.yml

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

naftiko: '0.5'
info:
  label: Workday Employee Profile Lookup
  description: Retrieves an employee profile from Workday by worker ID, returning name, department, job title, manager, and location.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-profile
    port: 8080
    tools:
    - name: get-employee-profile
      description: Given a Workday worker ID, return the employee name, department, title, manager, and work location. Use when HR or managers need employee information.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      call: workday.get-worker
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.data.full_name
      - name: department
        type: string
        mapping: $.data.department
      - name: job_title
        type: string
        mapping: $.data.job_title
      - name: manager
        type: string
        mapping: $.data.manager_name
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-profile-lookup.yml

Queries Datadog for the current health status of a monitored application, returning uptime, error rate, and active alerts.

naftiko: '0.5'
info:
  label: Datadog Application Health Check
  description: Queries Datadog for the current health status of a monitored application, returning uptime, error rate, and active alerts.
  tags:
  - it
  - observability
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: app-monitoring
    port: 8080
    tools:
    - name: get-app-health
      description: Given a Datadog service name, return the current uptime percentage, error rate, and count of active alerts. Use when SRE teams need quick application health visibility.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Datadog service name.
      call: datadog.get-service-summary
      with:
        service: '{{service_name}}'
      outputParameters:
      - name: uptime_percent
        type: number
        mapping: $.data.uptime
      - name: error_rate
        type: number
        mapping: $.data.error_rate
      - name: active_alerts
        type: integer
        mapping: $.data.active_alerts_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: services
      path: /service_summary?service={{service}}
      inputParameters:
      - name: service
        in: query
      operations:
      - name: get-service-summary
        method: GET
Open in Framework → View in Fleet → datadog-application-health-check.yml

Triggers a refresh of the diagnostics division revenue dashboard in Power BI and returns the refresh status.

naftiko: '0.5'
info:
  label: Power BI Diagnostics Revenue Refresh
  description: Triggers a refresh of the diagnostics division revenue dashboard in Power BI and returns the refresh status.
  tags:
  - analytics
  - finance
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-diagnostics-dashboard
      description: Trigger a dataset refresh for the diagnostics revenue Power BI dashboard and return the refresh status. Use when finance needs updated revenue figures.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset identifier.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: refresh_id
        type: string
        mapping: $.id
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-diagnostics-revenue-refresh.yml

Posts a goods receipt in SAP for an inbound delivery, updating inventory and triggering quality inspection if required.

naftiko: '0.5'
info:
  label: SAP Goods Receipt Posting
  description: Posts a goods receipt in SAP for an inbound delivery, updating inventory and triggering quality inspection if required.
  tags:
  - supply-chain
  - manufacturing
  - sap
capability:
  exposes:
  - type: mcp
    namespace: goods-receipt
    port: 8080
    tools:
    - name: post-goods-receipt
      description: Given a delivery number, post the goods receipt in SAP and return the material document number. Use when warehouse teams confirm receipt of materials.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: SAP inbound delivery number.
      call: sap-erp.post-gr
      with:
        delivery: '{{delivery_number}}'
      outputParameters:
      - name: material_document
        type: string
        mapping: $.d.MaterialDocument
      - name: posting_date
        type: string
        mapping: $.d.PostingDate
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_GR_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: goods-receipts
      path: /A_GoodsReceipt
      operations:
      - name: post-gr
        method: POST
Open in Framework → View in Fleet → sap-goods-receipt-posting.yml

Manages a product development phase gate review by collecting deliverable status, scheduling the review meeting, generating the gate package, and notifying the review board.

naftiko: '0.5'
info:
  label: Product Lifecycle Phase Gate Orchestration
  description: Manages a product development phase gate review by collecting deliverable status, scheduling the review meeting, generating the gate package, and notifying the review board.
  tags:
  - rd
  - quality
  - manufacturing
  - jira
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: phase-gate
    port: 8080
    tools:
    - name: execute-phase-gate-review
      description: Given a project key and gate number, collect deliverable status, schedule the review, build the gate package, and notify the board. Use when R&D project management prepares for a phase gate review.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: gate_number
        in: body
        type: string
        description: Phase gate number, e.g. 'Gate-3'.
      steps:
      - name: get-deliverable-status
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND labels={{gate_number}}
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Phase gate review: {{project_key}} {{gate_number}}'
          category: rd_review
          assigned_group: Product_Review_Board
      - name: notify-board
        type: call
        call: msteams.send-message
        with:
          channel_id: product-review-board
          text: '{{gate_number}} review for {{project_key}} scheduled. Deliverables: {{get-deliverable-status.total}} total, {{get-deliverable-status.done}} complete. Review task: {{create-review-task.number}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abbott.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: servicenow
    baseUri: https://abbott.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-lifecycle-phase-gate-orchestration.yml

Manages a formula change for nutrition products by creating a change control, scheduling impact assessment, updating SAP BOM, and notifying regulatory and quality teams.

naftiko: '0.5'
info:
  label: Nutrition Formula Change Control Orchestration
  description: Manages a formula change for nutrition products by creating a change control, scheduling impact assessment, updating SAP BOM, and notifying regulatory and quality teams.
  tags:
  - manufacturing
  - quality
  - regulatory
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: formula-change
    port: 8080
    tools:
    - name: initiate-formula-change
      description: Given a product code and change description, create a change control, assess impact, update BOM, and notify stakeholders. Use when R&D or quality initiates a nutrition formula change.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Abbott nutrition product code.
      - name: change_description
        in: body
        type: string
        description: Description of the formula change.
      steps:
      - name: create-change-control
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Formula change: {{product_code}} - {{change_description}}'
          category: manufacturing
          assigned_group: Quality_Change_Control
      - name: check-bom
        type: call
        call: sap-erp.get-bom
        with:
          material: '{{product_code}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          channel_id: nutrition-quality
          text: 'Formula change initiated for {{product_code}}: {{change_description}}. Change control: {{create-change-control.number}}. Current BOM components: {{check-bom.component_count}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/PP_BOM_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: bom
      path: /A_BillOfMaterial('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-bom
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nutrition-formula-change-control-orchestration.yml

Provisions a new cloud environment by triggering a Terraform run, configuring Datadog monitoring, creating a ServiceNow CMDB record, and notifying the DevOps team.

naftiko: '0.5'
info:
  label: Terraform Environment Provisioning Orchestration
  description: Provisions a new cloud environment by triggering a Terraform run, configuring Datadog monitoring, creating a ServiceNow CMDB record, and notifying the DevOps team.
  tags:
  - devops
  - cloud
  - terraform
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: env-provisioning
    port: 8080
    tools:
    - name: provision-environment
      description: Given an environment name and Terraform workspace, run the infrastructure plan, configure monitoring, register in CMDB, and notify DevOps. Use when engineering needs a new cloud environment.
      inputParameters:
      - name: environment_name
        in: body
        type: string
        description: Name for the new environment.
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID.
      steps:
      - name: trigger-terraform
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: Provisioning {{environment_name}}
      - name: configure-monitoring
        type: call
        call: datadog.create-monitor
        with:
          name: '{{environment_name}} health'
          type: service check
          query: service:{{environment_name}}
      - name: create-cmdb-record
        type: call
        call: servicenow.create-ci
        with:
          name: '{{environment_name}}'
          category: cloud_environment
          terraform_run: '{{trigger-terraform.run_id}}'
      - name: notify-devops
        type: call
        call: msteams.send-message
        with:
          channel_id: devops-infra
          text: 'Environment {{environment_name}} provisioning started. Terraform run: {{trigger-terraform.run_id}}. CMDB: {{create-cmdb-record.sys_id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /workspaces/{{workspace_id}}/runs
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: create-monitor
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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: create-ci
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-environment-provisioning-orchestration.yml

Queries SAP for vendor payment status by invoice number, returning payment date, amount, and clearing document.

naftiko: '0.5'
info:
  label: SAP Vendor Payment Status Lookup
  description: Queries SAP for vendor payment status by invoice number, returning payment date, amount, and clearing document.
  tags:
  - finance
  - procurement
  - sap
capability:
  exposes:
  - type: mcp
    namespace: vendor-payments
    port: 8080
    tools:
    - name: get-payment-status
      description: Given an SAP invoice number, return the payment status, payment date, amount paid, and clearing document number. Use when accounts payable needs to verify vendor payment status.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: SAP invoice document number.
      call: sap-erp.get-invoice-payment
      with:
        invoice: '{{invoice_number}}'
      outputParameters:
      - name: payment_status
        type: string
        mapping: $.d.PaymentStatus
      - name: payment_date
        type: string
        mapping: $.d.PaymentDate
      - name: amount_paid
        type: number
        mapping: $.d.AmountPaid
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/FI_AP_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_Invoice('{{invoice}}')/payments
      inputParameters:
      - name: invoice
        in: path
      operations:
      - name: get-invoice-payment
        method: GET
Open in Framework → View in Fleet → sap-vendor-payment-status-lookup.yml

When a serious adverse event is reported, logs it in the safety database, notifies the medical monitor, creates a regulatory filing task, and updates the trial management system.

naftiko: '0.5'
info:
  label: Clinical Trial Adverse Event Reporting
  description: When a serious adverse event is reported, logs it in the safety database, notifies the medical monitor, creates a regulatory filing task, and updates the trial management system.
  tags:
  - clinical
  - regulatory
  - safety
  - oracle
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-safety
    port: 8080
    tools:
    - name: report-adverse-event
      description: Given a study ID, patient ID, and event description, log the adverse event in the safety database, alert the medical monitor, create a regulatory task, and update the CTMS. Use when clinical sites report serious adverse events.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: patient_id
        in: body
        type: string
        description: Patient subject identifier.
      - name: event_description
        in: body
        type: string
        description: Description of the adverse event.
      - name: severity
        in: body
        type: string
        description: 'Event severity: mild, moderate, severe, life-threatening.'
      steps:
      - name: log-safety-event
        type: call
        call: oracle-argus.create-case
        with:
          study_id: '{{study_id}}'
          subject_id: '{{patient_id}}'
          description: '{{event_description}}'
          seriousness: '{{severity}}'
      - name: notify-medical-monitor
        type: call
        call: msteams.send-message
        with:
          channel_id: medical-monitoring
          text: 'SAE Alert - Study {{study_id}}, Patient {{patient_id}}: {{event_description}} ({{severity}}). Argus case: {{log-safety-event.case_number}}'
      - name: create-regulatory-task
        type: call
        call: servicenow.create-task
        with:
          short_description: Regulatory SAE report - {{log-safety-event.case_number}}
          category: regulatory_filing
          priority: '1'
          assigned_group: Regulatory_Safety
      - name: update-ctms
        type: call
        call: oracle-clinical.update-study-event
        with:
          study_id: '{{study_id}}'
          subject_id: '{{patient_id}}'
          safety_case: '{{log-safety-event.case_number}}'
  consumes:
  - type: http
    namespace: oracle-argus
    baseUri: https://abbott-argus.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_argus_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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: oracle-clinical
    baseUri: https://abbott-ctms.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_ctms_token
    resources:
    - name: study-events
      path: /studies/{{study_id}}/subjects/{{subject_id}}/events
      inputParameters:
      - name: study_id
        in: path
      - name: subject_id
        in: path
      operations:
      - name: update-study-event
        method: POST
Open in Framework → View in Fleet → clinical-trial-adverse-event-reporting.yml

Queries the clinical trial management system for current patient enrollment counts, site-level progress, and projected completion dates for a given study.

naftiko: '0.5'
info:
  label: Clinical Trial Patient Enrollment Tracker
  description: Queries the clinical trial management system for current patient enrollment counts, site-level progress, and projected completion dates for a given study.
  tags:
  - clinical
  - rd
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: clinical-enrollment
    port: 8080
    tools:
    - name: get-enrollment-status
      description: Given a clinical study ID, return current enrollment count, target enrollment, site breakdown, and projected completion date. Use when clinical ops needs enrollment visibility.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical trial study identifier.
      call: oracle-clinical.get-study-enrollment
      with:
        study_id: '{{study_id}}'
      outputParameters:
      - name: enrolled_count
        type: integer
        mapping: $.data.enrolled
      - name: target_count
        type: integer
        mapping: $.data.target
      - name: projected_completion
        type: string
        mapping: $.data.projected_completion_date
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://abbott-ctms.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_ctms_token
    resources:
    - name: studies
      path: /studies/{{study_id}}/enrollment
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-study-enrollment
        method: GET
Open in Framework → View in Fleet → clinical-trial-patient-enrollment-tracker.yml

Retrieves marketing campaign performance metrics from Marketo by campaign ID, returning send count, open rate, click rate, and conversions.

naftiko: '0.5'
info:
  label: Marketo Campaign Performance Lookup
  description: Retrieves marketing campaign performance metrics from Marketo by campaign ID, returning send count, open rate, click rate, and conversions.
  tags:
  - marketing
  - analytics
  - marketo
capability:
  exposes:
  - type: mcp
    namespace: campaign-analytics
    port: 8080
    tools:
    - name: get-campaign-performance
      description: Given a Marketo campaign ID, return send count, open rate, click-through rate, and conversion count. Use when marketing teams need campaign performance data.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Marketo campaign ID.
      call: marketo.get-campaign-stats
      with:
        id: '{{campaign_id}}'
      outputParameters:
      - name: sends
        type: integer
        mapping: $.result.sends
      - name: open_rate
        type: number
        mapping: $.result.openRate
      - name: click_rate
        type: number
        mapping: $.result.clickRate
  consumes:
  - type: http
    namespace: marketo
    baseUri: https://abbott.mktorest.com/rest
    authentication:
      type: bearer
      token: $secrets.marketo_token
    resources:
    - name: campaigns
      path: /v1/campaigns/{{id}}/stats.json
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-campaign-stats
        method: GET
Open in Framework → View in Fleet → marketo-campaign-performance-lookup.yml

Submits a ServiceNow change request for planned IT maintenance, routes it through CAB approval, and notifies affected teams in Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Change Management Request
  description: Submits a ServiceNow change request for planned IT maintenance, routes it through CAB approval, and notifies affected teams in Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - approval
  - it-ops
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change description, affected systems, and maintenance window, create a ServiceNow change request and notify the change advisory board Teams channel. Use when engineering teams plan maintenance affecting production systems.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the change.
      - name: description
        in: body
        type: string
        description: Full change details including rollback plan.
      - 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-chg.create-change-request
        with:
          short_description: '{{short_description}}'
          description: '{{description}}'
          start_date: '{{planned_start}}'
          end_date: '{{planned_end}}'
          type: normal
      - 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}} | Status: awaiting CAB approval'
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams-cab
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-change-management-request.yml

Analyzes customer complaint trends by querying Snowflake for complaint data grouped by product line, category, and time period.

naftiko: '0.5'
info:
  label: Customer Complaint Trend Analysis
  description: Analyzes customer complaint trends by querying Snowflake for complaint data grouped by product line, category, and time period.
  tags:
  - quality
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: complaint-analytics
    port: 8080
    tools:
    - name: analyze-complaint-trends
      description: Given a product line and time period, return complaint counts by category, trending patterns, and comparison to prior period. Use when quality teams need complaint trend visibility.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: Product line name, e.g. 'Diagnostics', 'Nutrition', 'Medical Devices'.
      - name: period
        in: body
        type: string
        description: Analysis period, e.g. 'last_90_days'.
      call: snowflake.execute-query
      with:
        query_name: complaint_trend_analysis
        params: '{{product_line}},{{period}}'
      outputParameters:
      - name: total_complaints
        type: integer
        mapping: $.data[0].total
      - name: top_category
        type: string
        mapping: $.data[0].top_category
      - name: trend_direction
        type: string
        mapping: $.data[0].trend
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → customer-complaint-trend-analysis.yml

Deploys a machine learning model from Databricks to production by registering the model, running validation, deploying the endpoint, and notifying the data science team.

naftiko: '0.5'
info:
  label: Databricks ML Model Deployment Orchestration
  description: Deploys a machine learning model from Databricks to production by registering the model, running validation, deploying the endpoint, and notifying the data science team.
  tags:
  - rd
  - ai
  - databricks
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ml-deployment
    port: 8080
    tools:
    - name: deploy-ml-model
      description: Given a model name and version, register it, run validation tests, deploy to serving endpoint, and notify the team. Use when data science approves a model for production deployment.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: Databricks model name.
      - name: model_version
        in: body
        type: string
        description: Model version number.
      steps:
      - name: register-model
        type: call
        call: databricks.register-model-version
        with:
          name: '{{model_name}}'
          version: '{{model_version}}'
          stage: Production
      - name: create-change-request
        type: call
        call: servicenow.create-change
        with:
          short_description: 'ML model deployment: {{model_name}} v{{model_version}}'
          category: application
          assigned_group: Data_Science
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: data-science
          text: 'Model {{model_name}} v{{model_version}} deployed to production. Change request: {{create-change-request.number}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://abbott.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: models
      path: /mlflow/model-versions/transition-stage
      operations:
      - name: register-model-version
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → databricks-ml-model-deployment-orchestration.yml

Retrieves a regulatory or quality document from Veeva Vault by document number, returning metadata, version, and approval status.

naftiko: '0.5'
info:
  label: Veeva Vault Document Retrieval
  description: Retrieves a regulatory or quality document from Veeva Vault by document number, returning metadata, version, and approval status.
  tags:
  - regulatory
  - quality
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: vault-documents
    port: 8080
    tools:
    - name: get-vault-document
      description: Given a Veeva Vault document number, return the document metadata, current version, lifecycle state, and approval status. Use when teams need to locate regulated documents.
      inputParameters:
      - name: document_number
        in: body
        type: string
        description: Veeva Vault document number.
      call: veeva-vault.get-document
      with:
        doc_number: '{{document_number}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.data.name__v
      - name: version
        type: string
        mapping: $.data.major_version_number__v
      - name: lifecycle_state
        type: string
        mapping: $.data.status__v
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://abbott-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_number}}
      inputParameters:
      - name: doc_number
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-retrieval.yml

When GitHub Advanced Security detects a critical CVE in a product codebase, creates a Jira security ticket, logs a Datadog event, and alerts the cybersecurity team in Teams.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Alert Triage
  description: When GitHub Advanced Security detects a critical CVE in a product codebase, creates a Jira security ticket, logs a Datadog event, and alerts the cybersecurity team in Teams.
  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 cybersecurity Teams channel. Use when GitHub Advanced Security emits a critical alert on a product or clinical system 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: Cybersecurity 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}} | Repo: {{repo}}'
          priority: Highest
      - name: log-dd-event
        type: call
        call: datadog-sec.create-event
        with:
          title: 'Security vulnerability: {{cve_id}} in {{repo}}'
          text: 'Package {{package_name}} | Severity: {{severity}} | Jira: {{create-sec-ticket.key}}'
          alert_type: error
      - name: alert-security-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://abbott.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: datadog-sec
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams-sec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-security-vulnerability-alert-triage.yml

Queries Azure Cost Management for current month spend by resource group, returning cost breakdown and budget utilization.

naftiko: '0.5'
info:
  label: Azure Resource Cost Lookup
  description: Queries Azure Cost Management for current month spend by resource group, returning cost breakdown and budget utilization.
  tags:
  - it
  - cloud
  - microsoft-azure
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost
    port: 8080
    tools:
    - name: get-resource-group-cost
      description: Given an Azure resource group name, return current month spend, budget limit, and utilization percentage. Use when FinOps teams need cost visibility.
      inputParameters:
      - name: resource_group
        in: body
        type: string
        description: Azure resource group name.
      call: azure.get-cost-summary
      with:
        rg_name: '{{resource_group}}'
      outputParameters:
      - name: current_spend
        type: number
        mapping: $.properties.rows[0].cost
      - name: budget_limit
        type: number
        mapping: $.properties.budget_limit
      - name: utilization_percent
        type: number
        mapping: $.properties.utilization
  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/{{rg_name}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: rg_name
        in: path
      operations:
      - name: get-cost-summary
        method: POST
Open in Framework → View in Fleet → azure-resource-cost-lookup.yml

Triggers a refresh of the quality metrics Tableau dashboard and returns the extraction completion status.

naftiko: '0.5'
info:
  label: Tableau Quality Dashboard Refresh
  description: Triggers a refresh of the quality metrics Tableau dashboard and returns the extraction completion status.
  tags:
  - quality
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: quality-analytics
    port: 8080
    tools:
    - name: refresh-quality-dashboard
      description: Given a Tableau workbook name, trigger a data extract refresh and return the job status. Use when quality teams need updated dashboard metrics.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: Tableau workbook name.
      call: tableau.trigger-refresh
      with:
        workbook: '{{workbook_name}}'
      outputParameters:
      - name: job_id
        type: string
        mapping: $.job.id
      - name: status
        type: string
        mapping: $.job.status
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://abbott.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook}}/refresh
      inputParameters:
      - name: workbook
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → tableau-quality-dashboard-refresh.yml

Retrieves Azure Active Directory group membership for a user, returning all group names and their types.

naftiko: '0.5'
info:
  label: Azure AD Group Membership Lookup
  description: Retrieves Azure Active Directory group membership for a user, returning all group names and their types.
  tags:
  - security
  - identity
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: ad-groups
    port: 8080
    tools:
    - name: get-user-groups
      description: Given a user principal name, return all Azure AD group memberships with group names and types. Use when IT security needs to audit user group assignments.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: User principal name (email).
      call: azure-ad.get-member-of
      with:
        upn: '{{user_upn}}'
      outputParameters:
      - name: group_count
        type: integer
        mapping: $.value.length
  consumes:
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.azure_ad_token
    resources:
    - name: users
      path: /users/{{upn}}/memberOf
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-member-of
        method: GET
Open in Framework → View in Fleet → azure-ad-group-membership-lookup.yml

Triggers an Informatica Cloud data integration job and returns the run status and processed record count.

naftiko: '0.5'
info:
  label: Informatica Data Integration Job Trigger
  description: Triggers an Informatica Cloud data integration job and returns the run status and processed record count.
  tags:
  - data
  - integration
  - informatica
capability:
  exposes:
  - type: mcp
    namespace: data-integration
    port: 8080
    tools:
    - name: trigger-integration-job
      description: Given an Informatica task ID, trigger the data integration job and return the run ID and status. Use when data engineering needs to manually trigger ETL jobs.
      inputParameters:
      - name: task_id
        in: body
        type: string
        description: Informatica Cloud task identifier.
      call: informatica.start-job
      with:
        taskId: '{{task_id}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.runId
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://na1.dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: start-job
        method: POST
Open in Framework → View in Fleet → informatica-data-integration-job-trigger.yml

Orchestrates the release pipeline for FreeStyle Libre CGM firmware by running validation tests, creating release notes, updating the artifact repository, and notifying regulatory.

naftiko: '0.5'
info:
  label: Libre CGM Firmware Release Orchestration
  description: Orchestrates the release pipeline for FreeStyle Libre CGM firmware by running validation tests, creating release notes, updating the artifact repository, and notifying regulatory.
  tags:
  - rd
  - devops
  - medical-device
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: firmware-release
    port: 8080
    tools:
    - name: orchestrate-firmware-release
      description: Given a firmware version and release branch, trigger validation, generate release notes, publish artifacts, and notify regulatory. Use when R&D approves a firmware build for release.
      inputParameters:
      - name: firmware_version
        in: body
        type: string
        description: Firmware version string, e.g. 'v3.2.1'.
      - name: release_branch
        in: body
        type: string
        description: Git branch name for the release.
      steps:
      - name: trigger-validation
        type: call
        call: github.create-workflow-dispatch
        with:
          repo: abbott/libre-firmware
          workflow: validation-suite.yml
          ref: '{{release_branch}}'
      - name: create-release-notes
        type: call
        call: github.create-release
        with:
          repo: abbott/libre-firmware
          tag: '{{firmware_version}}'
          name: FreeStyle Libre Firmware {{firmware_version}}
      - name: create-regulatory-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Regulatory review: Libre firmware {{firmware_version}}'
          category: regulatory_review
          assigned_group: Regulatory_Affairs
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: libre-engineering
          text: 'Firmware {{firmware_version}} release initiated. Validation running. Regulatory task: {{create-regulatory-task.number}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-dispatch
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: create-workflow-dispatch
        method: POST
    - name: releases
      path: /repos/{{repo}}/releases
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: create-release
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → libre-cgm-firmware-release-orchestration.yml

Retrieves an employee's benefits enrollment status from Workday, returning current plan selections, coverage levels, and enrollment deadlines.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Status
  description: Retrieves an employee's benefits enrollment status from Workday, returning current plan selections, coverage levels, and enrollment deadlines.
  tags:
  - hr
  - benefits
  - workday
capability:
  exposes:
  - type: mcp
    namespace: benefits-enrollment
    port: 8080
    tools:
    - name: get-benefits-status
      description: Given a Workday worker ID, return the employee's current benefits elections, coverage levels, and open enrollment deadline. Use when HR or employees need benefits information.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      call: workday.get-benefits
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: medical_plan
        type: string
        mapping: $.data.medical_plan
      - name: dental_plan
        type: string
        mapping: $.data.dental_plan
      - name: enrollment_deadline
        type: string
        mapping: $.data.enrollment_deadline
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: benefits
      path: /workers/{{worker_id}}/benefits
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-benefits
        method: GET
Open in Framework → View in Fleet → workday-benefits-enrollment-status.yml

Retrieves the current status, priority, and assignment details for a ServiceNow incident by ticket number.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Lookup
  description: Retrieves the current status, priority, and assignment details for a ServiceNow incident by ticket number.
  tags:
  - it
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-incidents
    port: 8080
    tools:
    - name: get-incident-status
      description: Given a ServiceNow incident number, return the current state, priority, assigned group, and short description. Use when IT support needs to check ticket status.
      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: state
        type: string
        mapping: $.result.state
      - name: priority
        type: string
        mapping: $.result.priority
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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={{number}}
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status-lookup.yml

Manages equipment calibration by checking due dates in SAP, scheduling the calibration, assigning technicians, and updating the calibration certificate in the QMS.

naftiko: '0.5'
info:
  label: Equipment Calibration Orchestration
  description: Manages equipment calibration by checking due dates in SAP, scheduling the calibration, assigning technicians, and updating the calibration certificate in the QMS.
  tags:
  - quality
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: calibration-mgmt
    port: 8080
    tools:
    - name: schedule-calibration
      description: Given an equipment ID, check calibration due date, schedule the calibration, assign a technician, and update the QMS. Use when quality assurance manages calibration schedules.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: SAP equipment identifier.
      steps:
      - name: check-due-date
        type: call
        call: sap-erp.get-calibration-status
        with:
          equipment: '{{equipment_id}}'
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          short_description: 'Calibration: Equipment {{equipment_id}}'
          category: calibration
          assigned_group: Metrology_Lab
          due_date: '{{check-due-date.next_cal_date}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-calibration
          text: 'Calibration scheduled for equipment {{equipment_id}}. Due: {{check-due-date.next_cal_date}}. Work order: {{create-work-order.number}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/PM_EQUIPMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment('{{equipment}}')/calibration
      inputParameters:
      - name: equipment
        in: path
      operations:
      - name: get-calibration-status
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → equipment-calibration-orchestration.yml

Retrieves a Salesforce account record by account ID, returning account name, industry, annual revenue, and owner details.

naftiko: '0.5'
info:
  label: Salesforce Account Lookup
  description: Retrieves a Salesforce account record by account ID, returning account name, industry, annual revenue, and owner details.
  tags:
  - sales
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm-accounts
    port: 8080
    tools:
    - name: get-account
      description: Given a Salesforce account ID, return the account name, industry, annual revenue, and account owner. Use when sales teams need quick account details.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      call: salesforce.get-account
      with:
        id: '{{account_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: industry
        type: string
        mapping: $.Industry
      - name: annual_revenue
        type: number
        mapping: $.AnnualRevenue
      - name: owner
        type: string
        mapping: $.Owner.Name
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbott.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-account-lookup.yml

Scans SAP Ariba for supplier contracts expiring within 90 days, creates Jira procurement tasks, and emails contract owners via Microsoft 365.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Expiry Alerts
  description: Scans SAP Ariba for supplier contracts expiring within 90 days, creates Jira procurement tasks, and emails contract owners via Microsoft 365.
  tags:
  - procurement
  - contract-management
  - sap-ariba
  - jira
  - finance
capability:
  exposes:
  - type: mcp
    namespace: contract-renewal
    port: 8080
    tools:
    - name: alert-expiring-contracts
      description: Given a look-ahead window, fetch expiring contracts from SAP Ariba, create a Jira renewal task for each contract, and email the contract owner. Use monthly to proactively manage supplier contract renewals.
      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 renewal tasks.
      steps:
      - name: get-expiring
        type: call
        call: ariba-renewal.get-expiring-contracts
        with:
          days_ahead: '{{days_ahead}}'
      - name: create-jira-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-renewal
    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://abbott.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-expiry-alerts.yml

Checks GMP training compliance for a department by querying Workday Learning, returning completion rates and overdue assignments.

naftiko: '0.5'
info:
  label: GMP Training Compliance Check
  description: Checks GMP training compliance for a department by querying Workday Learning, returning completion rates and overdue assignments.
  tags:
  - quality
  - compliance
  - workday
capability:
  exposes:
  - type: mcp
    namespace: training-compliance
    port: 8080
    tools:
    - name: check-gmp-compliance
      description: Given a department code, return the GMP training completion rate, number of overdue assignments, and list of non-compliant employees. Use when quality assurance needs training compliance visibility.
      inputParameters:
      - name: department_code
        in: body
        type: string
        description: Workday department code.
      call: workday.get-training-compliance
      with:
        department: '{{department_code}}'
        training_type: gmp
      outputParameters:
      - name: completion_rate
        type: number
        mapping: $.data.completion_rate
      - name: overdue_count
        type: integer
        mapping: $.data.overdue_count
      - name: total_employees
        type: integer
        mapping: $.data.total_employees
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /training/compliance?department={{department}}&type={{training_type}}
      inputParameters:
      - name: department
        in: query
      - name: training_type
        in: query
      operations:
      - name: get-training-compliance
        method: GET
Open in Framework → View in Fleet → gmp-training-compliance-check.yml

Activates a clinical trial site by verifying IRB approval, provisioning site access, creating monitoring visits, and notifying the clinical operations team.

naftiko: '0.5'
info:
  label: Clinical Site Activation Orchestration
  description: Activates a clinical trial site by verifying IRB approval, provisioning site access, creating monitoring visits, and notifying the clinical operations team.
  tags:
  - clinical
  - rd
  - oracle
  - servicenow
  - okta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: site-activation
    port: 8080
    tools:
    - name: activate-clinical-site
      description: Given a study ID and site ID, verify IRB approval, provision site access, schedule monitoring, and notify the team. Use when clinical operations is ready to activate a new trial site.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: site_id
        in: body
        type: string
        description: Clinical site identifier.
      steps:
      - name: verify-irb
        type: call
        call: oracle-clinical.get-irb-status
        with:
          study_id: '{{study_id}}'
          site_id: '{{site_id}}'
      - name: provision-access
        type: call
        call: okta.assign-group
        with:
          group_name: study-{{study_id}}-site-{{site_id}}
          site_id: '{{site_id}}'
      - name: schedule-monitoring
        type: call
        call: oracle-clinical.create-visit
        with:
          study_id: '{{study_id}}'
          site_id: '{{site_id}}'
          visit_type: site_initiation
      - name: notify-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-ops
          text: 'Site {{site_id}} activated for study {{study_id}}. IRB status: {{verify-irb.status}}. Initiation visit scheduled: {{schedule-monitoring.visit_date}}'
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://abbott-ctms.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_ctms_token
    resources:
    - name: irb
      path: /studies/{{study_id}}/sites/{{site_id}}/irb
      inputParameters:
      - name: study_id
        in: path
      - name: site_id
        in: path
      operations:
      - name: get-irb-status
        method: GET
    - name: visits
      path: /studies/{{study_id}}/sites/{{site_id}}/visits
      inputParameters:
      - name: study_id
        in: path
      - name: site_id
        in: path
      operations:
      - name: create-visit
        method: POST
  - type: http
    namespace: okta
    baseUri: https://abbott.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: groups
      path: /groups
      operations:
      - name: assign-group
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-site-activation-orchestration.yml

Retrieves an Okta user profile by email, returning account status, last login, MFA enrollment, and assigned applications.

naftiko: '0.5'
info:
  label: Okta User Status Check
  description: Retrieves an Okta user profile by email, returning account status, last login, MFA enrollment, and assigned applications.
  tags:
  - security
  - identity
  - okta
capability:
  exposes:
  - type: mcp
    namespace: identity-management
    port: 8080
    tools:
    - name: get-user-status
      description: Given an employee email address, return the Okta account status, last login timestamp, and MFA enrollment state. Use when IT security needs to verify user access status.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Employee email address.
      call: okta.get-user
      with:
        login: '{{email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: last_login
        type: string
        mapping: $.lastLogin
      - name: mfa_enrolled
        type: boolean
        mapping: $.mfa_enrolled
  consumes:
  - type: http
    namespace: okta
    baseUri: https://abbott.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users/{{login}}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-status-check.yml

When a supply chain disruption is detected, identifies impacted purchase orders, notifies procurement, creates alternative sourcing tasks, and updates production schedules.

naftiko: '0.5'
info:
  label: Supply Chain Disruption Response Orchestration
  description: When a supply chain disruption is detected, identifies impacted purchase orders, notifies procurement, creates alternative sourcing tasks, and updates production schedules.
  tags:
  - supply-chain
  - procurement
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-disruption
    port: 8080
    tools:
    - name: respond-to-disruption
      description: Given a supplier ID and disruption type, identify impacted POs, alert procurement, create sourcing tasks, and adjust production. Use when supply chain detects a material disruption.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: SAP supplier/vendor number.
      - name: disruption_type
        in: body
        type: string
        description: 'Type of disruption: delay, quality_issue, force_majeure.'
      steps:
      - name: get-impacted-pos
        type: call
        call: sap-erp.query-open-pos
        with:
          vendor_id: '{{supplier_id}}'
          status: open
      - name: create-sourcing-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Alternative sourcing needed: {{disruption_type}} from vendor {{supplier_id}}'
          category: procurement
          priority: '1'
          assigned_group: Strategic_Sourcing
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-ops
          text: 'SUPPLY DISRUPTION: Vendor {{supplier_id}} - {{disruption_type}}. Impacted POs: {{get-impacted-pos.count}}. Sourcing task: {{create-sourcing-task.number}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder
      operations:
      - name: query-open-pos
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-disruption-response-orchestration.yml

When a customer reports a diagnostic instrument issue, creates a service case, identifies the nearest field engineer, dispatches them, and updates the customer.

naftiko: '0.5'
info:
  label: Field Service Dispatch Orchestration
  description: When a customer reports a diagnostic instrument issue, creates a service case, identifies the nearest field engineer, dispatches them, and updates the customer.
  tags:
  - service
  - diagnostics
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: field-service
    port: 8080
    tools:
    - name: dispatch-field-engineer
      description: Given a customer account ID and issue description, create a service case, find the nearest engineer, dispatch them, and notify the customer. Use when customer support escalates a field service need.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce customer account ID.
      - name: issue_description
        in: body
        type: string
        description: Description of the instrument issue.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          account_id: '{{account_id}}'
          subject: 'Field service: {{issue_description}}'
          type: field_service
      - name: find-engineer
        type: call
        call: servicenow.find-available-resource
        with:
          skill: diagnostics_instruments
          location: '{{account_id}}'
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          case_ref: '{{create-case.case_number}}'
          assigned_to: '{{find-engineer.engineer_id}}'
          description: '{{issue_description}}'
      - name: notify-customer
        type: call
        call: msteams.send-message
        with:
          channel_id: customer-service
          text: 'Field engineer {{find-engineer.engineer_name}} dispatched for case {{create-case.case_number}}. ETA: {{find-engineer.estimated_arrival}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbott.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /table/cmn_schedule_span
      operations:
      - name: find-available-resource
        method: GET
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → field-service-dispatch-orchestration.yml

Searches Abbott SharePoint document libraries by keyword, returning matching document titles, authors, and URLs.

naftiko: '0.5'
info:
  label: SharePoint Document Library Search
  description: Searches Abbott SharePoint document libraries by keyword, returning matching document titles, authors, and URLs.
  tags:
  - documentation
  - collaboration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: doc-search
    port: 8080
    tools:
    - name: search-sharepoint-docs
      description: Given a search query and optional site name, return matching documents with titles, authors, and links. Use when employees need to find documents across SharePoint.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keywords.
      - name: site_name
        in: body
        type: string
        description: Optional SharePoint site name to scope the search.
      call: sharepoint.search
      with:
        querytext: '{{query}}'
        site: '{{site_name}}'
      outputParameters:
      - name: result_count
        type: integer
        mapping: $.PrimaryQueryResult.RelevantResults.TotalRows
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://abbott.sharepoint.com/_api
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: search
      path: /search/query?querytext='{{querytext}}'
      inputParameters:
      - name: querytext
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → sharepoint-document-library-search.yml

Retrieves Okta group membership for privileged groups, generates an access certification report in Power BI, and emails it to the security team for review.

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

When an employee transfers between divisions, updates Workday, re-provisions Okta group memberships, transfers ServiceNow assets, and notifies both managers.

naftiko: '0.5'
info:
  label: Employee Transfer Orchestration
  description: When an employee transfers between divisions, updates Workday, re-provisions Okta group memberships, transfers ServiceNow assets, and notifies both managers.
  tags:
  - hr
  - identity
  - workday
  - okta
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: employee-transfer
    port: 8080
    tools:
    - name: process-employee-transfer
      description: Given a worker ID, source department, and target department, update HR records, re-provision access, transfer assets, and notify stakeholders. Use when HR processes an inter-division transfer.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      - name: target_department
        in: body
        type: string
        description: Target department code.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: update-okta-groups
        type: call
        call: okta.update-user-groups
        with:
          user_email: '{{get-employee.work_email}}'
          new_department: '{{target_department}}'
      - name: transfer-assets
        type: call
        call: servicenow.transfer-assets
        with:
          user_id: '{{worker_id}}'
          new_department: '{{target_department}}'
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: hr-operations
          text: 'Transfer processed: {{get-employee.first_name}} {{get-employee.last_name}} to {{target_department}}. Access updated. Assets transferred.'
  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: okta
    baseUri: https://abbott.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_email}}/groups
      inputParameters:
      - name: user_email
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: assets
      path: /table/alm_asset
      operations:
      - name: transfer-assets
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-transfer-orchestration.yml

Retrieves a summary of open job requisitions from Workday by department, returning requisition count, average days open, and hiring manager details.

naftiko: '0.5'
info:
  label: Workday Open Requisition Report
  description: Retrieves a summary of open job requisitions from Workday by department, returning requisition count, average days open, and hiring manager details.
  tags:
  - hr
  - recruiting
  - workday
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: get-open-requisitions
      description: Given a department code, return the count of open requisitions, average days open, and breakdown by hiring manager. Use when HR or leadership needs recruiting pipeline visibility.
      inputParameters:
      - name: department_code
        in: body
        type: string
        description: Workday department code.
      call: workday.get-requisitions
      with:
        department: '{{department_code}}'
        status: open
      outputParameters:
      - name: open_count
        type: integer
        mapping: $.data.total
      - name: avg_days_open
        type: number
        mapping: $.data.avg_days_open
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /recruiting/requisitions
      operations:
      - name: get-requisitions
        method: GET
Open in Framework → View in Fleet → workday-open-requisition-report.yml

Uses OpenAI to classify a regulatory document by type, region, and product category, returning structured metadata for filing.

naftiko: '0.5'
info:
  label: OpenAI Regulatory Document Classification
  description: Uses OpenAI to classify a regulatory document by type, region, and product category, returning structured metadata for filing.
  tags:
  - regulatory
  - ai
  - openai
capability:
  exposes:
  - type: mcp
    namespace: doc-classification
    port: 8080
    tools:
    - name: classify-regulatory-document
      description: Given document text, classify the document type, applicable region, and product category using AI. Use when regulatory teams need to categorize incoming documents.
      inputParameters:
      - name: document_text
        in: body
        type: string
        description: Text content of the regulatory document.
      call: openai.create-completion
      with:
        model: gpt-4
        prompt: 'Classify this regulatory document: {{document_text}}'
      outputParameters:
      - name: document_type
        type: string
        mapping: $.choices[0].message.content
  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: create-completion
        method: POST
Open in Framework → View in Fleet → openai-regulatory-document-classification.yml

When a quality deviation is created, assigns an investigator, gathers batch data from SAP, creates investigation tasks, and sets review deadlines.

naftiko: '0.5'
info:
  label: Quality Deviation Investigation Orchestration
  description: When a quality deviation is created, assigns an investigator, gathers batch data from SAP, creates investigation tasks, and sets review deadlines.
  tags:
  - quality
  - manufacturing
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: deviation-investigation
    port: 8080
    tools:
    - name: initiate-deviation-investigation
      description: Given a deviation number, assign an investigator, pull related batch data, create investigation tasks, and notify stakeholders. Use when quality assurance escalates a deviation for investigation.
      inputParameters:
      - name: deviation_number
        in: body
        type: string
        description: ServiceNow deviation record number.
      steps:
      - name: get-deviation
        type: call
        call: servicenow.get-deviation
        with:
          number: '{{deviation_number}}'
      - name: get-batch-data
        type: call
        call: sap-erp.get-batch-record
        with:
          batch_id: '{{get-deviation.batch_number}}'
      - name: create-investigation-task
        type: call
        call: servicenow.create-task
        with:
          short_description: Investigate deviation {{deviation_number}} - Batch {{get-deviation.batch_number}}
          category: quality_investigation
          assigned_group: Quality_Investigation
          priority: '2'
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-investigations
          text: 'Investigation initiated for deviation {{deviation_number}}. Batch: {{get-deviation.batch_number}}. Yield: {{get-batch-data.yield_percentage}}%. Task: {{create-investigation-task.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: deviations
      path: /table/u_deviation
      operations:
      - name: get-deviation
        method: GET
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batch-records
      path: /A_BatchRecord('{{batch_id}}')
      inputParameters:
      - name: batch_id
        in: path
      operations:
      - name: get-batch-record
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-deviation-investigation-orchestration.yml

Retrieves current headcount and payroll cost totals from Workday by business unit and cost center for finance reporting.

naftiko: '0.5'
info:
  label: Workday Headcount and Payroll Snapshot
  description: Retrieves current headcount and payroll cost totals from Workday by business unit and cost center for finance reporting.
  tags:
  - hr
  - finance
  - payroll
  - workday
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-finance
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns headcount and payroll cost data grouped by business unit and cost center from Workday. 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-report
      with:
        effective_date: '{{as_of_date}}'
      outputParameters:
      - name: total_headcount
        type: string
        mapping: $.Report_Entry[0].Total_Headcount
      - name: total_payroll_cost
        type: string
        mapping: $.Report_Entry[0].Total_Payroll_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-report
      path: /reports/headcount_by_cost_center
      inputParameters:
      - name: effective_date
        in: query
      operations:
      - name: get-headcount-report
        method: GET
Open in Framework → View in Fleet → workday-headcount-and-payroll-snapshot.yml

When Datadog fires a critical alert on a clinical system, 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 and Escalation
  description: When Datadog fires a critical alert on a clinical system, 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: p1-triage
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog critical alert for a clinical or corporate system, create a P1 ServiceNow incident, trigger a PagerDuty page to the on-call engineer, and post an alert to the IT war-room Teams channel. Use when monitoring detects a critical system failure.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Datadog monitor alert ID.
      - name: system_name
        in: body
        type: string
        description: Name of the affected system.
      - 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-p1-incident
        type: call
        call: servicenow-p1.create-incident
        with:
          short_description: P1 Alert — {{system_name}}
          description: 'Datadog alert {{alert_id}}: {{alert_message}}'
          priority: '1'
          category: Critical_System
      - name: page-oncall
        type: call
        call: pagerduty.trigger-incident
        with:
          title: P1 Critical Alert — {{system_name}}
          severity: critical
          details: 'ServiceNow INC: {{create-p1-incident.number}} | Alert: {{alert_id}}'
      - name: post-warroom
        type: call
        call: msteams-p1.post-channel-message
        with:
          channel_id: '{{warroom_channel_id}}'
          text: 'P1 INCIDENT: {{system_name}} | INC: {{create-p1-incident.number}} | PagerDuty: {{page-oncall.incident_key}} | Alert: {{alert_message}}'
  consumes:
  - type: http
    namespace: servicenow-p1
    baseUri: https://abbott.service-now.com/api/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-p1
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-p1-incident-triage-and-escalation.yml

When an employee termination is processed in Workday, deactivates their Okta account, closes open ServiceNow access requests, and removes 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 removes 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 and Okta user ID, deactivate their Okta account, close open ServiceNow access requests, and deactivate their Salesforce user 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-access-requests
        type: call
        call: servicenow-offboard.patch-requests
        with:
          employee_id: '{{workday_employee_id}}'
          state: closed_complete
      - 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://abbott.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://abbott.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: patch-requests
        method: PATCH
  - type: http
    namespace: salesforce-offboard
    baseUri: https://abbott.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: users
      path: /sobjects/User/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user
        method: PATCH
Open in Framework → View in Fleet → employee-offboarding-deprovisioning.yml

Retrieves a production order from SAP by order number, returning status, planned quantity, actual output, and scheduled completion date.

naftiko: '0.5'
info:
  label: SAP Production Order Status Lookup
  description: Retrieves a production order from SAP by order number, returning status, planned quantity, actual output, and scheduled completion date.
  tags:
  - manufacturing
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: production-orders
    port: 8080
    tools:
    - name: get-production-order
      description: Given a SAP production order number, return the order status, planned vs actual quantity, and scheduled dates. Use when manufacturing planners need production order visibility.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: SAP production order number.
      call: sap-erp.get-prod-order
      with:
        order: '{{order_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OrderStatus
      - name: planned_quantity
        type: number
        mapping: $.d.PlannedQuantity
      - name: actual_output
        type: number
        mapping: $.d.ActualQuantity
      - name: scheduled_end
        type: string
        mapping: $.d.ScheduledEndDate
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/PP_PROD_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder('{{order}}')
      inputParameters:
      - name: order
        in: path
      operations:
      - name: get-prod-order
        method: GET
Open in Framework → View in Fleet → sap-production-order-status-lookup.yml

Orchestrates a medical device product registration by assembling documents from Veeva Vault, creating the submission package, filing in the regulatory system, and notifying stakeholders.

naftiko: '0.5'
info:
  label: Product Registration Submission Orchestration
  description: Orchestrates a medical device product registration by assembling documents from Veeva Vault, creating the submission package, filing in the regulatory system, and notifying stakeholders.
  tags:
  - regulatory
  - quality
  - veeva-vault
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-registration
    port: 8080
    tools:
    - name: submit-product-registration
      description: Given a product code and target market, assemble regulatory documents, create the submission, file it, and notify the team. Use when regulatory affairs initiates a new market registration.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Abbott product code.
      - name: target_market
        in: body
        type: string
        description: Target market country code, e.g. 'EU', 'JP', 'BR'.
      steps:
      - name: gather-documents
        type: call
        call: veeva-vault.query-documents
        with:
          product_code: '{{product_code}}'
          doc_type: registration
      - name: create-submission
        type: call
        call: veeva-vault.create-submission
        with:
          product_code: '{{product_code}}'
          market: '{{target_market}}'
          document_ids: '{{gather-documents.document_ids}}'
      - name: create-tracking-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Product registration: {{product_code}} for {{target_market}}'
          category: regulatory_submission
          assigned_group: Regulatory_Affairs
          reference: '{{create-submission.submission_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-submissions
          text: 'Product registration submitted for {{product_code}} in {{target_market}}. Submission: {{create-submission.submission_id}}. Task: {{create-tracking-task.number}}'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://abbott-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /query
      operations:
      - name: query-documents
        method: POST
    - name: submissions
      path: /objects/submission__c
      operations:
      - name: create-submission
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-registration-submission-orchestration.yml

Retrieves corrective and preventive action record details from the quality management system by CAPA number.

naftiko: '0.5'
info:
  label: Quality CAPA Status Lookup
  description: Retrieves corrective and preventive action record details from the quality management system by CAPA number.
  tags:
  - quality
  - compliance
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: quality-capa
    port: 8080
    tools:
    - name: get-capa-status
      description: Given a CAPA number, return the current phase, root cause category, due date, and responsible owner. Use when quality teams need to track CAPA progress.
      inputParameters:
      - name: capa_number
        in: body
        type: string
        description: CAPA record number.
      call: servicenow.get-capa
      with:
        number: '{{capa_number}}'
      outputParameters:
      - name: phase
        type: string
        mapping: $.result.phase
      - name: root_cause
        type: string
        mapping: $.result.root_cause_category
      - name: due_date
        type: string
        mapping: $.result.due_date
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: capa-records
      path: /table/u_capa?sysparm_query=number={{number}}
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-capa
        method: GET
Open in Framework → View in Fleet → quality-capa-status-lookup.yml

Creates a new sourcing event in SAP Ariba for competitive bidding, returning the event ID and supplier invitation status.

naftiko: '0.5'
info:
  label: SAP Ariba Sourcing Event Creation
  description: Creates a new sourcing event in SAP Ariba for competitive bidding, returning the event ID and supplier invitation status.
  tags:
  - procurement
  - sap-ariba
capability:
  exposes:
  - type: mcp
    namespace: strategic-sourcing
    port: 8080
    tools:
    - name: create-sourcing-event
      description: Given a sourcing category and description, create an SAP Ariba sourcing event and return the event ID. Use when procurement initiates a competitive bidding process.
      inputParameters:
      - name: category
        in: body
        type: string
        description: Sourcing category.
      - name: description
        in: body
        type: string
        description: Sourcing event description.
      - name: budget_amount
        in: body
        type: number
        description: Budget amount for the sourcing event.
      call: ariba.create-event
      with:
        category: '{{category}}'
        description: '{{description}}'
        budget: '{{budget_amount}}'
      outputParameters:
      - name: event_id
        type: string
        mapping: $.data.eventId
      - name: status
        type: string
        mapping: $.data.status
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/sourcing-projects/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → sap-ariba-sourcing-event-creation.yml

Monitors Snowflake data pipeline task failures for the clinical and commercial data warehouse, logs anomalies to Datadog, and creates Jira tickets for the data engineering team.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Monitoring
  description: Monitors Snowflake data pipeline task failures for the clinical and commercial data warehouse, logs anomalies to Datadog, and creates Jira tickets for the data engineering team.
  tags:
  - data
  - snowflake
  - datadog
  - analytics
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: check-data-pipeline-health
      description: Query Snowflake task execution history for failures, log each failure as a Datadog error event, and open a Jira data engineering ticket for any pipeline that has failed consecutively. Use daily to verify Abbott's clinical and commercial data pipelines are healthy.
      inputParameters:
      - name: lookback_hours
        in: body
        type: integer
        description: Hours of pipeline history to scan for failures.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for data engineering tickets.
      steps:
      - name: get-failed-tasks
        type: call
        call: snowflake.get-task-history
        with:
          lookback_hours: '{{lookback_hours}}'
          state: FAILED
      - name: log-to-datadog
        type: call
        call: datadog-dq.create-event
        with:
          title: Snowflake pipeline failures
          text: 'Failed tasks: {{get-failed-tasks.task_names}}'
          alert_type: error
      - name: create-jira-ticket
        type: call
        call: jira-data.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: Pipeline failures — {{get-failed-tasks.task_count}} Snowflake tasks
          description: 'Tasks: {{get-failed-tasks.task_names}} | Datadog: {{log-to-datadog.url}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/CLINICAL_DW/schemas/PUBLIC/tasks/history
      inputParameters:
      - name: lookback_hours
        in: query
      - name: state
        in: query
      operations:
      - name: get-task-history
        method: GET
  - type: http
    namespace: datadog-dq
    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://abbott.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-monitoring.yml

Orchestrates clinical database lock by running final data quality checks, generating discrepancy reports, locking the database, and notifying biostatistics.

naftiko: '0.5'
info:
  label: Clinical Data Lock Orchestration
  description: Orchestrates clinical database lock by running final data quality checks, generating discrepancy reports, locking the database, and notifying biostatistics.
  tags:
  - clinical
  - rd
  - quality
  - snowflake
  - oracle
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-lock
    port: 8080
    tools:
    - name: execute-database-lock
      description: Given a study ID and lock date, run data quality checks, generate discrepancy report, lock the database, and notify biostatistics. Use when clinical data management is ready to lock a study database.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: lock_date
        in: body
        type: string
        description: Target database lock date in YYYY-MM-DD format.
      steps:
      - name: run-quality-checks
        type: call
        call: snowflake.execute-query
        with:
          query_name: clinical_data_quality_check
          params: '{{study_id}}'
      - name: generate-discrepancy-report
        type: call
        call: snowflake.execute-query
        with:
          query_name: discrepancy_report
          params: '{{study_id}}'
      - name: lock-database
        type: call
        call: oracle-clinical.lock-study
        with:
          study_id: '{{study_id}}'
          lock_date: '{{lock_date}}'
      - name: notify-biostat
        type: call
        call: msteams.send-message
        with:
          channel_id: biostatistics
          text: 'Study {{study_id}} database locked as of {{lock_date}}. Open queries: {{run-quality-checks.open_query_count}}. Discrepancies: {{generate-discrepancy-report.discrepancy_count}}. Lock status: {{lock-database.status}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbott.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: oracle-clinical
    baseUri: https://abbott-ctms.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_ctms_token
    resources:
    - name: studies
      path: /studies/{{study_id}}/lock
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: lock-study
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-data-lock-orchestration.yml

Queries CrowdStrike Falcon for threat detections on a specific endpoint, returning detection details, severity, and recommended actions.

naftiko: '0.5'
info:
  label: CrowdStrike Endpoint Threat Lookup
  description: Queries CrowdStrike Falcon for threat detections on a specific endpoint, returning detection details, severity, and recommended actions.
  tags:
  - security
  - endpoint
  - crowdstrike
capability:
  exposes:
  - type: mcp
    namespace: endpoint-security
    port: 8080
    tools:
    - name: get-endpoint-threats
      description: Given a hostname, return active threat detections, severity levels, and recommended remediation actions. Use when security operations investigates endpoint alerts.
      inputParameters:
      - name: hostname
        in: body
        type: string
        description: Endpoint hostname.
      call: crowdstrike.get-detections
      with:
        filter: device.hostname:'{{hostname}}'
      outputParameters:
      - name: detection_count
        type: integer
        mapping: $.meta.pagination.total
      - name: max_severity
        type: string
        mapping: $.resources[0].max_severity_displayname
  consumes:
  - type: http
    namespace: crowdstrike
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_token
    resources:
    - name: detections
      path: /detects/queries/detects/v1
      operations:
      - name: get-detections
        method: GET
Open in Framework → View in Fleet → crowdstrike-endpoint-threat-lookup.yml

Performs a vendor risk assessment by querying SAP for financial data, checking compliance records in ServiceNow, scoring the vendor, and creating an assessment report.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Orchestration
  description: Performs a vendor risk assessment by querying SAP for financial data, checking compliance records in ServiceNow, scoring the vendor, and creating an assessment report.
  tags:
  - procurement
  - compliance
  - sap
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: Given a vendor ID, collect financial data, compliance records, and calculate a risk score. Use when procurement needs to evaluate vendor risk before contract renewal.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: SAP vendor number.
      steps:
      - name: get-vendor-financials
        type: call
        call: sap-erp.get-vendor-master
        with:
          vendor_id: '{{vendor_id}}'
      - name: get-compliance-records
        type: call
        call: servicenow.query-vendor-compliance
        with:
          vendor_id: '{{vendor_id}}'
      - name: calculate-risk-score
        type: call
        call: snowflake.execute-query
        with:
          query_name: vendor_risk_score
          params: '{{vendor_id}},{{get-vendor-financials.payment_terms}},{{get-compliance-records.open_findings}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_VENDOR_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_Vendor('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor-master
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance
      path: /table/u_vendor_compliance
      operations:
      - name: query-vendor-compliance
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-orchestration.yml

When a manufacturing quality deviation is detected, creates a ServiceNow quality incident, opens a Jira corrective action task, and notifies the quality assurance team in Teams.

naftiko: '0.5'
info:
  label: Product Quality Deviation Incident
  description: When a manufacturing quality deviation is detected, creates a ServiceNow quality incident, opens a Jira corrective action task, and notifies the quality assurance team in Teams.
  tags:
  - quality
  - manufacturing
  - servicenow
  - jira
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: handle-quality-deviation
      description: Given a product lot number, deviation type, and site ID, create a ServiceNow quality incident record, open a Jira CAPA task for the quality engineering team, and alert the QA Teams channel. Use when a manufacturing deviation is identified during production or QC review.
      inputParameters:
      - name: lot_number
        in: body
        type: string
        description: Product lot number where the deviation was detected.
      - name: deviation_type
        in: body
        type: string
        description: Type of deviation, e.g. 'out-of-specification', 'process-deviation'.
      - name: site_id
        in: body
        type: string
        description: Manufacturing site identifier.
      - name: qa_channel_id
        in: body
        type: string
        description: Quality assurance Teams channel ID.
      steps:
      - name: create-quality-incident
        type: call
        call: servicenow-quality.create-incident
        with:
          short_description: Quality deviation — Lot {{lot_number}} — {{deviation_type}}
          category: quality_deviation
          site_id: '{{site_id}}'
      - name: create-capa
        type: call
        call: jira-quality.create-issue
        with:
          project_key: CAPA
          issuetype: Task
          summary: CAPA for deviation — Lot {{lot_number}} at {{site_id}}
          description: 'Deviation type: {{deviation_type}} | ServiceNow INC: {{create-quality-incident.number}}'
      - name: alert-qa-team
        type: call
        call: msteams-quality.post-channel-message
        with:
          channel_id: '{{qa_channel_id}}'
          text: 'Quality Deviation: Lot {{lot_number}} at {{site_id}} — {{deviation_type}} | INC: {{create-quality-incident.number}} | CAPA Jira: {{create-capa.key}}'
  consumes:
  - type: http
    namespace: servicenow-quality
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira-quality
    baseUri: https://abbott.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-quality
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → product-quality-deviation-incident.yml

Retrieves a regulatory submission document from Veeva Vault, sends it to the Anthropic Claude API for intelligent summarization, and posts the summary to the regulatory affairs Teams channel.

naftiko: '0.5'
info:
  label: AI-Assisted Regulatory Document Summarization
  description: Retrieves a regulatory submission document from Veeva Vault, sends it to the Anthropic Claude API for intelligent summarization, and posts the summary to the regulatory affairs Teams channel.
  tags:
  - ai
  - regulatory
  - veeva
  - anthropic
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: ai-regulatory
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a Veeva Vault document ID, retrieve the document content and send it to Anthropic Claude for summarization with regulatory focus. Post the AI summary to the regulatory Teams channel. Use when regulatory teams need quick comprehension of lengthy submission documents.
      inputParameters:
      - name: vault_document_id
        in: body
        type: string
        description: Veeva Vault document ID to summarize.
      - name: reg_channel_id
        in: body
        type: string
        description: Regulatory affairs Teams channel ID.
      steps:
      - name: get-document
        type: call
        call: veeva-ai.get-document
        with:
          document_id: '{{vault_document_id}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          prompt: 'Summarize this regulatory submission document for a pharmaceutical regulatory affairs team. Identify key claims, study results, and action items: {{get-document.content}}'
      - name: post-summary
        type: call
        call: msteams-ai-reg.post-channel-message
        with:
          channel_id: '{{reg_channel_id}}'
          text: 'Regulatory Summary for document {{vault_document_id}}: {{generate-summary.content[0].text}}'
  consumes:
  - type: http
    namespace: veeva-ai
    baseUri: https://abbott.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
  - 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-ai-reg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-regulatory-document-summarization.yml

When a medical device complaint is logged in Salesforce Service Cloud, creates a ServiceNow regulatory case, assigns a quality engineer, and sends a Teams notification to the vigilance team.

naftiko: '0.5'
info:
  label: Medical Device Complaint Case Routing
  description: When a medical device complaint is logged in Salesforce Service Cloud, creates a ServiceNow regulatory case, assigns a quality engineer, and sends a Teams notification to the vigilance team.
  tags:
  - customer-service
  - regulatory
  - salesforce
  - servicenow
  - medical-devices
capability:
  exposes:
  - type: mcp
    namespace: complaint-ops
    port: 8080
    tools:
    - name: route-device-complaint
      description: Given a Salesforce case ID for a medical device complaint, create a linked ServiceNow regulatory investigation record, assign it to the quality engineering group, and alert the vigilance Teams channel. Use when a device complaint requiring regulatory review is received.
      inputParameters:
      - name: salesforce_case_id
        in: body
        type: string
        description: Salesforce case ID for the device complaint.
      - name: device_model
        in: body
        type: string
        description: Medical device model or product number.
      - name: complaint_type
        in: body
        type: string
        description: Type of complaint, e.g. 'malfunction', 'injury', 'death'.
      - name: vigilance_channel_id
        in: body
        type: string
        description: Teams channel ID for the vigilance team.
      steps:
      - name: get-case
        type: call
        call: salesforce-cases.get-case
        with:
          case_id: '{{salesforce_case_id}}'
      - name: create-reg-investigation
        type: call
        call: servicenow-vigilance.create-incident
        with:
          short_description: Device complaint — {{device_model}} — {{complaint_type}}
          description: 'Salesforce case: {{salesforce_case_id}} | Reporter: {{get-case.ContactName}} | Description: {{get-case.Description}}'
          category: regulatory_vigilance
          assigned_group: Quality_Engineering
      - name: notify-vigilance
        type: call
        call: msteams-vigilance.post-channel-message
        with:
          channel_id: '{{vigilance_channel_id}}'
          text: 'Device Complaint: {{device_model}} — {{complaint_type}} | Salesforce: {{salesforce_case_id}} | ServiceNow INC: {{create-reg-investigation.number}}'
  consumes:
  - type: http
    namespace: salesforce-cases
    baseUri: https://abbott.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-vigilance
    baseUri: https://abbott.service-now.com/api/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-vigilance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → medical-device-complaint-case-routing.yml

Retrieves a standard operating procedure document from Confluence by page ID, returning title, content, version, and last updated date.

naftiko: '0.5'
info:
  label: Confluence SOP Retrieval
  description: Retrieves a standard operating procedure document from Confluence by page ID, returning title, content, version, and last updated date.
  tags:
  - quality
  - documentation
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: sop-library
    port: 8080
    tools:
    - name: get-sop-document
      description: Given a Confluence page ID, return the SOP title, body content, version number, and last modified date. Use when quality or operations staff need to reference standard procedures.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: Confluence page ID.
      call: confluence.get-page
      with:
        page_id: '{{page_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: version
        type: integer
        mapping: $.version.number
      - name: last_updated
        type: string
        mapping: $.version.when
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://abbott.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=version,body.storage
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-sop-retrieval.yml

Orchestrates UDI registration for a medical device by generating the device identifier, submitting to GUDID, updating SAP material master, and notifying regulatory affairs.

naftiko: '0.5'
info:
  label: Medical Device UDI Registration Orchestration
  description: Orchestrates UDI registration for a medical device by generating the device identifier, submitting to GUDID, updating SAP material master, and notifying regulatory affairs.
  tags:
  - regulatory
  - manufacturing
  - sap
  - veeva-vault
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: udi-registration
    port: 8080
    tools:
    - name: register-device-udi
      description: Given a product code and device description, generate the UDI, submit to GUDID, update SAP, and notify regulatory. Use when new medical devices need UDI registration.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Abbott product code.
      - name: device_description
        in: body
        type: string
        description: Device description for GUDID.
      steps:
      - name: create-udi-record
        type: call
        call: veeva-vault.create-udi
        with:
          product_code: '{{product_code}}'
          description: '{{device_description}}'
      - name: update-material-master
        type: call
        call: sap-erp.update-material
        with:
          material: '{{product_code}}'
          udi: '{{create-udi-record.udi_di}}'
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-affairs
          text: 'UDI registered for {{product_code}}: {{create-udi-record.udi_di}}. GUDID submission: {{create-udi-record.gudid_status}}. SAP updated.'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://abbott-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: udi
      path: /objects/udi__c
      operations:
      - name: create-udi
        method: POST
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Material('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: update-material
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-device-udi-registration-orchestration.yml

Pulls the diagnostics division's open Salesforce opportunity pipeline, refreshes the Power BI executive dashboard, and emails a weekly summary to sales leadership.

naftiko: '0.5'
info:
  label: Diagnostics Sales Opportunity Pipeline Report
  description: Pulls the diagnostics division's open Salesforce opportunity pipeline, refreshes the Power BI executive dashboard, and emails a weekly summary to sales leadership.
  tags:
  - sales
  - crm
  - salesforce
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-pipeline
    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 to filter, e.g. 'Diagnostics' or 'Medical Devices'.
      - 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-pipeline.query-opportunities
        with:
          division: '{{division}}'
          stage_not_in: Closed Won,Closed Lost
      - name: refresh-pbi
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{pbi_dataset_id}}'
      - name: send-summary
        type: call
        call: msgraph-sales.send-email
        with:
          to: '{{leadership_email}}'
          subject: '{{division}} Pipeline Report — {{get-pipeline.record_count}} opportunities | ${{get-pipeline.total_value}}'
          body: 'Open pipeline for {{division}}: {{get-pipeline.record_count}} opportunities totaling ${{get-pipeline.total_value}}. Power BI dashboard refreshed.'
  consumes:
  - type: http
    namespace: salesforce-pipeline
    baseUri: https://abbott.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /query
      inputParameters:
      - name: division
        in: query
      - name: stage_not_in
        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-sales
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender}}/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → diagnostics-sales-opportunity-pipeline-report.yml

Queries SAP for current inventory levels of a material at a specified plant, returning available stock, reserved quantity, and reorder status.

naftiko: '0.5'
info:
  label: SAP Inventory Level Check
  description: Queries SAP for current inventory levels of a material at a specified plant, returning available stock, reserved quantity, and reorder status.
  tags:
  - supply-chain
  - manufacturing
  - sap
capability:
  exposes:
  - type: mcp
    namespace: inventory-management
    port: 8080
    tools:
    - name: get-inventory-level
      description: Given a material number and plant code, return the unrestricted stock, reserved quantity, and reorder point status. Use when supply chain needs to check stock availability.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number.
      - name: plant_code
        in: body
        type: string
        description: SAP plant code, e.g. '1000'.
      call: sap-erp.get-material-stock
      with:
        material: '{{material_number}}'
        plant: '{{plant_code}}'
      outputParameters:
      - name: unrestricted_stock
        type: number
        mapping: $.d.UnrestrictedStock
      - name: reserved_quantity
        type: number
        mapping: $.d.ReservedQuantity
      - name: reorder_point
        type: number
        mapping: $.d.ReorderPoint
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-stock
      path: /A_MaterialStock(Material='{{material}}',Plant='{{plant}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-material-stock
        method: GET
Open in Framework → View in Fleet → sap-inventory-level-check.yml

Retrieves the current on-call engineer for a PagerDuty schedule, returning name, contact info, and rotation end time.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Schedule Lookup
  description: Retrieves the current on-call engineer for a PagerDuty schedule, returning name, contact info, and rotation end time.
  tags:
  - it
  - observability
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: on-call
    port: 8080
    tools:
    - name: get-on-call-engineer
      description: Given a PagerDuty schedule ID, return the currently on-call engineer name, email, and rotation end time. Use when teams need to identify who is on call.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: PagerDuty schedule identifier.
      call: pagerduty.get-on-call
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: engineer_name
        type: string
        mapping: $.oncalls[0].user.name
      - name: email
        type: string
        mapping: $.oncalls[0].user.email
      - name: rotation_end
        type: string
        mapping: $.oncalls[0].end
  consumes:
  - 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?schedule_ids[]={{schedule_id}}
      inputParameters:
      - name: schedule_id
        in: query
      operations:
      - name: get-on-call
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-schedule-lookup.yml

Initiates a compliance document review cycle by retrieving the document from Veeva Vault, creating reviewer tasks in ServiceNow, setting deadlines, and notifying reviewers.

naftiko: '0.5'
info:
  label: Compliance Document Review Orchestration
  description: Initiates a compliance document review cycle by retrieving the document from Veeva Vault, creating reviewer tasks in ServiceNow, setting deadlines, and notifying reviewers.
  tags:
  - compliance
  - quality
  - veeva-vault
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-review
    port: 8080
    tools:
    - name: initiate-document-review
      description: Given a Veeva document ID and reviewer list, create review tasks, set deadlines, and notify reviewers. Use when quality or compliance initiates periodic document reviews.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: Veeva Vault document ID.
      - name: review_deadline
        in: body
        type: string
        description: Review deadline in YYYY-MM-DD format.
      steps:
      - name: get-document
        type: call
        call: veeva-vault.get-document
        with:
          doc_id: '{{document_id}}'
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Review: {{get-document.title}}'
          category: compliance_review
          assigned_group: Quality_Compliance
          due_date: '{{review_deadline}}'
      - name: notify-reviewers
        type: call
        call: msteams.send-message
        with:
          channel_id: compliance-reviews
          text: 'Document review requested: {{get-document.title}} (v{{get-document.version}}). Due: {{review_deadline}}. Task: {{create-review-task.number}}'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://abbott-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbott.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-document-review-orchestration.yml

Executes a predefined clinical analytics query in Snowflake, returning aggregated patient outcome metrics for a given study.

naftiko: '0.5'
info:
  label: Snowflake Clinical Data Query
  description: Executes a predefined clinical analytics query in Snowflake, returning aggregated patient outcome metrics for a given study.
  tags:
  - clinical
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: clinical-analytics
    port: 8080
    tools:
    - name: query-clinical-metrics
      description: Given a study ID, return aggregated patient outcome metrics from the clinical data warehouse. Use when clinical data scientists need study-level analytics.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      call: snowflake.execute-query
      with:
        query_name: clinical_outcomes_summary
        params: '{{study_id}}'
      outputParameters:
      - name: total_patients
        type: integer
        mapping: $.data[0].total_patients
      - name: primary_endpoint_met
        type: boolean
        mapping: $.data[0].primary_endpoint_met
      - name: adverse_event_rate
        type: number
        mapping: $.data[0].ae_rate
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-data-query.yml

When a Workday employee role change is approved, updates their Okta group memberships, adjusts Salesforce user profile, and notifies the IT help desk via ServiceNow.

naftiko: '0.5'
info:
  label: Employee Role Change Provisioning
  description: When a Workday employee role change is approved, updates their Okta group memberships, adjusts Salesforce user profile, and notifies the IT help desk via ServiceNow.
  tags:
  - hr
  - identity
  - workday
  - okta
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: role-change
    port: 8080
    tools:
    - name: process-role-change
      description: Given a Workday employee ID, new role, and Okta group assignments, update the employee's Okta group membership to reflect new role permissions, update their Salesforce user profile, and create a ServiceNow task for IT 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 with the role change.
      - name: new_role
        in: body
        type: string
        description: New job title or role description.
      - name: okta_add_groups
        in: body
        type: string
        description: Comma-separated Okta group IDs to add the user to.
      - name: okta_remove_groups
        in: body
        type: string
        description: Comma-separated Okta group IDs to remove the user from.
      - 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: update-okta-groups
        type: call
        call: okta-role.update-user-groups
        with:
          user_email: '{{get-worker.work_email}}'
          add_groups: '{{okta_add_groups}}'
          remove_groups: '{{okta_remove_groups}}'
      - name: update-sf-profile
        type: call
        call: salesforce-role.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_Provisioning
  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://abbott.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: user-groups
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: update-user-groups
        method: POST
  - type: http
    namespace: salesforce-role
    baseUri: https://abbott.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://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → employee-role-change-provisioning.yml

Creates a preventive maintenance order in SAP Plant Maintenance for manufacturing equipment.

naftiko: '0.5'
info:
  label: SAP Maintenance Order Creation
  description: Creates a preventive maintenance order in SAP Plant Maintenance for manufacturing equipment.
  tags:
  - manufacturing
  - maintenance
  - sap
capability:
  exposes:
  - type: mcp
    namespace: plant-maintenance
    port: 8080
    tools:
    - name: create-maintenance-order
      description: Given equipment ID and maintenance type, create a PM order in SAP and return the order number. Use when maintenance schedules trigger planned equipment servicing.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: SAP equipment ID.
      - name: maintenance_type
        in: body
        type: string
        description: 'Maintenance type: preventive, corrective, calibration.'
      call: sap-erp.create-pm-order
      with:
        equipment: '{{equipment_id}}'
        order_type: '{{maintenance_type}}'
      outputParameters:
      - name: order_number
        type: string
        mapping: $.d.MaintenanceOrder
      - name: planned_date
        type: string
        mapping: $.d.PlannedStartDate
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/PM_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /A_MaintenanceOrder
      operations:
      - name: create-pm-order
        method: POST
Open in Framework → View in Fleet → sap-maintenance-order-creation.yml

Retrieves quality inspection lot details from SAP by inspection lot number, returning inspection results, usage decision, and defect counts.

naftiko: '0.5'
info:
  label: SAP Quality Inspection Lot Lookup
  description: Retrieves quality inspection lot details from SAP by inspection lot number, returning inspection results, usage decision, and defect counts.
  tags:
  - quality
  - manufacturing
  - sap
capability:
  exposes:
  - type: mcp
    namespace: quality-inspection
    port: 8080
    tools:
    - name: get-inspection-lot
      description: Given an SAP inspection lot number, return the inspection status, usage decision, and defect counts. Use when quality teams need to review inspection results.
      inputParameters:
      - name: inspection_lot
        in: body
        type: string
        description: SAP inspection lot number.
      call: sap-erp.get-inspection
      with:
        lot: '{{inspection_lot}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.InspectionLotStatus
      - name: usage_decision
        type: string
        mapping: $.d.UsageDecision
      - name: defect_count
        type: integer
        mapping: $.d.DefectCount
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspection-lots
      path: /A_InspectionLot('{{lot}}')
      inputParameters:
      - name: lot
        in: path
      operations:
      - name: get-inspection
        method: GET
Open in Framework → View in Fleet → sap-quality-inspection-lot-lookup.yml

Generates a post-market surveillance report by aggregating complaint data, adverse event reports, and field actions from multiple systems into a consolidated regulatory report.

naftiko: '0.5'
info:
  label: Post-Market Surveillance Report Orchestration
  description: Generates a post-market surveillance report by aggregating complaint data, adverse event reports, and field actions from multiple systems into a consolidated regulatory report.
  tags:
  - regulatory
  - quality
  - safety
  - snowflake
  - salesforce
  - veeva-vault
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pms-reporting
    port: 8080
    tools:
    - name: generate-pms-report
      description: Given a product code and reporting period, aggregate complaints, adverse events, and field actions into a post-market surveillance report. Use when regulatory affairs prepares periodic safety reports.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Abbott product code.
      - name: reporting_period
        in: body
        type: string
        description: Reporting period, e.g. 'Q1-2026'.
      steps:
      - name: get-complaint-data
        type: call
        call: snowflake.execute-query
        with:
          query_name: pms_complaint_summary
          params: '{{product_code}},{{reporting_period}}'
      - name: get-adverse-events
        type: call
        call: snowflake.execute-query
        with:
          query_name: pms_adverse_event_summary
          params: '{{product_code}},{{reporting_period}}'
      - name: create-report
        type: call
        call: veeva-vault.create-document
        with:
          doc_type: pms_report
          product_code: '{{product_code}}'
          period: '{{reporting_period}}'
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-safety
          text: 'PMS report generated for {{product_code}} ({{reporting_period}}). Complaints: {{get-complaint-data.total}}. Adverse events: {{get-adverse-events.total}}. Document: {{create-report.document_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: veeva-vault
    baseUri: https://abbott-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → post-market-surveillance-report-orchestration.yml

When a manufacturing line goes down, creates an incident, alerts the maintenance team, logs downtime in SAP, and updates the production schedule.

naftiko: '0.5'
info:
  label: Manufacturing Line Downtime Response
  description: When a manufacturing line goes down, creates an incident, alerts the maintenance team, logs downtime in SAP, and updates the production schedule.
  tags:
  - manufacturing
  - it
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mfg-downtime
    port: 8080
    tools:
    - name: handle-line-downtime
      description: Given a production line ID and failure reason, create a maintenance incident, notify the team, log downtime, and adjust production schedule. Use when manufacturing operations detects an unplanned line stoppage.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: Production line identifier.
      - name: failure_reason
        in: body
        type: string
        description: Description of the failure.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Line {{line_id}} down: {{failure_reason}}'
          category: manufacturing
          priority: '1'
          assigned_group: Maintenance_Engineering
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing-ops
          text: 'ALERT: Production line {{line_id}} is down. Reason: {{failure_reason}}. Incident: {{create-incident.number}}'
      - name: log-downtime
        type: call
        call: sap-erp.create-downtime-record
        with:
          work_center: '{{line_id}}'
          reason_code: '{{failure_reason}}'
          incident_ref: '{{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/PP_DOWNTIME_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: downtime
      path: /A_DowntimeRecord
      operations:
      - name: create-downtime-record
        method: POST
Open in Framework → View in Fleet → manufacturing-line-downtime-response.yml

Uploads a regulatory document to a specified Box folder and returns the file ID and shared link.

naftiko: '0.5'
info:
  label: Box Regulatory File Upload
  description: Uploads a regulatory document to a specified Box folder and returns the file ID and shared link.
  tags:
  - regulatory
  - documentation
  - box
capability:
  exposes:
  - type: mcp
    namespace: file-storage
    port: 8080
    tools:
    - name: upload-to-box
      description: Given a folder ID and file details, upload the document to Box and return the file ID and link. Use when regulatory teams need to store documents in Box.
      inputParameters:
      - name: folder_id
        in: body
        type: string
        description: Box folder ID.
      - name: file_name
        in: body
        type: string
        description: Name of the file to upload.
      call: box.upload-file
      with:
        folder_id: '{{folder_id}}'
        name: '{{file_name}}'
      outputParameters:
      - name: file_id
        type: string
        mapping: $.entries[0].id
      - name: shared_link
        type: string
        mapping: $.entries[0].shared_link.url
  consumes:
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → box-regulatory-file-upload.yml

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

naftiko: '0.5'
info:
  label: SAP Purchase Order Status Lookup
  description: Looks up an SAP S/4HANA purchase order by number and returns header status, vendor, total value, and open line items.
  tags:
  - finance
  - procurement
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP purchase order number, return the PO header status, vendor name, total amount, and open line items. Use when procurement teams need to check the status of an outstanding PO.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number, e.g. '4500012345'.
      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_amount
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-purchase-order-status-lookup.yml

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

naftiko: '0.5'
info:
  label: Supplier Ariba Invoice Validation and Approval
  description: Validates incoming SAP Ariba invoices against open purchase orders and routes exceptions to the accounts payable team for resolution.
  tags:
  - finance
  - procurement
  - sap-ariba
  - accounts-payable
  - erp
capability:
  exposes:
  - type: mcp
    namespace: ap-procurement
    port: 8080
    tools:
    - name: validate-supplier-invoice
      description: Given an SAP Ariba invoice ID and corresponding PO number, retrieve both documents, compare totals, and create a ServiceNow approval task if a mismatch is detected. Use when processing incoming supplier invoices requiring three-way match validation.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: SAP Ariba invoice ID.
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number for three-way match.
      steps:
      - name: get-invoice
        type: call
        call: ariba.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-po
        type: call
        call: sap-po.get-purchase-order
        with:
          po_number: '{{po_number}}'
      - name: create-approval
        type: call
        call: servicenow-ap.create-task
        with:
          short_description: 'Invoice validation: {{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_Approvals
  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-po
    baseUri: https://abbott-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://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → supplier-ariba-invoice-validation-and-approval.yml

Assembles QBR data by pulling financial results from SAP, pipeline data from Salesforce, headcount from Workday, and generating a consolidated Snowflake report.

naftiko: '0.5'
info:
  label: Quarterly Business Review Data Orchestration
  description: Assembles QBR data by pulling financial results from SAP, pipeline data from Salesforce, headcount from Workday, and generating a consolidated Snowflake report.
  tags:
  - finance
  - sales
  - hr
  - sap
  - salesforce
  - workday
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: qbr-data
    port: 8080
    tools:
    - name: assemble-qbr-data
      description: Given a division code and fiscal quarter, pull financials, pipeline, headcount, and generate a consolidated QBR report. Use when finance prepares quarterly business reviews.
      inputParameters:
      - name: division_code
        in: body
        type: string
        description: Abbott division code.
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter, e.g. 'Q1-2026'.
      steps:
      - name: get-financials
        type: call
        call: sap-erp.get-pl-summary
        with:
          division: '{{division_code}}'
          quarter: '{{fiscal_quarter}}'
      - name: get-pipeline
        type: call
        call: salesforce.get-pipeline-summary
        with:
          division: '{{division_code}}'
          quarter: '{{fiscal_quarter}}'
      - name: get-headcount
        type: call
        call: workday.get-headcount
        with:
          division: '{{division_code}}'
      - name: generate-report
        type: call
        call: snowflake.execute-query
        with:
          query_name: qbr_consolidated_report
          params: '{{division_code}},{{fiscal_quarter}},{{get-financials.revenue}},{{get-pipeline.pipeline_value}},{{get-headcount.total}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/FI_PL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: pl-summary
      path: /A_PLSummary
      operations:
      - name: get-pl-summary
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://abbott.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: pipeline
      path: /analytics/reports/pipeline_summary
      operations:
      - name: get-pipeline-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: headcount
      path: /headcount
      operations:
      - name: get-headcount
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → quarterly-business-review-data-orchestration.yml

When a Salesforce opportunity is closed-won, creates an SAP sales order, updates the CRM record, and notifies the fulfillment team.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to Order Orchestration
  description: When a Salesforce opportunity is closed-won, creates an SAP sales order, updates the CRM record, and notifies the fulfillment team.
  tags:
  - sales
  - erp
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: opportunity-to-order
    port: 8080
    tools:
    - name: convert-opportunity-to-order
      description: Given a Salesforce opportunity ID, create a sales order in SAP, update the opportunity with the order number, and notify fulfillment. Use when sales closes a deal.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opp_id: '{{opportunity_id}}'
      - name: create-sales-order
        type: call
        call: sap-erp.create-order
        with:
          customer: '{{get-opportunity.account_sap_id}}'
          material: '{{get-opportunity.product_code}}'
          quantity: '{{get-opportunity.quantity}}'
          amount: '{{get-opportunity.amount}}'
      - name: update-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opp_id: '{{opportunity_id}}'
          sap_order_number: '{{create-sales-order.order_number}}'
      - name: notify-fulfillment
        type: call
        call: msteams.send-message
        with:
          channel_id: order-fulfillment
          text: 'New SAP order {{create-sales-order.order_number}} from opportunity {{opportunity_id}}. Customer: {{get-opportunity.account_name}}. Amount: {{get-opportunity.amount}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbott.my.salesforce.com/services/data/v59.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
      - name: update-opportunity
        method: PATCH
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/SD_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /A_SalesOrder
      operations:
      - name: create-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-order-orchestration.yml

Prepares for a regulatory audit by gathering open CAPAs, pending deviations, training compliance status, and generating a consolidated readiness report.

naftiko: '0.5'
info:
  label: Regulatory Audit Preparation Orchestration
  description: Prepares for a regulatory audit by gathering open CAPAs, pending deviations, training compliance status, and generating a consolidated readiness report.
  tags:
  - regulatory
  - quality
  - compliance
  - servicenow
  - workday
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: audit-preparation
    port: 8080
    tools:
    - name: prepare-audit-package
      description: Given an audit type and facility code, gather open CAPAs, pending deviations, training compliance metrics, and generate a readiness report. Use when quality assurance prepares for FDA or ISO audits.
      inputParameters:
      - name: audit_type
        in: body
        type: string
        description: 'Type of audit: FDA, ISO, internal.'
      - name: facility_code
        in: body
        type: string
        description: Manufacturing facility code.
      steps:
      - name: get-open-capas
        type: call
        call: servicenow.query-capas
        with:
          facility: '{{facility_code}}'
          status: open
      - name: get-deviations
        type: call
        call: servicenow.query-deviations
        with:
          facility: '{{facility_code}}'
          status: pending
      - name: get-training-compliance
        type: call
        call: workday.get-training-status
        with:
          facility: '{{facility_code}}'
          compliance_type: gmp
      - name: generate-report
        type: call
        call: snowflake.execute-query
        with:
          query_name: audit_readiness_report
          params: '{{facility_code}},{{audit_type}},{{get-open-capas.count}},{{get-deviations.count}},{{get-training-compliance.compliance_rate}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbott.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: capas
      path: /table/u_capa
      operations:
      - name: query-capas
        method: GET
    - name: deviations
      path: /table/u_deviation
      operations:
      - name: query-deviations
        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: training
      path: /training/compliance
      operations:
      - name: get-training-status
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://abbott.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → regulatory-audit-preparation-orchestration.yml

Triggers a Terraform Cloud workspace run to provision new environment infrastructure, notifies the DevOps team via Teams upon completion.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Provisioning
  description: Triggers a Terraform Cloud workspace run to provision new environment infrastructure, notifies the DevOps team via Teams upon completion.
  tags:
  - devops
  - terraform
  - cloud
  - infrastructure
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: tf-provisioning
    port: 8080
    tools:
    - name: provision-environment
      description: Given a Terraform Cloud workspace ID and environment label, trigger a plan-and-apply run to provision cloud infrastructure. Notify the DevOps Teams channel with run status. Use when standing up new environments for product development or clinical systems.
      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. 'freestyle-libre-staging'.
      - name: devops_channel_id
        in: body
        type: string
        description: DevOps Teams channel ID.
      steps:
      - name: trigger-tf-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-tf.post-channel-message
        with:
          channel_id: '{{devops_channel_id}}'
          text: 'Terraform run triggered for {{environment_label}} (workspace {{workspace_id}}). Run ID: {{trigger-tf-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-tf
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-provisioning.yml

Creates a new bug report in Jira with specified project, summary, description, and priority fields.

naftiko: '0.5'
info:
  label: Jira Bug Report Creation
  description: Creates a new bug report in Jira with specified project, summary, description, and priority fields.
  tags:
  - devops
  - engineering
  - jira
capability:
  exposes:
  - type: mcp
    namespace: issue-tracking
    port: 8080
    tools:
    - name: create-bug-report
      description: Given a project key, summary, description, and priority, create a Jira bug issue and return the issue key. Use when engineering teams need to log a software defect.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key, e.g. 'LIBRE'.
      - 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: Critical, High, Medium, Low.'
      call: jira.create-issue
      with:
        project: '{{project_key}}'
        issuetype: Bug
        summary: '{{summary}}'
        description: '{{description}}'
        priority: '{{priority}}'
      outputParameters:
      - name: issue_key
        type: string
        mapping: $.key
      - name: issue_url
        type: string
        mapping: $.self
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abbott.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → jira-bug-report-creation.yml

Assesses new product launch readiness by checking regulatory clearance, supply chain readiness, marketing material approval, and sales team training completion.

naftiko: '0.5'
info:
  label: New Product Launch Readiness Orchestration
  description: Assesses new product launch readiness by checking regulatory clearance, supply chain readiness, marketing material approval, and sales team training completion.
  tags:
  - manufacturing
  - regulatory
  - marketing
  - veeva-vault
  - sap
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: launch-readiness
    port: 8080
    tools:
    - name: assess-launch-readiness
      description: Given a product code, check regulatory clearance, supply chain status, marketing readiness, and training completion. Use when product management assesses launch readiness.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Abbott product code.
      steps:
      - name: check-regulatory
        type: call
        call: veeva-vault.get-clearance-status
        with:
          product_code: '{{product_code}}'
      - name: check-supply-chain
        type: call
        call: sap-erp.get-material-availability
        with:
          material: '{{product_code}}'
      - name: check-training
        type: call
        call: workday.get-training-status
        with:
          course: product-launch-{{product_code}}
      - name: report-readiness
        type: call
        call: msteams.send-message
        with:
          channel_id: product-launches
          text: 'Launch readiness for {{product_code}}: Regulatory: {{check-regulatory.status}}. Supply: {{check-supply-chain.availability}}. Training: {{check-training.completion_rate}}% complete.'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://abbott-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: clearance
      path: /objects/clearance__c
      operations:
      - name: get-clearance-status
        method: GET
  - type: http
    namespace: sap-erp
    baseUri: https://abbott-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: availability
      path: /A_MaterialAvailability('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material-availability
        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: training
      path: /training/compliance
      operations:
      - name: get-training-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-product-launch-readiness-orchestration.yml

Searches PubMed for new publications, logs findings in Veeva Vault, creates a Jira review task, and sends a digest to the medical affairs Slack channel.

naftiko: '0.5'
info:
  label: Medical Affairs Literature Review Pipeline
  description: Searches PubMed for new publications, logs findings in Veeva Vault, creates a Jira review task, and sends a digest to the medical affairs Slack channel.
  tags:
  - medical-affairs
  - pubmed
  - veeva
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: medical_affairs_literature_review_pipeli
      description: Orchestrate medical affairs literature review pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: search-pubmed
        type: call
        call: pubmed.search
        with:
          query: '{{resource_id}}'
      - name: log-findings
        type: call
        call: veeva.create-document
        with:
          name: 'Literature review: {{resource_id}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: MA
          summary: 'Literature review: {{resource_id}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: medical-affairs
          text: 'New publications for {{resource_id}}: {{search-pubmed.count}} articles. Review: {{create-review.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abbvie.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-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → medical-affairs-literature-review-pipeline.yml

Publishes a new Google Tag Manager container version for AbbVie's digital marketing properties, logs the deployment in Adobe Analytics, and notifies the digital team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Google Tag Manager Container Version Publish
  description: Publishes a new Google Tag Manager container version for AbbVie's digital marketing properties, logs the deployment in Adobe Analytics, and notifies the digital team in Microsoft Teams.
  tags:
  - marketing
  - tag-management
  - google-tag-manager
  - adobe-analytics
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: digital-marketing
    port: 8080
    tools:
    - name: publish-container
      description: Given a GTM account, container, and workspace, publish the container version and log the deployment.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: GTM account ID.
      - name: container_id
        in: body
        type: string
        description: GTM container ID.
      - name: workspace_id
        in: body
        type: string
        description: GTM workspace ID.
      - name: version_name
        in: body
        type: string
        description: Name for the published version.
      steps:
      - name: publish-version
        type: call
        call: gtm.publish-workspace
        with:
          account_id: '{{account_id}}'
          container_id: '{{container_id}}'
          workspace_id: '{{workspace_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: digital-marketing
          text: 'GTM Container Published: {{version_name}} (Container: {{container_id}}). Version: {{publish-version.version_id}}. Published at: {{publish-version.published_at}}'
  consumes:
  - type: http
    namespace: gtm
    baseUri: https://www.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.google_tagmanager_token
    resources:
    - name: workspaces
      path: /accounts/{{account_id}}/containers/{{container_id}}/workspaces/{{workspace_id}}:quick_preview
      inputParameters:
      - name: account_id
        in: path
      - name: container_id
        in: path
      - name: workspace_id
        in: path
      operations:
      - name: publish-workspace
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-tag-manager-container-version-publish.yml

Updates rate limiting configuration on a Kong API gateway route for AbbVie's partner-facing APIs, logs the change in ServiceNow, and notifies the integration team.

naftiko: '0.5'
info:
  label: Kong API Gateway Rate Limit Update
  description: Updates rate limiting configuration on a Kong API gateway route for AbbVie's partner-facing APIs, logs the change in ServiceNow, and notifies the integration team.
  tags:
  - api-management
  - kong
  - servicenow
  - microsoft-teams
  - integration
capability:
  exposes:
  - type: mcp
    namespace: api-ops
    port: 8080
    tools:
    - name: update-rate-limit
      description: Given a Kong route ID and new rate limit, update the plugin configuration, log the change, and notify the team.
      inputParameters:
      - name: route_id
        in: body
        type: string
        description: Kong route ID.
      - name: rate_limit
        in: body
        type: string
        description: New rate limit (requests per minute).
      - name: change_reason
        in: body
        type: string
        description: Reason for the rate limit change.
      steps:
      - name: update-plugin
        type: call
        call: kong.update-rate-limit
        with:
          route_id: '{{route_id}}'
          rate_limit: '{{rate_limit}}'
      - name: log-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Kong rate limit update: route {{route_id}} to {{rate_limit}} rpm'
          description: 'Route: {{route_id}}

            New limit: {{rate_limit}} rpm

            Reason: {{change_reason}}'
          assigned_group: Integration_Team
          category: api_management
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: integration-ops
          text: 'Kong rate limit updated: Route {{route_id}} now at {{rate_limit}} rpm. Reason: {{change_reason}}. Change: {{log-change.number}}'
  consumes:
  - type: http
    namespace: kong
    baseUri: https://kong-admin.abbvie.com
    authentication:
      type: bearer
      token: $secrets.kong_admin_token
    resources:
    - name: rate-limit-plugins
      path: /routes/{{route_id}}/plugins/rate-limiting
      inputParameters:
      - name: route_id
        in: path
      operations:
      - name: update-rate-limit
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → kong-api-gateway-rate-limit-update.yml

Publishes an approved job posting to LinkedIn, logs the posting in Salesforce for talent acquisition tracking, and notifies the recruiting team in Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Job Posting Publisher
  description: Publishes an approved job posting to LinkedIn, logs the posting in Salesforce for talent acquisition tracking, and notifies the recruiting team in Microsoft Teams.
  tags:
  - hr
  - talent-acquisition
  - linkedin
  - salesforce
  - microsoft-teams
  - recruiting
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: publish-job-posting
      description: Given job details, publish to LinkedIn, log in Salesforce, and notify the recruiting team.
      inputParameters:
      - name: job_title
        in: body
        type: string
        description: Title of the job posting.
      - name: job_description
        in: body
        type: string
        description: Full job description text.
      - name: location
        in: body
        type: string
        description: Job location.
      - name: department
        in: body
        type: string
        description: Hiring department.
      - name: requisition_id
        in: body
        type: string
        description: Internal requisition ID from PeopleSoft.
      steps:
      - name: post-to-linkedin
        type: call
        call: linkedin.create-job-posting
        with:
          title: '{{job_title}}'
          description: '{{job_description}}'
          location: '{{location}}'
      - name: log-in-salesforce
        type: call
        call: salesforce.create-record
        with:
          object_type: Job_Posting__c
          fields: '{"Name": "{{job_title}}", "LinkedIn_Post_Id__c": "{{post-to-linkedin.id}}", "Requisition_Id__c": "{{requisition_id}}", "Department__c": "{{department}}"}'
      - name: notify-recruiters
        type: call
        call: msteams.send-message
        with:
          channel: talent-acquisition
          text: 'New job posted to LinkedIn: {{job_title}} ({{location}}). Req: {{requisition_id}}. LinkedIn ID: {{post-to-linkedin.id}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /simpleJobPostings
      operations:
      - name: create-job-posting
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /sobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-job-posting-publisher.yml

Retrieves the status of a Bitbucket pipeline run. Used by development teams at AbbVie to check build and deployment progress.

naftiko: '0.5'
info:
  label: Bitbucket Pipeline Status
  description: Retrieves the status of a Bitbucket pipeline run. Used by development teams at AbbVie to check build and deployment progress.
  tags:
  - devops
  - bitbucket
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: ci-cd
    port: 8080
    tools:
    - name: get-pipeline
      description: Look up a Bitbucket pipeline run by repository and pipeline UUID.
      inputParameters:
      - name: repo_slug
        in: body
        type: string
        description: The repository slug.
      - name: pipeline_uuid
        in: body
        type: string
        description: The pipeline UUID.
      call: bitbucket.get-pipeline
      with:
        repo_slug: '{{repo_slug}}'
        pipeline_uuid: '{{pipeline_uuid}}'
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0/repositories/abbvie
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: pipelines
      path: /{{repo_slug}}/pipelines/{{pipeline_uuid}}
      inputParameters:
      - name: repo_slug
        in: path
      - name: pipeline_uuid
        in: path
      operations:
      - name: get-pipeline
        method: GET
Open in Framework → View in Fleet → bitbucket-pipeline-status.yml

Creates and schedules a MailChimp email campaign targeting healthcare professionals, tags the campaign in Salesforce for CRM tracking, and logs the launch in Confluence for compliance documentation.

naftiko: '0.5'
info:
  label: HCP Engagement Email Campaign
  description: Creates and schedules a MailChimp email campaign targeting healthcare professionals, tags the campaign in Salesforce for CRM tracking, and logs the launch in Confluence for compliance documentation.
  tags:
  - marketing
  - hcp-engagement
  - mailchimp
  - salesforce
  - confluence
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: hcp-marketing
    port: 8080
    tools:
    - name: launch-hcp-campaign
      description: Given campaign details and a MailChimp audience, create the email campaign, tag the Salesforce campaign, and log in Confluence for regulatory documentation.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: Name of the HCP email campaign.
      - name: audience_id
        in: body
        type: string
        description: MailChimp audience (list) ID for HCPs.
      - name: subject_line
        in: body
        type: string
        description: Email subject line.
      - name: salesforce_campaign_id
        in: body
        type: string
        description: Salesforce campaign ID for CRM tracking.
      - name: therapeutic_area
        in: body
        type: string
        description: Therapeutic area (e.g., immunology, oncology).
      steps:
      - name: create-email-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: '{{audience_id}}'
          subject_line: '{{subject_line}}'
          title: '{{campaign_name}}'
      - name: update-salesforce-campaign
        type: call
        call: salesforce.update-campaign
        with:
          campaign_id: '{{salesforce_campaign_id}}'
          status: In Progress
          description: MailChimp campaign {{create-email-campaign.id}} launched for {{therapeutic_area}} HCPs.
      - name: log-compliance
        type: call
        call: confluence.create-page
        with:
          space_key: MKTCOMPLIANCE
          title: 'HCP Campaign Log: {{campaign_name}} — {{therapeutic_area}}'
          body: 'Campaign: {{campaign_name}}

            Therapeutic Area: {{therapeutic_area}}

            MailChimp ID: {{create-email-campaign.id}}

            Salesforce Campaign: {{salesforce_campaign_id}}

            Subject: {{subject_line}}

            Audience: {{audience_id}}'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.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: confluence
    baseUri: https://abbvie.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → hcp-engagement-email-campaign.yml

Retrieves application performance metrics from Dynatrace including response time, error rate, and throughput for AbbVie's patient-facing and commercial web applications.

naftiko: '0.5'
info:
  label: Dynatrace Application Performance
  description: Retrieves application performance metrics from Dynatrace including response time, error rate, and throughput for AbbVie's patient-facing and commercial web applications.
  tags:
  - devops
  - apm
  - dynatrace
  - performance
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-app-performance
      description: Look up Dynatrace application performance metrics for a given application entity ID.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Dynatrace application entity ID.
      call: dynatrace.get-entity
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://abbvie.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: entities
      path: /entities/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-entity
        method: GET
Open in Framework → View in Fleet → dynatrace-application-performance.yml

On termination in Workday, disables Okta account, revokes Azure AD access, creates ServiceNow ticket for equipment return, and archives Box files.

naftiko: '0.5'
info:
  label: Employee Offboarding Orchestrator
  description: On termination in Workday, disables Okta account, revokes Azure AD access, creates ServiceNow ticket for equipment return, and archives Box files.
  tags:
  - hr
  - workday
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: employee_offboarding_orchestrator
      description: Orchestrate employee offboarding orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-employee
        type: call
        call: workday.get-employee
        with:
          employee_id: '{{resource_id}}'
      - name: disable-okta
        type: call
        call: okta.deactivate-user
        with:
          user_id: '{{get-employee.email}}'
      - name: create-ticket
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Equipment return: {{get-employee.full_name}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: hr-ops
          text: Offboarding complete for {{get-employee.full_name}}
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-operation
        method: POST
  - type: http
    namespace: okta
    baseUri: https://abbvie.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: okta-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → employee-offboarding-orchestrator.yml

Checks the sync status of an Argo CD application deployment. Used by DevOps teams to verify GitOps deployment health for AbbVie's containerized pharma applications.

naftiko: '0.5'
info:
  label: Argo CD Deployment Sync Status
  description: Checks the sync status of an Argo CD application deployment. Used by DevOps teams to verify GitOps deployment health for AbbVie's containerized pharma applications.
  tags:
  - devops
  - gitops
  - argo
  - deployment
  - kubernetes
capability:
  exposes:
  - type: mcp
    namespace: gitops
    port: 8080
    tools:
    - name: get-sync-status
      description: Look up the sync status of an Argo CD application.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: Argo CD application name.
      call: argocd.get-application
      with:
        app_name: '{{app_name}}'
  consumes:
  - type: http
    namespace: argocd
    baseUri: https://argocd.abbvie.com/api/v1
    authentication:
      type: bearer
      token: $secrets.argocd_token
    resources:
    - name: applications
      path: /applications/{{app_name}}
      inputParameters:
      - name: app_name
        in: path
      operations:
      - name: get-application
        method: GET
Open in Framework → View in Fleet → argo-cd-deployment-sync-status.yml

Pulls open vulnerabilities from Qualys, correlates with ServiceNow CMDB assets, creates remediation tasks in Jira, and tracks SLA in Grafana.

naftiko: '0.5'
info:
  label: Vulnerability Remediation Tracker
  description: Pulls open vulnerabilities from Qualys, correlates with ServiceNow CMDB assets, creates remediation tasks in Jira, and tracks SLA in Grafana.
  tags:
  - security
  - qualys
  - servicenow
  - jira
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: vulnerability_remediation_tracker
      description: Orchestrate vulnerability remediation tracker workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-vulns
        type: call
        call: qualys.get-vulnerabilities
        with:
          scan_id: '{{resource_id}}'
      - name: get-assets
        type: call
        call: servicenow.get-cmdb-ci
        with:
          ip_address: '{{get-vulns.affected_ip}}'
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: 'Remediate: {{get-vulns.cve_id}} on {{get-assets.name}}'
      - name: update-dashboard
        type: call
        call: grafana.annotate
        with:
          dashboard_uid: vuln-tracking
          text: 'New remediation: {{create-remediation.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: jira
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://abbvie-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-operation
        method: POST
Open in Framework → View in Fleet → vulnerability-remediation-tracker.yml

When a pharmacovigilance team member logs an adverse event, creates a ServiceNow safety case, stores documentation in Box, and alerts the drug safety team in Microsoft Teams with full case context.

naftiko: '0.5'
info:
  label: Adverse Event Reporting Pipeline
  description: When a pharmacovigilance team member logs an adverse event, creates a ServiceNow safety case, stores documentation in Box, and alerts the drug safety team in Microsoft Teams with full case context.
  tags:
  - pharmacovigilance
  - drug-safety
  - adverse-event
  - servicenow
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: report-adverse-event
      description: Given adverse event details, create a safety case in ServiceNow, upload supporting documents to Box, and alert the drug safety team.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: Anonymized patient identifier.
      - name: product_name
        in: body
        type: string
        description: AbbVie product associated with the event.
      - name: event_description
        in: body
        type: string
        description: Description of the adverse event.
      - name: severity
        in: body
        type: string
        description: 'Severity level: mild, moderate, severe, life-threatening.'
      - name: reporter_email
        in: body
        type: string
        description: Email of the reporting healthcare professional.
      steps:
      - name: create-safety-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AE Report: {{product_name}} — {{severity}}'
          category: pharmacovigilance
          assigned_group: Drug_Safety
          description: 'Patient: {{patient_id}}. Product: {{product_name}}. Severity: {{severity}}. Event: {{event_description}}. Reporter: {{reporter_email}}.'
      - name: create-case-folder
        type: call
        call: box.create-folder
        with:
          parent_folder_id: pharmacovigilance_root
          folder_name: AE_{{create-safety-case.number}}_{{product_name}}
      - name: alert-safety-team
        type: call
        call: msteams.send-message
        with:
          channel: drug-safety-alerts
          text: 'New Adverse Event: {{product_name}} ({{severity}}). Case: {{create-safety-case.number}}. Patient: {{patient_id}}. Docs: {{create-case-folder.url}}. Reporter: {{reporter_email}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adverse-event-reporting-pipeline.yml

Looks up a SAP purchase order by number and returns header status, vendor, total value, and delivery date. Used by procurement teams to check PO health for pharmaceutical raw materials and packaging.

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

Extracts contract metadata from Icertis CLM, validates terms in SharePoint, logs compliance in ServiceNow, updates Salesforce, and notifies legal via Teams.

naftiko: '0.5'
info:
  label: Contract Lifecycle Management Pipeline
  description: Extracts contract metadata from Icertis CLM, validates terms in SharePoint, logs compliance in ServiceNow, updates Salesforce, and notifies legal via Teams.
  tags:
  - legal
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: contract_lifecycle_management_pipeline
      description: Orchestrate contract lifecycle management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-contract
        type: call
        call: icertis.get-contract
        with:
          contract_id: '{{resource_id}}'
      - name: validate-terms
        type: call
        call: sharepoint.get-template
        with:
          template_id: legal_terms
      - name: log-compliance
        type: call
        call: servicenow.create-record
        with:
          table: contract_compliance
          contract_id: '{{resource_id}}'
      - name: notify-legal
        type: call
        call: msteams.send-message
        with:
          channel: legal
          text: 'Contract {{resource_id}} validated. Status: {{log-compliance.state}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → contract-lifecycle-management-pipeline.yml

Extracts research data from Oracle, loads into Snowflake, runs quality checks, catalogs in Alation, and notifies data science in Slack.

naftiko: '0.5'
info:
  label: Research Data Lake Ingestion Pipeline
  description: Extracts research data from Oracle, loads into Snowflake, runs quality checks, catalogs in Alation, and notifies data science in Slack.
  tags:
  - data-engineering
  - oracle
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: research_data_lake_ingestion_pipeline
      description: Orchestrate research data lake ingestion pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: extract-data
        type: call
        call: oracle.extract-table
        with:
          table_name: '{{resource_id}}'
      - name: load-data
        type: call
        call: snowflake.load-data
        with:
          source_ref: '{{extract-data.file_uri}}'
      - name: run-dq
        type: call
        call: greatexpectations.validate
        with:
          suite: '{{resource_id}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: data-science
          text: 'Ingestion complete: {{resource_id}}. DQ: {{run-dq.success_percent}}%'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → research-data-lake-ingestion-pipeline.yml

Receives ServiceNow request, generates Terraform plans, runs security scans, applies infrastructure, registers in CMDB, and notifies requestor.

naftiko: '0.5'
info:
  label: Terraform Environment Provisioning Orchestrator
  description: Receives ServiceNow request, generates Terraform plans, runs security scans, applies infrastructure, registers in CMDB, and notifies requestor.
  tags:
  - devops
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: terraform_environment_provisioning_orche
      description: Orchestrate terraform environment provisioning orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-request
        with:
          request_id: '{{resource_id}}'
      - name: plan-infra
        type: call
        call: terraform.create-plan
        with:
          workspace: '{{get-request.workspace}}'
      - name: apply-infra
        type: call
        call: terraform.apply-plan
        with:
          plan_id: '{{plan-infra.plan_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: platform-eng
          text: 'Environment provisioned for {{resource_id}}: {{apply-infra.outputs}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → terraform-environment-provisioning-orchestrator.yml

When an FDA label change is required, retrieves the current label from SharePoint, creates a review task in ServiceNow for regulatory affairs, notifies medical writing in Microsoft Teams, and logs the change in Confluence for audit trail.

naftiko: '0.5'
info:
  label: Drug Label Update Workflow
  description: When an FDA label change is required, retrieves the current label from SharePoint, creates a review task in ServiceNow for regulatory affairs, notifies medical writing in Microsoft Teams, and logs the change in Confluence for audit trail.
  tags:
  - regulatory
  - drug-labeling
  - fda
  - sharepoint
  - servicenow
  - microsoft-teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: regulatory-labeling
    port: 8080
    tools:
    - name: initiate-label-update
      description: Given a product code and change reason, start the drug label update workflow across regulatory, medical writing, and QA systems.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: AbbVie product code.
      - name: ndc_code
        in: body
        type: string
        description: National Drug Code.
      - name: change_reason
        in: body
        type: string
        description: Reason for the label update (e.g., safety update, new indication).
      - name: priority
        in: body
        type: string
        description: 'Priority level: routine, urgent, safety.'
      steps:
      - name: get-current-label
        type: call
        call: sharepoint.list-folder
        with:
          site_id: regulatory_labels
          folder_path: Labels/{{product_code}}/Current
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Label update: {{product_code}} (NDC: {{ndc_code}}) — {{change_reason}}'
          assigned_group: Regulatory_Affairs
          category: label_update
          description: 'Product: {{product_code}}

            NDC: {{ndc_code}}

            Reason: {{change_reason}}

            Priority: {{priority}}

            Current label: {{get-current-label.folder_url}}'
      - name: notify-medical-writing
        type: call
        call: msteams.send-message
        with:
          channel: medical-writing
          text: 'Label Update Required: {{product_code}} ({{ndc_code}}). Reason: {{change_reason}}. Priority: {{priority}}. Task: {{create-review-task.number}}. Current label: {{get-current-label.folder_url}}'
      - name: log-change
        type: call
        call: confluence.create-page
        with:
          space_key: REGLABEL
          title: 'Label Change: {{product_code}} — {{create-review-task.number}}'
          body: 'Product: {{product_code}}

            NDC: {{ndc_code}}

            Reason: {{change_reason}}

            Priority: {{priority}}

            Task: {{create-review-task.number}}

            Initiated: {{create-review-task.created_at}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folder-contents
      path: /{{site_id}}/drive/root:/{{folder_path}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: list-folder
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://abbvie.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → drug-label-update-workflow.yml

Queries New Relic for application error rate metrics over a specified time window. Used by engineering teams to monitor error trends for AbbVie's patient portal and commercial applications.

naftiko: '0.5'
info:
  label: New Relic Application Error Rate
  description: Queries New Relic for application error rate metrics over a specified time window. Used by engineering teams to monitor error trends for AbbVie's patient portal and commercial applications.
  tags:
  - devops
  - apm
  - new-relic
  - error-monitoring
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-error-rate
      description: Query New Relic for application error rate by app ID and time window.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: New Relic application ID.
      - name: time_window
        in: body
        type: string
        description: Time window for the query (e.g., last_30_minutes).
      call: newrelic.get-app-metrics
      with:
        app_id: '{{app_id}}'
        time_window: '{{time_window}}'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
      header: Api-Key
    resources:
    - name: applications
      path: /applications/{{app_id}}/metrics/data.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-application-error-rate.yml

Retrieves invoice from SAP, matches against PO and goods receipt, flags discrepancies, routes for approval in ServiceNow, and posts journal entry.

naftiko: '0.5'
info:
  label: SAP Invoice Three-Way Match
  description: Retrieves invoice from SAP, matches against PO and goods receipt, flags discrepancies, routes for approval in ServiceNow, and posts journal entry.
  tags:
  - finance
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: sap_invoice_three_way_match
      description: Orchestrate sap invoice three-way match workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-invoice
        type: call
        call: sap.get-invoice
        with:
          invoice_id: '{{resource_id}}'
      - name: get-po
        type: call
        call: sap.get-purchase-order
        with:
          po_number: '{{get-invoice.po_number}}'
      - name: create-approval
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Invoice approval: {{resource_id}}'
          amount: '{{get-invoice.amount}}'
      - name: post-entry
        type: call
        call: sap.post-journal-entry
        with:
          invoice_id: '{{resource_id}}'
          status: '{{create-approval.state}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abbvie-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
Open in Framework → View in Fleet → sap-invoice-three-way-match.yml

Assigns a Pluralsight learning path to an employee for GxP training compliance, logs the assignment in PeopleSoft, and notifies the employee and their manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Pluralsight Learning Assignment
  description: Assigns a Pluralsight learning path to an employee for GxP training compliance, logs the assignment in PeopleSoft, and notifies the employee and their manager via Microsoft Teams.
  tags:
  - hr
  - training
  - learning
  - pluralsight
  - peoplesoft
  - microsoft-teams
  - gxp
capability:
  exposes:
  - type: mcp
    namespace: learning-mgmt
    port: 8080
    tools:
    - name: assign-learning-path
      description: Given an employee ID and learning path, create the Pluralsight assignment, log in PeopleSoft, and notify via Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: PeopleSoft employee ID.
      - name: learning_path_id
        in: body
        type: string
        description: Pluralsight learning path ID.
      - name: due_date
        in: body
        type: string
        description: Assignment due date (YYYY-MM-DD).
      - name: compliance_type
        in: body
        type: string
        description: Compliance category (e.g., GxP, SOX, HIPAA).
      steps:
      - name: get-employee
        type: call
        call: peoplesoft.get-employee
        with:
          employee_id: '{{employee_id}}'
      - name: create-assignment
        type: call
        call: pluralsight.assign-path
        with:
          user_email: '{{get-employee.work_email}}'
          path_id: '{{learning_path_id}}'
          due_date: '{{due_date}}'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'New training assignment: {{create-assignment.path_name}} ({{compliance_type}}). Due: {{due_date}}. Start here: {{create-assignment.url}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.manager_email}}'
          text: 'Training assigned to {{get-employee.full_name}}: {{create-assignment.path_name}} ({{compliance_type}}). Due: {{due_date}}.'
  consumes:
  - type: http
    namespace: peoplesoft
    baseUri: https://abbvie-hr.peoplesoft.com/api/v1
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: employees
      path: /employees/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-employee
        method: GET
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: assignments
      path: /assignments
      operations:
      - name: assign-path
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pluralsight-learning-assignment.yml

Runs schema comparison between Oracle and PostgreSQL, executes row count validation, generates diff report in Confluence, and creates Jira tasks.

naftiko: '0.5'
info:
  label: Database Migration Validation Pipeline
  description: Runs schema comparison between Oracle and PostgreSQL, executes row count validation, generates diff report in Confluence, and creates Jira tasks.
  tags:
  - data-engineering
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: database_migration_validation_pipeline
      description: Orchestrate database migration validation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: compare-schemas
        type: call
        call: oracle.get-schema
        with:
          table_name: '{{resource_id}}'
      - name: validate-counts
        type: call
        call: snowflake.run-query
        with:
          sql_query: SELECT COUNT(*) FROM {{resource_id}}
          warehouse: MIGRATION_WH
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space: DBA
          title: 'Migration report: {{resource_id}}'
      - name: create-tasks
        type: call
        call: jira.create-issue
        with:
          project: DBA
          summary: 'Migration validation: {{resource_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: jira
    baseUri: https://abbvie.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-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → database-migration-validation-pipeline.yml

Retrieves a ServiceNow incident by number and returns its state, priority, assigned group, and short description. Used across AbbVie IT teams for quick incident triage.

naftiko: '0.5'
info:
  label: ServiceNow Incident Lookup
  description: Retrieves a ServiceNow incident by number and returns its state, priority, assigned group, and short description. Used across AbbVie IT teams for quick incident triage.
  tags:
  - it-service
  - incident-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-service
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow incident by number.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-lookup.yml

On protocol amendment approval in Oracle CTMS, updates EDC metadata, revises SharePoint documents, files with IRB via Veeva, and notifies clinical ops.

naftiko: '0.5'
info:
  label: Clinical Protocol Amendment Workflow
  description: On protocol amendment approval in Oracle CTMS, updates EDC metadata, revises SharePoint documents, files with IRB via Veeva, and notifies clinical ops.
  tags:
  - clinical-trials
  - oracle
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: clinical_protocol_amendment_workflow
      description: Orchestrate clinical protocol amendment workflow workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-amendment
        type: call
        call: oracle.get-amendment
        with:
          amendment_id: '{{resource_id}}'
      - name: update-edc
        type: call
        call: edc.update-protocol
        with:
          protocol_id: '{{get-amendment.protocol_id}}'
          version: '{{get-amendment.version}}'
      - name: update-docs
        type: call
        call: sharepoint.update-document
        with:
          site_id: clinical
          path: protocols/{{get-amendment.protocol_id}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: clinical-ops
          text: 'Protocol amendment {{resource_id}} processed. Version: {{get-amendment.version}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → clinical-protocol-amendment-workflow.yml

Pulls Google Analytics campaign performance data for an AbbVie HCP marketing campaign and posts a summary to a Confluence page for the brand marketing team.

naftiko: '0.5'
info:
  label: Google Analytics Marketing Report
  description: Pulls Google Analytics campaign performance data for an AbbVie HCP marketing campaign and posts a summary to a Confluence page for the brand marketing team.
  tags:
  - marketing
  - analytics
  - google-analytics
  - confluence
  - hcp-marketing
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: generate-campaign-report
      description: Given a GA property ID and campaign name, pull performance metrics and create a Confluence report page.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: Google Analytics 4 property ID.
      - name: campaign_name
        in: body
        type: string
        description: Name of the HCP marketing campaign.
      - name: date_range
        in: body
        type: string
        description: Date range for the report (e.g., last_30_days).
      steps:
      - name: get-campaign-data
        type: call
        call: ga.run-report
        with:
          property_id: '{{property_id}}'
          campaign_name: '{{campaign_name}}'
          date_range: '{{date_range}}'
      - name: create-report-page
        type: call
        call: confluence.create-page
        with:
          space_key: MKT
          title: 'Campaign Report: {{campaign_name}} — {{date_range}}'
          body: 'Campaign: {{campaign_name}}

            Sessions: {{get-campaign-data.sessions}}

            Conversions: {{get-campaign-data.conversions}}

            Bounce Rate: {{get-campaign-data.bounce_rate}}

            Avg Session Duration: {{get-campaign-data.avg_session_duration}}'
  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: confluence
    baseUri: https://abbvie.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → google-analytics-marketing-report.yml

Retrieves the status and findings summary of a Qualys vulnerability scan by scan reference. Used by information security teams at AbbVie.

naftiko: '0.5'
info:
  label: Qualys Vulnerability Scan Status
  description: Retrieves the status and findings summary of a Qualys vulnerability scan by scan reference. Used by information security teams at AbbVie.
  tags:
  - security
  - qualys
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: get-scan-status
      description: Look up a Qualys vulnerability scan by reference ID.
      inputParameters:
      - name: scan_ref
        in: body
        type: string
        description: The Qualys scan reference.
      call: qualys.get-scan
      with:
        scan_ref: '{{scan_ref}}'
  consumes:
  - type: http
    namespace: qualys
    baseUri: https://qualysapi.qualys.com/api/2.0
    authentication:
      type: basic
      username: $secrets.qualys_user
      password: $secrets.qualys_password
    resources:
    - name: scans
      path: /fo/scan/{{scan_ref}}
      inputParameters:
      - name: scan_ref
        in: path
      operations:
      - name: get-scan
        method: GET
Open in Framework → View in Fleet → qualys-vulnerability-scan-status.yml

Retrieves application performance traces from Elastic APM by trace ID. Used to diagnose latency issues in AbbVie's microservices architecture.

naftiko: '0.5'
info:
  label: Elastic APM Trace Lookup
  description: Retrieves application performance traces from Elastic APM by trace ID. Used to diagnose latency issues in AbbVie's microservices architecture.
  tags:
  - observability
  - elastic
  - apm
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-trace
      description: Look up an Elastic APM trace by trace ID.
      inputParameters:
      - name: trace_id
        in: body
        type: string
        description: The distributed trace ID.
      call: elastic-apm.get-trace
      with:
        trace_id: '{{trace_id}}'
  consumes:
  - type: http
    namespace: elastic-apm
    baseUri: https://abbvie-elastic.com/api/apm
    authentication:
      type: bearer
      token: $secrets.elastic_api_key
    resources:
    - name: traces
      path: /traces/{{trace_id}}
      inputParameters:
      - name: trace_id
        in: path
      operations:
      - name: get-trace
        method: GET
Open in Framework → View in Fleet → elastic-apm-trace-lookup.yml

Retrieves a Dynamics 365 account record by ID. Used by AbbVie's market access and key account management teams to check payer and provider account details.

naftiko: '0.5'
info:
  label: Microsoft Dynamics 365 Account Lookup
  description: Retrieves a Dynamics 365 account record by ID. Used by AbbVie's market access and key account management teams to check payer and provider account details.
  tags:
  - crm
  - market-access
  - microsoft-dynamics-365
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-account
      description: Look up a Dynamics 365 account by ID.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Dynamics 365 account GUID.
      call: dynamics.get-account
      with:
        account_id: '{{account_id}}'
  consumes:
  - type: http
    namespace: dynamics
    baseUri: https://abbvie.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics_token
    resources:
    - name: accounts
      path: /accounts({{account_id}})
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → microsoft-dynamics-365-account-lookup.yml

Retrieves expiring contracts from SAP Ariba, pulls performance metrics from Snowflake, creates approval workflows in ServiceNow, and notifies procurement in Teams.

naftiko: '0.5'
info:
  label: Vendor Contract Renewal Orchestrator
  description: Retrieves expiring contracts from SAP Ariba, pulls performance metrics from Snowflake, creates approval workflows in ServiceNow, and notifies procurement in Teams.
  tags:
  - procurement
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: vendor_contract_renewal_orchestrator
      description: Orchestrate vendor contract renewal orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-contract
        type: call
        call: sap.get-contract
        with:
          contract_id: '{{resource_id}}'
      - name: get-performance
        type: call
        call: snowflake.run-query
        with:
          sql_query: SELECT * FROM vendor_performance WHERE contract_id = '{{resource_id}}'
          warehouse: PROC_WH
      - name: create-approval
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Contract renewal: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: procurement
          text: 'Contract {{resource_id}} renewal. Approval: {{create-approval.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abbvie-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-operation
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → vendor-contract-renewal-orchestrator.yml

Collects metrics from Google Analytics and Adobe Analytics, aggregates in Snowflake, refreshes Power BI, and sends a digest to marketing in Slack.

naftiko: '0.5'
info:
  label: Marketing Campaign Performance Aggregator
  description: Collects metrics from Google Analytics and Adobe Analytics, aggregates in Snowflake, refreshes Power BI, and sends a digest to marketing in Slack.
  tags:
  - marketing
  - google-analytics
  - adobe-analytics
  - snowflake
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: marketing_campaign_performance_aggregato
      description: Orchestrate marketing campaign performance aggregator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-ga-data
        type: call
        call: ga.get-report
        with:
          campaign_id: '{{resource_id}}'
      - name: get-adobe-data
        type: call
        call: adobe.get-report
        with:
          campaign_id: '{{resource_id}}'
      - name: aggregate
        type: call
        call: snowflake.run-query
        with:
          sql_query: INSERT INTO campaign_metrics SELECT * FROM staging WHERE campaign = '{{resource_id}}'
          warehouse: MARKETING_WH
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: marketing_campaigns
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: marketing-analytics
          text: Campaign {{resource_id}} metrics updated
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        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-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → marketing-campaign-performance-aggregator.yml

Queries active Prometheus alerts for a given alertname pattern. Used by SRE teams to check alert states for AbbVie's microservices running on Azure Kubernetes Service.

naftiko: '0.5'
info:
  label: Prometheus Alert Query
  description: Queries active Prometheus alerts for a given alertname pattern. Used by SRE teams to check alert states for AbbVie's microservices running on Azure Kubernetes Service.
  tags:
  - devops
  - monitoring
  - prometheus
  - sre
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-active-alerts
      description: Query Prometheus for active alerts matching a given alertname pattern.
      inputParameters:
      - name: alertname
        in: body
        type: string
        description: Alert name or pattern to query.
      call: prometheus.get-alerts
      with:
        alertname: '{{alertname}}'
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.abbvie.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: alerts
      path: /alerts
      inputParameters:
      - name: alertname
        in: query
      operations:
      - name: get-alerts
        method: GET
Open in Framework → View in Fleet → prometheus-alert-query.yml

Fetches the latest workflow run status from GitHub Actions for a given repository and branch. Used by engineering teams to check build health for AbbVie's internal tools and data pipelines.

naftiko: '0.5'
info:
  label: GitHub Actions CI Pipeline Status
  description: Fetches the latest workflow run status from GitHub Actions for a given repository and branch. Used by engineering teams to check build health for AbbVie's internal tools and data pipelines.
  tags:
  - devops
  - ci-cd
  - github
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: ci-cd
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Look up the latest GitHub Actions workflow run for a repository and branch.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository in owner/repo format.
      - name: branch
        in: body
        type: string
        description: Branch name to check.
      call: github.get-workflow-runs
      with:
        repo: '{{repo}}'
        branch: '{{branch}}'
  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
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: query
      operations:
      - name: get-workflow-runs
        method: GET
Open in Framework → View in Fleet → github-actions-ci-pipeline-status.yml

Queries ServiceNow CMDB for assets nearing EOL, retrieves warranty status, creates procurement requests, schedules decommission, and notifies IT ops.

naftiko: '0.5'
info:
  label: IT Asset Lifecycle Tracker
  description: Queries ServiceNow CMDB for assets nearing EOL, retrieves warranty status, creates procurement requests, schedules decommission, and notifies IT ops.
  tags:
  - it-operations
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: it_asset_lifecycle_tracker
      description: Orchestrate it asset lifecycle tracker workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-eol-assets
        type: call
        call: servicenow.get-cmdb-ci
        with:
          filter: eol_date<{{resource_id}}
      - name: check-warranty
        type: call
        call: servicenow.get-warranty
        with:
          asset_id: '{{get-eol-assets.asset_id}}'
      - name: create-procurement
        type: call
        call: jira.create-issue
        with:
          project: IT
          summary: 'Replace asset: {{get-eol-assets.name}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: it-ops
          text: 'EOL assets identified for {{resource_id}}. Procurement: {{create-procurement.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: jira
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → it-asset-lifecycle-tracker.yml

Exports clinical trial data from Oracle, transforms it via Apache NiFi, loads it into Elasticsearch for real-time querying, and notifies the biostatistics team in Microsoft Teams when the pipeline completes.

naftiko: '0.5'
info:
  label: Clinical Trial Data Export to Elasticsearch
  description: Exports clinical trial data from Oracle, transforms it via Apache NiFi, loads it into Elasticsearch for real-time querying, and notifies the biostatistics team in Microsoft Teams when the pipeline completes.
  tags:
  - clinical-data
  - data-pipeline
  - oracle
  - apache-nifi
  - elasticsearch
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-ops
    port: 8080
    tools:
    - name: export-trial-data
      description: Given a trial ID and data cutoff date, trigger the Oracle-to-Elasticsearch pipeline via NiFi and notify the biostatistics team.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: Clinical trial identifier.
      - name: cutoff_date
        in: body
        type: string
        description: Data cutoff date (YYYY-MM-DD).
      - name: target_index
        in: body
        type: string
        description: Elasticsearch index name for the exported data.
      steps:
      - name: trigger-nifi-flow
        type: call
        call: nifi.start-process-group
        with:
          process_group_id: clinical-export-{{trial_id}}
          parameters: '{"trial_id": "{{trial_id}}", "cutoff_date": "{{cutoff_date}}", "target_index": "{{target_index}}"}'
      - name: verify-index
        type: call
        call: elasticsearch.get-index-health
        with:
          index_name: '{{target_index}}'
      - name: notify-biostat
        type: call
        call: msteams.send-message
        with:
          channel: biostatistics
          text: 'Clinical data export complete: Trial {{trial_id}} (cutoff: {{cutoff_date}}). Index {{target_index}}: {{verify-index.status}} with {{verify-index.doc_count}} documents.'
  consumes:
  - type: http
    namespace: nifi
    baseUri: https://nifi.abbvie.com/nifi-api
    authentication:
      type: bearer
      token: $secrets.nifi_token
    resources:
    - name: process-groups
      path: /process-groups/{{process_group_id}}
      inputParameters:
      - name: process_group_id
        in: path
      operations:
      - name: start-process-group
        method: PUT
  - type: http
    namespace: elasticsearch
    baseUri: https://es.abbvie.com:9200
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: indices
      path: /_cluster/health/{{index_name}}
      inputParameters:
      - name: index_name
        in: path
      operations:
      - name: get-index-health
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-data-export-to-elasticsearch.yml

Queries Azure Kubernetes Service for pod status in a given namespace. Used by platform engineering to monitor microservices health for AbbVie's digital health applications.

naftiko: '0.5'
info:
  label: Kubernetes Pod Health Check
  description: Queries Azure Kubernetes Service for pod status in a given namespace. Used by platform engineering to monitor microservices health for AbbVie's digital health applications.
  tags:
  - devops
  - kubernetes
  - azure-kubernetes-service
  - platform-engineering
capability:
  exposes:
  - type: mcp
    namespace: k8s-ops
    port: 8080
    tools:
    - name: get-pod-status
      description: List pods and their statuses in an AKS namespace.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: Kubernetes namespace to query.
      call: aks.list-pods
      with:
        namespace: '{{namespace}}'
  consumes:
  - type: http
    namespace: aks
    baseUri: https://abbvie-aks.hcp.eastus.azmk8s.io
    authentication:
      type: bearer
      token: $secrets.aks_token
    resources:
    - name: pods
      path: /api/v1/namespaces/{{namespace}}/pods
      inputParameters:
      - name: namespace
        in: path
      operations:
      - name: list-pods
        method: GET
Open in Framework → View in Fleet → kubernetes-pod-health-check.yml

Extracts master data changes from SAP MDG, validates via Informatica, synchronizes downstream, logs quality scores in Alation, and reports to stewards.

naftiko: '0.5'
info:
  label: Master Data Governance Pipeline
  description: Extracts master data changes from SAP MDG, validates via Informatica, synchronizes downstream, logs quality scores in Alation, and reports to stewards.
  tags:
  - data-governance
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: master_data_governance_pipeline
      description: Orchestrate master data governance pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-changes
        type: call
        call: sap.get-mdg-changes
        with:
          domain: '{{resource_id}}'
      - name: validate
        type: call
        call: informatica.run-dq-rules
        with:
          domain: '{{resource_id}}'
      - name: sync-downstream
        type: call
        call: snowflake.run-query
        with:
          sql_query: CALL sync_master_data('{{resource_id}}')
          warehouse: MDG_WH
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: data-governance
          text: 'MDG sync for {{resource_id}}: {{validate.quality_score}}% quality'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abbvie-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-operation
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → master-data-governance-pipeline.yml

Reconciles clinical trial data between the EDC system and Snowflake warehouse, logs discrepancies in ServiceNow, and alerts the data management team in Slack.

naftiko: '0.5'
info:
  label: Clinical Data Reconciliation Pipeline
  description: Reconciles clinical trial data between the EDC system and Snowflake warehouse, logs discrepancies in ServiceNow, and alerts the data management team in Slack.
  tags:
  - clinical-trials
  - data-management
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: clinical_data_reconciliation_pipeline
      description: Orchestrate clinical data reconciliation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-edc-counts
        type: call
        call: edc.get-subject-counts
        with:
          trial_id: '{{resource_id}}'
      - name: get-wh-counts
        type: call
        call: snowflake.run-query
        with:
          sql_query: SELECT COUNT(*) FROM subjects WHERE trial_id = '{{resource_id}}'
          warehouse: CLINICAL_WH
      - name: log-discrepancy
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Data reconciliation: {{resource_id}}'
          category: data_quality
      - name: notify-team
        type: call
        call: slack.send-message
        with:
          channel: clinical-data-ops
          text: 'Reconciliation for {{resource_id}} complete. Ticket: {{log-discrepancy.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → clinical-data-reconciliation-pipeline.yml

Retrieves details about a PagerDuty incident by ID including current status, assignees, and escalation level. Used by on-call engineers at AbbVie.

naftiko: '0.5'
info:
  label: PagerDuty Incident Lookup
  description: Retrieves details about a PagerDuty incident by ID including current status, assignees, and escalation level. Used by on-call engineers at AbbVie.
  tags:
  - devops
  - pagerduty
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: incident-mgmt
    port: 8080
    tools:
    - name: get-incident
      description: Look up a PagerDuty incident by ID.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The PagerDuty incident ID.
      call: pagerduty.get-incident
      with:
        incident_id: '{{incident_id}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → pagerduty-incident-lookup.yml

Executes a read-only SQL query against AbbVie's Snowflake data warehouse and returns results. Used by analytics teams for ad-hoc reporting on clinical and commercial data.

naftiko: '0.5'
info:
  label: Snowflake Query Runner
  description: Executes a read-only SQL query against AbbVie's Snowflake data warehouse and returns results. Used by analytics teams for ad-hoc reporting on clinical and commercial data.
  tags:
  - data
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-query
      description: Execute a SQL query against Snowflake and return the result set.
      inputParameters:
      - name: sql_query
        in: body
        type: string
        description: The SQL query to execute.
      - name: warehouse
        in: body
        type: string
        description: Snowflake warehouse name.
      call: snowflake.run-query
      with:
        sql_query: '{{sql_query}}'
        warehouse: '{{warehouse}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-query-runner.yml

Retrieves MongoDB Atlas cluster status and metrics. Used by data engineering teams to monitor NoSQL databases supporting AbbVie's real-world evidence and patient registry platforms.

naftiko: '0.5'
info:
  label: MongoDB Atlas Cluster Status
  description: Retrieves MongoDB Atlas cluster status and metrics. Used by data engineering teams to monitor NoSQL databases supporting AbbVie's real-world evidence and patient registry platforms.
  tags:
  - data-engineering
  - database
  - mongodb
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: database-ops
    port: 8080
    tools:
    - name: get-cluster-status
      description: Look up MongoDB Atlas cluster status by project and cluster name.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: MongoDB Atlas project ID.
      - name: cluster_name
        in: body
        type: string
        description: Atlas cluster name.
      call: mongodb.get-cluster
      with:
        project_id: '{{project_id}}'
        cluster_name: '{{cluster_name}}'
  consumes:
  - type: http
    namespace: mongodb
    baseUri: https://cloud.mongodb.com/api/atlas/v2
    authentication:
      type: basic
      username: $secrets.mongodb_atlas_public_key
      password: $secrets.mongodb_atlas_private_key
    resources:
    - name: clusters
      path: /groups/{{project_id}}/clusters/{{cluster_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: cluster_name
        in: path
      operations:
      - name: get-cluster
        method: GET
Open in Framework → View in Fleet → mongodb-atlas-cluster-status.yml

On new patient enrollment, verifies insurance, creates Salesforce Health Cloud record, provisions a ServiceNow case, and sends confirmation via Twilio.

naftiko: '0.5'
info:
  label: Patient Hub Enrollment Orchestrator
  description: On new patient enrollment, verifies insurance, creates Salesforce Health Cloud record, provisions a ServiceNow case, and sends confirmation via Twilio.
  tags:
  - patient-services
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: patient_hub_enrollment_orchestrator
      description: Orchestrate patient hub enrollment orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: verify-insurance
        type: call
        call: availity.check-eligibility
        with:
          patient_id: '{{resource_id}}'
      - name: create-record
        type: call
        call: salesforce.create-patient
        with:
          patient_id: '{{resource_id}}'
          eligibility: '{{verify-insurance.status}}'
      - name: create-case
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Patient enrollment: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: patient-services
          text: 'Patient {{resource_id}} enrolled. Case: {{create-case.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → patient-hub-enrollment-orchestrator.yml

Retrieves batch record data from Oracle E-Business Suite, validates against SAP BW quality metrics, and creates a QA review task in ServiceNow for GMP compliance sign-off.

naftiko: '0.5'
info:
  label: Manufacturing Batch Record Review
  description: Retrieves batch record data from Oracle E-Business Suite, validates against SAP BW quality metrics, and creates a QA review task in ServiceNow for GMP compliance sign-off.
  tags:
  - manufacturing
  - quality
  - gmp
  - oracle-ebs
  - sap-bw
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-qa
    port: 8080
    tools:
    - name: review-batch-record
      description: Given a batch number and product code, pull batch record from Oracle EBS, validate quality metrics from SAP BW, and create a QA review task.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: Manufacturing batch number.
      - name: product_code
        in: body
        type: string
        description: Product code for the manufactured drug.
      - name: manufacturing_site
        in: body
        type: string
        description: Manufacturing site identifier.
      steps:
      - name: get-batch-record
        type: call
        call: oracle-ebs.get-batch
        with:
          batch_number: '{{batch_number}}'
      - name: get-quality-metrics
        type: call
        call: sap-bw.get-quality-report
        with:
          batch_number: '{{batch_number}}'
          product_code: '{{product_code}}'
      - name: create-qa-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Batch review: {{batch_number}} — {{product_code}} at {{manufacturing_site}}'
          description: 'Batch: {{batch_number}}

            Product: {{product_code}}

            Site: {{manufacturing_site}}

            Yield: {{get-batch-record.yield_percent}}%

            Status: {{get-batch-record.status}}

            Quality Score: {{get-quality-metrics.overall_score}}

            Deviations: {{get-quality-metrics.deviation_count}}'
          assigned_group: QA_Manufacturing
          category: batch_review
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://abbvie-ebs.oraclecloud.com/api/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: batches
      path: /manufacturing/batches/{{batch_number}}
      inputParameters:
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: sap-bw
    baseUri: https://abbvie-bw.sap.com/sap/opu/odata/sap/QUALITY_METRICS_SRV
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: quality-reports
      path: /QualityReports(Batch='{{batch_number}}',Product='{{product_code}}')
      inputParameters:
      - name: batch_number
        in: path
      - name: product_code
        in: path
      operations:
      - name: get-quality-report
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → manufacturing-batch-record-review.yml

Retrieves the current status and details of a Datadog monitor by ID. Used by DevOps and SRE teams to quickly check infrastructure alert states for AbbVie's cloud environments.

naftiko: '0.5'
info:
  label: Datadog Alert Lookup
  description: Retrieves the current status and details of a Datadog monitor by ID. Used by DevOps and SRE teams to quickly check infrastructure alert states for AbbVie's cloud environments.
  tags:
  - devops
  - monitoring
  - datadog
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-monitor-status
      description: Look up a Datadog monitor by ID and return its current status, name, and last triggered timestamp.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog 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: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-alert-lookup.yml

Extracts claims data from Teradata, links to clinical outcomes in Snowflake, runs models via Databricks, and notifies the HEOR team in Teams.

naftiko: '0.5'
info:
  label: Real World Evidence Data Pipeline
  description: Extracts claims data from Teradata, links to clinical outcomes in Snowflake, runs models via Databricks, and notifies the HEOR team in Teams.
  tags:
  - heor
  - teradata
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: real_world_evidence_data_pipeline
      description: Orchestrate real world evidence data pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: extract-claims
        type: call
        call: teradata.run-query
        with:
          sql_query: SELECT * FROM claims WHERE study = '{{resource_id}}'
      - name: link-outcomes
        type: call
        call: snowflake.run-query
        with:
          sql_query: SELECT * FROM outcomes WHERE study = '{{resource_id}}'
          warehouse: HEOR_WH
      - name: run-model
        type: call
        call: databricks.run-job
        with:
          job_id: rwe_{{resource_id}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: heor
          text: RWE pipeline complete for {{resource_id}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → real-world-evidence-data-pipeline.yml

Ingests biomarker results from LIMS, maps to clinical subjects in EDC, loads into Snowflake, and publishes to the biomarker Tableau dashboard.

naftiko: '0.5'
info:
  label: Biomarker Data Integration Pipeline
  description: Ingests biomarker results from LIMS, maps to clinical subjects in EDC, loads into Snowflake, and publishes to the biomarker Tableau dashboard.
  tags:
  - clinical-trials
  - lims
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: biomarker_data_integration_pipeline
      description: Orchestrate biomarker data integration pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-results
        type: call
        call: lims.get-assay-results
        with:
          assay_id: '{{resource_id}}'
      - name: map-subjects
        type: call
        call: edc.get-subject-mapping
        with:
          assay_id: '{{resource_id}}'
      - name: load-data
        type: call
        call: snowflake.load-data
        with:
          source_ref: '{{get-results.data_uri}}'
          schema: biomarkers
      - name: refresh-dash
        type: call
        call: tableau.refresh-extract
        with:
          workbook_id: biomarker_analytics
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://abbvie-tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: tableau-operation
        method: POST
Open in Framework → View in Fleet → biomarker-data-integration-pipeline.yml

Retrieves employee profile information from Workday by employee ID. Used by HR teams at AbbVie to verify employment details and org structure.

naftiko: '0.5'
info:
  label: Workday Employee Lookup
  description: Retrieves employee profile information from Workday by employee ID. Used by HR teams at AbbVie to verify employment details and org structure.
  tags:
  - hr
  - workday
  - employee-data
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-employee
      description: Look up a Workday employee by ID and return profile details.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-employee
      with:
        employee_id: '{{employee_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-employee
        method: GET
Open in Framework → View in Fleet → workday-employee-lookup.yml

Monitors clinical supply in SAP, identifies at-risk sites, generates transfer orders, creates ServiceNow logistics tickets, and alerts supply management via Teams.

naftiko: '0.5'
info:
  label: Clinical Supply Chain Rebalancing
  description: Monitors clinical supply in SAP, identifies at-risk sites, generates transfer orders, creates ServiceNow logistics tickets, and alerts supply management via Teams.
  tags:
  - clinical-supply
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: clinical_supply_chain_rebalancing
      description: Orchestrate clinical supply chain rebalancing workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: check-inventory
        type: call
        call: sap.get-inventory
        with:
          material_id: '{{resource_id}}'
      - name: identify-risks
        type: call
        call: snowflake.run-query
        with:
          sql_query: SELECT * FROM supply_forecast WHERE material = '{{resource_id}}'
          warehouse: SUPPLY_WH
      - name: create-transfer
        type: call
        call: sap.create-transfer-order
        with:
          material_id: '{{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: clinical-supply
          text: Rebalancing initiated for {{resource_id}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abbvie-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → clinical-supply-chain-rebalancing.yml

Checks certificate expiration in Kong, generates new certs via Azure Key Vault, deploys to gateway, validates via Postman, and logs in ServiceNow.

naftiko: '0.5'
info:
  label: API Gateway Certificate Rotation
  description: Checks certificate expiration in Kong, generates new certs via Azure Key Vault, deploys to gateway, validates via Postman, and logs in ServiceNow.
  tags:
  - devops
  - kong
  - azure
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: api_gateway_certificate_rotation
      description: Orchestrate api gateway certificate rotation workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: check-cert
        type: call
        call: kong.get-certificate
        with:
          cert_id: '{{resource_id}}'
      - name: generate-cert
        type: call
        call: keyvault.create-certificate
        with:
          name: '{{resource_id}}'
      - name: deploy-cert
        type: call
        call: kong.update-certificate
        with:
          cert_id: '{{resource_id}}'
          cert_data: '{{generate-cert.value}}'
      - name: log-rotation
        type: call
        call: servicenow.create-record
        with:
          table: cert_rotations
          cert_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
Open in Framework → View in Fleet → api-gateway-certificate-rotation.yml

Retrieves a secret value from Azure Key Vault by name and version. Used by DevOps pipelines to access configuration secrets securely.

naftiko: '0.5'
info:
  label: Azure Key Vault Secret Retrieval
  description: Retrieves a secret value from Azure Key Vault by name and version. Used by DevOps pipelines to access configuration secrets securely.
  tags:
  - security
  - azure
  - key-vault
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: get-secret
      description: Retrieve a secret from Azure Key Vault by name.
      inputParameters:
      - name: vault_name
        in: body
        type: string
        description: The Key Vault name.
      - name: secret_name
        in: body
        type: string
        description: The secret name.
      call: keyvault.get-secret
      with:
        vault_name: '{{vault_name}}'
        secret_name: '{{secret_name}}'
  consumes:
  - type: http
    namespace: keyvault
    baseUri: https://{{vault_name}}.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_kv_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}
      inputParameters:
      - name: secret_name
        in: path
      operations:
      - name: get-secret
        method: GET
Open in Framework → View in Fleet → azure-key-vault-secret-retrieval.yml

Retrieves recent WAF events from Cloudflare for a given zone, filters by rule ID, and creates a security incident in ServiceNow if attack patterns are detected against AbbVie's public-facing applications.

naftiko: '0.5'
info:
  label: Cloudflare WAF Event Investigation
  description: Retrieves recent WAF events from Cloudflare for a given zone, filters by rule ID, and creates a security incident in ServiceNow if attack patterns are detected against AbbVie's public-facing applications.
  tags:
  - security
  - web-application-firewall
  - cloudflare
  - servicenow
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: web-security
    port: 8080
    tools:
    - name: investigate-waf-events
      description: Given a Cloudflare zone ID and rule ID, retrieve WAF events and escalate to ServiceNow if thresholds are exceeded.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      - name: rule_id
        in: body
        type: string
        description: WAF rule ID to investigate.
      - name: time_range
        in: body
        type: string
        description: Time range for event lookup (e.g., last_1_hour).
      steps:
      - name: get-waf-events
        type: call
        call: cloudflare.get-firewall-events
        with:
          zone_id: '{{zone_id}}'
          rule_id: '{{rule_id}}'
          time_range: '{{time_range}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'WAF Alert: Rule {{rule_id}} triggered on zone {{zone_id}}'
          category: security_incident
          assigned_group: Security_Operations
          urgency: '2'
          description: 'Cloudflare WAF rule {{rule_id}} triggered {{get-waf-events.event_count}} times in {{time_range}}. Top source IPs: {{get-waf-events.top_source_ips}}. Zone: {{zone_id}}.'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: firewall-events
      path: /zones/{{zone_id}}/firewall/events
      inputParameters:
      - name: zone_id
        in: path
      - name: rule_id
        in: query
      - name: time_range
        in: query
      operations:
      - name: get-firewall-events
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → cloudflare-waf-event-investigation.yml

Checks the status of a Veritas NetBackup job for GxP-validated system backups. Used by infrastructure teams to verify backup compliance for FDA-regulated environments.

naftiko: '0.5'
info:
  label: Veritas NetBackup Job Status
  description: Checks the status of a Veritas NetBackup job for GxP-validated system backups. Used by infrastructure teams to verify backup compliance for FDA-regulated environments.
  tags:
  - infrastructure
  - backup
  - veritas-netbackup
  - compliance
  - gxp
capability:
  exposes:
  - type: mcp
    namespace: backup-ops
    port: 8080
    tools:
    - name: get-backup-status
      description: Look up a NetBackup job by ID and return its status, start time, and data transferred.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: Veritas NetBackup job ID.
      call: netbackup.get-job
      with:
        job_id: '{{job_id}}'
  consumes:
  - type: http
    namespace: netbackup
    baseUri: https://netbackup.abbvie.com/netbackup/admin/v3
    authentication:
      type: bearer
      token: $secrets.netbackup_token
    resources:
    - name: jobs
      path: /jobs/{{job_id}}
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: get-job
        method: GET
Open in Framework → View in Fleet → veritas-netbackup-job-status.yml

Extracts GL data from SAP S/4HANA, validates against business rules, loads into Snowflake, triggers Power BI refresh, and logs sync status in ServiceNow.

naftiko: '0.5'
info:
  label: SAP to Snowflake Financial Sync
  description: Extracts GL data from SAP S/4HANA, validates against business rules, loads into Snowflake, triggers Power BI refresh, and logs sync status in ServiceNow.
  tags:
  - finance
  - sap
  - snowflake
  - power-bi
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: sap_to_snowflake_financial_sync
      description: Orchestrate sap to snowflake financial sync workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: extract-gl
        type: call
        call: sap.extract-gl-data
        with:
          period: '{{resource_id}}'
      - name: load-snowflake
        type: call
        call: snowflake.load-data
        with:
          source_ref: '{{extract-gl.file_uri}}'
          schema: finance
      - name: refresh-bi
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: financial_reporting
      - name: log-sync
        type: call
        call: servicenow.create-record
        with:
          table: data_syncs
          period: '{{resource_id}}'
          status: complete
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abbvie-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-operation
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        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-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
Open in Framework → View in Fleet → sap-to-snowflake-financial-sync.yml

Queries overdue training from Cornerstone LMS, looks up managers in Workday, sends reminders via Outlook, escalates to HR in ServiceNow, and reports in Power BI.

naftiko: '0.5'
info:
  label: Compliance Training Enforcement Pipeline
  description: Queries overdue training from Cornerstone LMS, looks up managers in Workday, sends reminders via Outlook, escalates to HR in ServiceNow, and reports in Power BI.
  tags:
  - compliance
  - workday
  - servicenow
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: compliance_training_enforcement_pipeline
      description: Orchestrate compliance training enforcement pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-overdue
        type: call
        call: cornerstone.get-overdue-training
        with:
          department: '{{resource_id}}'
      - name: get-managers
        type: call
        call: workday.get-managers
        with:
          department: '{{resource_id}}'
      - name: escalate
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Overdue training: {{resource_id}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: compliance_training
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → compliance-training-enforcement-pipeline.yml

Queries AWS Cost Explorer for anomalies, cross-references Azure costs, creates a Jira ticket, updates Grafana dashboard, and alerts the cloud team in Teams.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Detector
  description: Queries AWS Cost Explorer for anomalies, cross-references Azure costs, creates a Jira ticket, updates Grafana dashboard, and alerts the cloud team in Teams.
  tags:
  - finops
  - aws
  - jira
  - grafana
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: cloud_cost_anomaly_detector
      description: Orchestrate cloud cost anomaly detector workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-aws-costs
        type: call
        call: aws.get-cost-report
        with:
          date_range: '{{resource_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: FINOPS
          summary: 'Cost anomaly detected: {{resource_id}}'
      - name: update-dashboard
        type: call
        call: grafana.annotate
        with:
          dashboard_uid: finops
          text: 'Anomaly: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: cloud-finops
          text: 'Cost anomaly for {{resource_id}}. Ticket: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: grafana
    baseUri: https://abbvie-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-detector.yml

When a new lead is captured in HubSpot from AbbVie's patient or HCP website, syncs the contact to Salesforce and notifies the commercial team in Microsoft Teams.

naftiko: '0.5'
info:
  label: HubSpot Lead Capture to Salesforce
  description: When a new lead is captured in HubSpot from AbbVie's patient or HCP website, syncs the contact to Salesforce and notifies the commercial team in Microsoft Teams.
  tags:
  - marketing
  - lead-management
  - hubspot
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lead-mgmt
    port: 8080
    tools:
    - name: sync-lead
      description: Given a HubSpot contact ID, sync the lead to Salesforce and notify the commercial team.
      inputParameters:
      - name: hubspot_contact_id
        in: body
        type: string
        description: HubSpot contact ID.
      - name: campaign_source
        in: body
        type: string
        description: Marketing campaign that generated the 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.first_name}}'
          last_name: '{{get-hubspot-contact.last_name}}'
          email: '{{get-hubspot-contact.email}}'
          company: '{{get-hubspot-contact.company}}'
          lead_source: '{{campaign_source}}'
      - name: notify-commercial
        type: call
        call: msteams.send-message
        with:
          channel: commercial-leads
          text: 'New lead synced: {{get-hubspot-contact.first_name}} {{get-hubspot-contact.last_name}} ({{get-hubspot-contact.company}}). Source: {{campaign_source}}. Salesforce ID: {{create-salesforce-lead.id}}.'
  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://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: create-lead
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hubspot-lead-capture-to-salesforce.yml

Extracts prescription data from IQVIA, blends with Salesforce CRM data, loads into Snowflake, triggers Tableau refresh, and publishes dashboards.

naftiko: '0.5'
info:
  label: Commercial Analytics Refresh Pipeline
  description: Extracts prescription data from IQVIA, blends with Salesforce CRM data, loads into Snowflake, triggers Tableau refresh, and publishes dashboards.
  tags:
  - commercial
  - salesforce
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: commercial_analytics_refresh_pipeline
      description: Orchestrate commercial analytics refresh pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: extract-rx
        type: call
        call: iqvia.get-rx-data
        with:
          product_id: '{{resource_id}}'
      - name: get-crm-data
        type: call
        call: salesforce.get-territory-data
        with:
          product_id: '{{resource_id}}'
      - name: load-data
        type: call
        call: snowflake.load-data
        with:
          source_ref: '{{extract-rx.data_uri}}'
          schema: commercial
      - name: refresh-tableau
        type: call
        call: tableau.refresh-extract
        with:
          workbook_id: commercial_insights
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-operation
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://abbvie-tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: tableau-operation
        method: POST
Open in Framework → View in Fleet → commercial-analytics-refresh-pipeline.yml

Monitors document readiness in Veeva Vault, validates against checklists in SharePoint, submits to the eCTD gateway, and logs status in ServiceNow.

naftiko: '0.5'
info:
  label: Regulatory Document Submission Tracker
  description: Monitors document readiness in Veeva Vault, validates against checklists in SharePoint, submits to the eCTD gateway, and logs status in ServiceNow.
  tags:
  - regulatory
  - veeva
  - sharepoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: regulatory_document_submission_tracker
      description: Orchestrate regulatory document submission tracker workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-docs
        type: call
        call: veeva.get-submission-docs
        with:
          submission_id: '{{resource_id}}'
      - name: validate
        type: call
        call: sharepoint.get-checklist
        with:
          site_id: regulatory
          path: checklists/{{resource_id}}
      - name: submit
        type: call
        call: ectd.submit-package
        with:
          submission_id: '{{resource_id}}'
      - name: log-status
        type: call
        call: servicenow.create-record
        with:
          table: regulatory_submissions
          submission_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
Open in Framework → View in Fleet → regulatory-document-submission-tracker.yml

On approval of a new clinical trial site in Oracle, creates a ServiceNow activation ticket, provisions a SharePoint document library for site files, and notifies the clinical operations team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Site Activation Orchestrator
  description: On approval of a new clinical trial site in Oracle, creates a ServiceNow activation ticket, provisions a SharePoint document library for site files, and notifies the clinical operations team in Microsoft Teams.
  tags:
  - clinical-trials
  - site-activation
  - oracle
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: activate-trial-site
      description: Given an Oracle clinical trial ID and site code, orchestrate site activation across ServiceNow, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: The Oracle clinical trial identifier.
      - name: site_code
        in: body
        type: string
        description: The investigator site code.
      - name: principal_investigator
        in: body
        type: string
        description: Name of the principal investigator at the site.
      steps:
      - name: get-trial
        type: call
        call: oracle.get-trial
        with:
          trial_id: '{{trial_id}}'
      - name: open-activation-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Site activation: {{site_code}} for trial {{get-trial.trial_name}}'
          category: clinical_site_activation
          assigned_group: Clinical_Ops
          description: 'Activate site {{site_code}} for trial {{trial_id}} ({{get-trial.trial_name}}). PI: {{principal_investigator}}. Phase: {{get-trial.phase}}.'
      - name: provision-site-library
        type: call
        call: sharepoint.create-folder
        with:
          site_id: clinical_trials_site
          folder_path: Trials/{{trial_id}}/Sites/{{site_code}}
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: clinical-operations
          text: 'Site {{site_code}} activated for trial {{get-trial.trial_name}} (PI: {{principal_investigator}}). Ticket: {{open-activation-ticket.number}}. Documents: {{provision-site-library.url}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://abbvie-cloud.oraclecloud.com/api/v1/clinical
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: trials
      path: /trials/{{trial_id}}
      inputParameters:
      - name: trial_id
        in: path
      operations:
      - name: get-trial
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/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: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-site-activation-orchestrator.yml

Queries Redis cluster info to check memory usage, connected clients, and replication status. Used by platform teams to monitor caching layers for AbbVie's high-throughput applications.

naftiko: '0.5'
info:
  label: Redis Cache Health Check
  description: Queries Redis cluster info to check memory usage, connected clients, and replication status. Used by platform teams to monitor caching layers for AbbVie's high-throughput applications.
  tags:
  - devops
  - caching
  - redis
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: cache-ops
    port: 8080
    tools:
    - name: get-cache-health
      description: Retrieve Redis cluster health metrics including memory, clients, and replication status.
      inputParameters:
      - name: cluster_endpoint
        in: body
        type: string
        description: Redis cluster endpoint identifier.
      call: redis.get-info
      with:
        cluster_endpoint: '{{cluster_endpoint}}'
  consumes:
  - type: http
    namespace: redis
    baseUri: https://redis-mgmt.abbvie.com/api/v1
    authentication:
      type: bearer
      token: $secrets.redis_mgmt_token
    resources:
    - name: cluster-info
      path: /clusters/{{cluster_endpoint}}/info
      inputParameters:
      - name: cluster_endpoint
        in: path
      operations:
      - name: get-info
        method: GET
Open in Framework → View in Fleet → redis-cache-health-check.yml

Retrieves a snapshot of a Grafana dashboard by UID. Used by SRE teams to review infrastructure and application metrics for AbbVie's cloud environments.

naftiko: '0.5'
info:
  label: Grafana Dashboard Viewer
  description: Retrieves a snapshot of a Grafana dashboard by UID. Used by SRE teams to review infrastructure and application metrics for AbbVie's cloud environments.
  tags:
  - monitoring
  - grafana
  - observability
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-dashboard
      description: Retrieve a Grafana dashboard by UID and return panel data.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: The Grafana dashboard UID.
      call: grafana.get-dashboard
      with:
        dashboard_uid: '{{dashboard_uid}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://abbvie-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: dashboards
      path: /dashboards/uid/{{dashboard_uid}}
      inputParameters:
      - name: dashboard_uid
        in: path
      operations:
      - name: get-dashboard
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-viewer.yml

When a patient applies for AbbVie's assistance program, verifies eligibility via Salesforce, creates a case in ServiceNow, stores consent documents in Box, and sends confirmation via Microsoft Teams to the patient services team.

naftiko: '0.5'
info:
  label: Patient Assistance Program Enrollment
  description: When a patient applies for AbbVie's assistance program, verifies eligibility via Salesforce, creates a case in ServiceNow, stores consent documents in Box, and sends confirmation via Microsoft Teams to the patient services team.
  tags:
  - patient-services
  - enrollment
  - salesforce
  - servicenow
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: patient-services
    port: 8080
    tools:
    - name: enroll-patient
      description: Given a patient application, verify eligibility, create a case, store documents, and notify the patient services team.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: Anonymized patient identifier.
      - name: program_code
        in: body
        type: string
        description: Assistance program code.
      - name: product_name
        in: body
        type: string
        description: AbbVie product the patient needs assistance with.
      - name: prescriber_npi
        in: body
        type: string
        description: Prescribing physician NPI number.
      steps:
      - name: check-eligibility
        type: call
        call: salesforce.get-eligibility
        with:
          patient_id: '{{patient_id}}'
          program_code: '{{program_code}}'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'PAP Enrollment: {{patient_id}} — {{product_name}}'
          category: patient_assistance
          assigned_group: Patient_Services
          description: 'Patient: {{patient_id}}. Program: {{program_code}}. Product: {{product_name}}. Prescriber NPI: {{prescriber_npi}}. Eligibility: {{check-eligibility.status}}.'
      - name: store-consent
        type: call
        call: box.create-folder
        with:
          parent_folder_id: patient_assistance_root
          folder_name: PAP_{{patient_id}}_{{program_code}}
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: patient-services
          text: 'PAP Enrollment: Patient {{patient_id}} for {{product_name}} ({{program_code}}). Eligibility: {{check-eligibility.status}}. Case: {{create-case.number}}. Docs: {{store-consent.url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: eligibility
      path: /sobjects/Eligibility__c/{{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-eligibility
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-assistance-program-enrollment.yml

Monitors cluster utilization via Prometheus, evaluates scaling policies, applies HPA adjustments, logs changes in ServiceNow, and notifies platform team in Slack.

naftiko: '0.5'
info:
  label: Kubernetes Cluster Scaling Orchestrator
  description: Monitors cluster utilization via Prometheus, evaluates scaling policies, applies HPA adjustments, logs changes in ServiceNow, and notifies platform team in Slack.
  tags:
  - devops
  - prometheus
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: kubernetes_cluster_scaling_orchestrator
      description: Orchestrate kubernetes cluster scaling orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-metrics
        type: call
        call: prometheus.query
        with:
          query: cluster_cpu_utilization{cluster='{{resource_id}}'}
      - name: apply-scaling
        type: call
        call: k8s.patch-hpa
        with:
          namespace: '{{resource_id}}'
          replicas: '{{get-metrics.recommended}}'
      - name: log-change
        type: call
        call: servicenow.create-record
        with:
          table: scaling_events
          cluster: '{{resource_id}}'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: platform-eng
          text: 'Cluster {{resource_id}} scaled. New replicas: {{get-metrics.recommended}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → kubernetes-cluster-scaling-orchestrator.yml

Retrieves the current status and details of a Jira issue by key. Used by engineering teams at AbbVie to check ticket progress and sprint assignments.

naftiko: '0.5'
info:
  label: Jira Issue Lookup
  description: Retrieves the current status and details of a Jira issue by key. Used by engineering teams at AbbVie to check ticket progress and sprint assignments.
  tags:
  - devops
  - jira
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: project-mgmt
    port: 8080
    tools:
    - name: get-issue
      description: Look up a Jira issue by key and return its status, assignee, and summary.
      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}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abbvie.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-lookup.yml

Retrieves a Zendesk support ticket by ID including status, priority, assignee, and subject. Used by AbbVie patient services and IT help desk teams.

naftiko: '0.5'
info:
  label: Zendesk Support Ticket Lookup
  description: Retrieves a Zendesk support ticket by ID including status, priority, assignee, and subject. Used by AbbVie patient services and IT help desk teams.
  tags:
  - support
  - customer-service
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: support
    port: 8080
    tools:
    - name: get-ticket
      description: Look up a Zendesk ticket by ID and return its status, priority, assignee, and subject.
      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://abbvie.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-support-ticket-lookup.yml

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

naftiko: '0.5'
info:
  label: Expense Report Processing
  description: Retrieves submitted expense reports from SAP Concur, validates against PeopleSoft cost center data, and opens a ServiceNow task for finance review when policy exceptions are detected.
  tags:
  - finance
  - expense
  - sap-concur
  - peoplesoft
  - servicenow
  - policy-compliance
capability:
  exposes:
  - type: mcp
    namespace: finance-expense
    port: 8080
    tools:
    - name: review-expense-report
      description: Given a Concur expense report ID and employee ID, fetch the report details, validate cost center against PeopleSoft, and flag policy violations to ServiceNow.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: employee_id
        in: body
        type: string
        description: The PeopleSoft employee ID of the expense submitter.
      steps:
      - name: get-expense-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{expense_report_id}}'
      - name: get-employee
        type: call
        call: peoplesoft.get-employee
        with:
          employee_id: '{{employee_id}}'
      - name: open-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Expense policy review: {{get-expense-report.report_name}} — {{get-employee.full_name}}'
          description: 'Report {{expense_report_id}} total: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Cost center: {{get-employee.cost_center}}. Submitted: {{get-expense-report.submit_date}}.'
          assigned_group: Finance_Audit
          category: expense_review
  consumes:
  - type: http
    namespace: concur
    baseUri: https://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: peoplesoft
    baseUri: https://abbvie-hr.peoplesoft.com/api/v1
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: employees
      path: /employees/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-employee
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → expense-report-processing.yml

Assembles a regulatory submission package by pulling the latest approved documents from SharePoint, generating a submission manifest in Confluence, and notifying the regulatory affairs team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Submission Document Assembly
  description: Assembles a regulatory submission package by pulling the latest approved documents from SharePoint, generating a submission manifest in Confluence, and notifying the regulatory affairs team in Microsoft Teams.
  tags:
  - regulatory
  - submission
  - sharepoint
  - confluence
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: regulatory-affairs
    port: 8080
    tools:
    - name: assemble-submission
      description: Given a submission ID and product code, pull approved documents from SharePoint, create a Confluence manifest page, and notify the regulatory team.
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: The regulatory submission identifier.
      - name: product_code
        in: body
        type: string
        description: The AbbVie product code for the submission.
      - name: target_agency
        in: body
        type: string
        description: Target regulatory agency (e.g., FDA, EMA, PMDA).
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-folder
        with:
          site_id: regulatory_submissions
          folder_path: Submissions/{{product_code}}/{{submission_id}}
      - name: create-manifest
        type: call
        call: confluence.create-page
        with:
          space_key: REG
          title: 'Submission Manifest: {{submission_id}} — {{product_code}} ({{target_agency}})'
          body: 'Submission: {{submission_id}}

            Product: {{product_code}}

            Agency: {{target_agency}}

            Documents: {{get-documents.file_count}} files

            Assembled: {{get-documents.folder_url}}'
      - name: notify-reg-team
        type: call
        call: msteams.send-message
        with:
          channel: regulatory-affairs
          text: 'Submission package assembled: {{submission_id}} for {{product_code}} ({{target_agency}}). {{get-documents.file_count}} documents ready. Manifest: {{create-manifest.url}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folder-contents
      path: /{{site_id}}/drive/root:/{{folder_path}}:/children
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: list-folder
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://abbvie.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-document-assembly.yml

On new hire creation in PeopleSoft, opens a ServiceNow onboarding ticket, provisions an Azure AD account, shares a SharePoint onboarding folder, and sends a Microsoft Teams welcome message.

naftiko: '0.5'
info:
  label: New Hire Onboarding Orchestrator
  description: On new hire creation in PeopleSoft, opens a ServiceNow onboarding ticket, provisions an Azure AD account, shares a SharePoint onboarding folder, and sends a Microsoft Teams welcome message.
  tags:
  - hr
  - onboarding
  - peoplesoft
  - servicenow
  - azure-active-directory
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Given a PeopleSoft employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Azure AD, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The PeopleSoft employee ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The employee start date in YYYY-MM-DD format.
      - name: department
        in: body
        type: string
        description: The department or business unit the new hire is joining.
      steps:
      - name: get-employee
        type: call
        call: peoplesoft.get-employee
        with:
          employee_id: '{{employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
          description: Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}.
      - name: provision-ad-account
        type: call
        call: azuread.create-user
        with:
          displayName: '{{get-employee.full_name}}'
          userPrincipalName: '{{get-employee.work_email}}'
          department: '{{department}}'
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: hr_onboarding_site
          folder_path: OnboardingDocs/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: Welcome to AbbVie, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}.
  consumes:
  - type: http
    namespace: peoplesoft
    baseUri: https://abbvie-hr.peoplesoft.com/api/v1
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: employees
      path: /employees/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-employee
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/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: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-hire-onboarding-orchestrator.yml

Retrieves metadata about a GitHub repository including last commit, open PRs, and branch protection status. Used by platform engineering at AbbVie.

naftiko: '0.5'
info:
  label: GitHub Repository Info
  description: Retrieves metadata about a GitHub repository including last commit, open PRs, and branch protection status. Used by platform engineering at AbbVie.
  tags:
  - devops
  - github
  - source-control
capability:
  exposes:
  - type: mcp
    namespace: source-control
    port: 8080
    tools:
    - name: get-repo
      description: Retrieve GitHub repository metadata by owner and repo name.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: Repository name in owner/repo format.
      call: github.get-repo
      with:
        repo_name: '{{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_name}}
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-info.yml

Searches for documents in Box by keyword. Used by regulatory, legal, and clinical operations teams to quickly find SOPs, protocols, and submission documents stored in AbbVie's enterprise content management.

naftiko: '0.5'
info:
  label: Box Document Search
  description: Searches for documents in Box by keyword. Used by regulatory, legal, and clinical operations teams to quickly find SOPs, protocols, and submission documents stored in AbbVie's enterprise content management.
  tags:
  - document-management
  - content
  - box
  - search
capability:
  exposes:
  - type: mcp
    namespace: document-mgmt
    port: 8080
    tools:
    - name: search-documents
      description: Search Box for documents matching a keyword query.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keyword or phrase.
      - name: folder_id
        in: body
        type: string
        description: Optional Box folder ID to scope the search.
      call: box.search
      with:
        query: '{{query}}'
        ancestor_folder_ids: '{{folder_id}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: query
        in: query
      - name: ancestor_folder_ids
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → box-document-search.yml

Checks backup status in Veritas NetBackup, validates Azure snapshots, confirms S3 replication, logs results in ServiceNow, and escalates failures via PagerDuty.

naftiko: '0.5'
info:
  label: Multi-Cloud Backup Verification
  description: Checks backup status in Veritas NetBackup, validates Azure snapshots, confirms S3 replication, logs results in ServiceNow, and escalates failures via PagerDuty.
  tags:
  - infrastructure
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: multi_cloud_backup_verification
      description: Orchestrate multi-cloud backup verification workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: check-netbackup
        type: call
        call: netbackup.get-job-status
        with:
          policy_name: '{{resource_id}}'
      - name: check-azure
        type: call
        call: azure.get-snapshot-status
        with:
          resource_group: '{{resource_id}}'
      - name: log-results
        type: call
        call: servicenow.create-record
        with:
          table: backup_verifications
          policy: '{{resource_id}}'
      - name: escalate
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Backup verification: {{resource_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → multi-cloud-backup-verification.yml

Creates a snapshot of a VMware virtual machine before a GxP system maintenance window, logs the snapshot in ServiceNow as a change task, and notifies the infrastructure team.

naftiko: '0.5'
info:
  label: VMware VM Snapshot Management
  description: Creates a snapshot of a VMware virtual machine before a GxP system maintenance window, logs the snapshot in ServiceNow as a change task, and notifies the infrastructure team.
  tags:
  - infrastructure
  - virtualization
  - vmware
  - servicenow
  - microsoft-teams
  - gxp
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: create-vm-snapshot
      description: Given a VM name and change ticket, create a VMware snapshot, update the ServiceNow change task, and notify the infra team.
      inputParameters:
      - name: vm_name
        in: body
        type: string
        description: VMware virtual machine name.
      - name: change_number
        in: body
        type: string
        description: ServiceNow change request number.
      - name: snapshot_description
        in: body
        type: string
        description: Description for the snapshot.
      steps:
      - name: create-snapshot
        type: call
        call: vmware.create-snapshot
        with:
          vm_name: '{{vm_name}}'
          description: '{{snapshot_description}}'
      - name: update-change
        type: call
        call: servicenow.update-change
        with:
          change_number: '{{change_number}}'
          work_notes: 'VM snapshot created for {{vm_name}}. Snapshot ID: {{create-snapshot.snapshot_id}}. Timestamp: {{create-snapshot.created_at}}'
      - name: notify-infra
        type: call
        call: msteams.send-message
        with:
          channel: infrastructure-ops
          text: 'VM Snapshot: {{vm_name}} — Snapshot {{create-snapshot.snapshot_id}} created for change {{change_number}}. Ready for maintenance.'
  consumes:
  - type: http
    namespace: vmware
    baseUri: https://vcenter.abbvie.com/rest/vcenter
    authentication:
      type: bearer
      token: $secrets.vmware_session_token
    resources:
    - name: snapshots
      path: /vm/{{vm_name}}/snapshots
      inputParameters:
      - name: vm_name
        in: path
      operations:
      - name: create-snapshot
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request/{{change_number}}
      inputParameters:
      - name: change_number
        in: path
      operations:
      - name: update-change
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vmware-vm-snapshot-management.yml

Provisions a new user in Azure Active Directory, assigns them to the appropriate security group, and sends credentials via Microsoft Teams direct message.

naftiko: '0.5'
info:
  label: Azure AD User Provisioning
  description: Provisions a new user in Azure Active Directory, assigns them to the appropriate security group, and sends credentials via Microsoft Teams direct message.
  tags:
  - identity
  - security
  - azure-active-directory
  - microsoft-teams
  - user-provisioning
capability:
  exposes:
  - type: mcp
    namespace: identity-mgmt
    port: 8080
    tools:
    - name: provision-user
      description: Create a new Azure AD user, assign to a security group, and send welcome credentials via Teams.
      inputParameters:
      - name: display_name
        in: body
        type: string
        description: Full name of the new user.
      - name: user_principal_name
        in: body
        type: string
        description: UPN for the new user (email format).
      - name: department
        in: body
        type: string
        description: Department the user belongs to.
      - name: security_group_id
        in: body
        type: string
        description: Azure AD security group ID to assign the user to.
      steps:
      - name: create-user
        type: call
        call: azuread.create-user
        with:
          displayName: '{{display_name}}'
          userPrincipalName: '{{user_principal_name}}'
          department: '{{department}}'
      - name: add-to-group
        type: call
        call: azuread.add-group-member
        with:
          group_id: '{{security_group_id}}'
          member_id: '{{create-user.id}}'
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{user_principal_name}}'
          text: Welcome to AbbVie, {{display_name}}! Your account has been provisioned. Please set up MFA at https://aka.ms/MFASetup.
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
    - name: group-members
      path: /groups/{{group_id}}/members/$ref
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: add-group-member
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-ad-user-provisioning.yml

Retrieves an Okta user profile by email or user ID. Used by IT security to verify identity and access status for AbbVie employees.

naftiko: '0.5'
info:
  label: Okta User Lookup
  description: Retrieves an Okta user profile by email or user ID. Used by IT security to verify identity and access status for AbbVie employees.
  tags:
  - security
  - okta
  - identity
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-user
      description: Look up an Okta user by email or ID.
      inputParameters:
      - name: user_identifier
        in: body
        type: string
        description: Email or Okta user ID.
      call: okta.get-user
      with:
        user_identifier: '{{user_identifier}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://abbvie.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: users
      path: /users/{{user_identifier}}
      inputParameters:
      - name: user_identifier
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-lookup.yml

Checks the health and throughput metrics for a MuleSoft API gateway endpoint. Used by integration teams to monitor API connectivity for AbbVie's enterprise integrations.

naftiko: '0.5'
info:
  label: MuleSoft API Gateway Health
  description: Checks the health and throughput metrics for a MuleSoft API gateway endpoint. Used by integration teams to monitor API connectivity for AbbVie's enterprise integrations.
  tags:
  - integration
  - api-management
  - mulesoft
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: api-management
    port: 8080
    tools:
    - name: get-api-health
      description: Look up MuleSoft API health metrics for a given environment and API ID.
      inputParameters:
      - name: environment_id
        in: body
        type: string
        description: MuleSoft environment ID.
      - name: api_id
        in: body
        type: string
        description: MuleSoft API ID.
      call: mulesoft.get-api-status
      with:
        environment_id: '{{environment_id}}'
        api_id: '{{api_id}}'
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/apimanager/api/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: apis
      path: /organizations/{{environment_id}}/apis/{{api_id}}
      inputParameters:
      - name: environment_id
        in: path
      - name: api_id
        in: path
      operations:
      - name: get-api-status
        method: GET
Open in Framework → View in Fleet → mulesoft-api-gateway-health.yml

Detects safety signals in ARGUS, queries adverse event records in Snowflake, creates a Jira ticket for the safety team, and notifies pharmacovigilance leadership in Teams.

naftiko: '0.5'
info:
  label: Pharmacovigilance Signal Detection Pipeline
  description: Detects safety signals in ARGUS, queries adverse event records in Snowflake, creates a Jira ticket for the safety team, and notifies pharmacovigilance leadership in Teams.
  tags:
  - pharmacovigilance
  - safety
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: pharmacovigilance_signal_detection_pipel
      description: Orchestrate pharmacovigilance signal detection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-signal-data
        type: call
        call: argus.get-signal
        with:
          signal_id: '{{resource_id}}'
      - name: run-ae-analysis
        type: call
        call: snowflake.run-query
        with:
          sql_query: SELECT * FROM adverse_events WHERE signal_id = '{{resource_id}}'
          warehouse: PHARMA_WH
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PV
          summary: 'Safety signal: {{get-signal-data.signal_type}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: pharmacovigilance
          text: 'Signal {{resource_id}}: {{get-signal-data.signal_type}}. Ticket: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        method: POST
  - type: http
    namespace: jira
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-signal-detection-pipeline.yml

On SIEM alert in Splunk, enriches with CrowdStrike threat intel, creates a PagerDuty incident, blocks IP in firewall, and documents in ServiceNow.

naftiko: '0.5'
info:
  label: Security Incident Response Pipeline
  description: On SIEM alert in Splunk, enriches with CrowdStrike threat intel, creates a PagerDuty incident, blocks IP in firewall, and documents in ServiceNow.
  tags:
  - security
  - splunk
  - pagerduty
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    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-alert
        type: call
        call: splunk.get-alert
        with:
          alert_id: '{{resource_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Security alert: {{get-alert.rule_name}}'
      - name: document
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Security: {{get-alert.rule_name}}'
          description: Alert {{resource_id}}
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://abbvie-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: splunk-operation
        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-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
Open in Framework → View in Fleet → security-incident-response-pipeline.yml

Captures HCP meeting notes from Veeva CRM, syncs to Salesforce, updates compliance records, refreshes Tableau analytics, and sends summary to field team.

naftiko: '0.5'
info:
  label: HCP Engagement Tracking Pipeline
  description: Captures HCP meeting notes from Veeva CRM, syncs to Salesforce, updates compliance records, refreshes Tableau analytics, and sends summary to field team.
  tags:
  - commercial
  - salesforce
  - tableau
  - slack
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: hcp_engagement_tracking_pipeline
      description: Orchestrate hcp engagement tracking pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-meetings
        type: call
        call: veeva.get-hcp-meetings
        with:
          rep_id: '{{resource_id}}'
      - name: sync-salesforce
        type: call
        call: salesforce.update-engagement
        with:
          rep_id: '{{resource_id}}'
          meetings: '{{get-meetings.count}}'
      - name: refresh-analytics
        type: call
        call: tableau.refresh-extract
        with:
          workbook_id: hcp_engagement
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: field-force
          text: 'HCP engagement synced for rep {{resource_id}}: {{get-meetings.count}} meetings'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-operation
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://abbvie-tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: tableau-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → hcp-engagement-tracking-pipeline.yml

Searches for PII across Salesforce, Workday, and Snowflake, compiles results, logs in OneTrust, and sends the response via encrypted email.

naftiko: '0.5'
info:
  label: Data Privacy DSAR Processor
  description: Searches for PII across Salesforce, Workday, and Snowflake, compiles results, logs in OneTrust, and sends the response via encrypted email.
  tags:
  - privacy
  - salesforce
  - workday
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: data_privacy_dsar_processor
      description: Orchestrate data privacy dsar processor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: search-sf
        type: call
        call: salesforce.search-pii
        with:
          subject_id: '{{resource_id}}'
      - name: search-wd
        type: call
        call: workday.search-employee
        with:
          subject_id: '{{resource_id}}'
      - name: search-sf-data
        type: call
        call: snowflake.run-query
        with:
          sql_query: SELECT * FROM pii_catalog WHERE subject = '{{resource_id}}'
          warehouse: PRIVACY_WH
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: privacy
          text: DSAR complete for {{resource_id}}
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-operation
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-operation
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://abbvie.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → data-privacy-dsar-processor.yml

Retrieves the status of a Coupa purchase requisition by requisition number. Used by procurement teams at AbbVie to track order progress.

naftiko: '0.5'
info:
  label: Coupa Purchase Requisition Status
  description: Retrieves the status of a Coupa purchase requisition by requisition number. Used by procurement teams at AbbVie to track order progress.
  tags:
  - procurement
  - coupa
  - purchasing
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-requisition
      description: Look up a Coupa purchase requisition by number.
      inputParameters:
      - name: requisition_number
        in: body
        type: string
        description: The Coupa requisition number.
      call: coupa.get-requisition
      with:
        requisition_number: '{{requisition_number}}'
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://abbvie.coupahost.com/api
    authentication:
      type: bearer
      token: $secrets.coupa_api_key
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_number}}
      inputParameters:
      - name: requisition_number
        in: path
      operations:
      - name: get-requisition
        method: GET
Open in Framework → View in Fleet → coupa-purchase-requisition-status.yml

Queries active user sessions in Keycloak for a given realm and user. Used by identity and access management teams to troubleshoot SSO issues for AbbVie's internal applications.

naftiko: '0.5'
info:
  label: Keycloak User Session Lookup
  description: Queries active user sessions in Keycloak for a given realm and user. Used by identity and access management teams to troubleshoot SSO issues for AbbVie's internal applications.
  tags:
  - security
  - identity
  - keycloak
  - sso
capability:
  exposes:
  - type: mcp
    namespace: iam
    port: 8080
    tools:
    - name: get-user-sessions
      description: Look up active Keycloak sessions for a user in a given realm.
      inputParameters:
      - name: realm
        in: body
        type: string
        description: Keycloak realm name.
      - name: user_id
        in: body
        type: string
        description: Keycloak user ID.
      call: keycloak.get-sessions
      with:
        realm: '{{realm}}'
        user_id: '{{user_id}}'
  consumes:
  - type: http
    namespace: keycloak
    baseUri: https://sso.abbvie.com/auth/admin/realms
    authentication:
      type: bearer
      token: $secrets.keycloak_admin_token
    resources:
    - name: sessions
      path: /{{realm}}/users/{{user_id}}/sessions
      inputParameters:
      - name: realm
        in: path
      - name: user_id
        in: path
      operations:
      - name: get-sessions
        method: GET
Open in Framework → View in Fleet → keycloak-user-session-lookup.yml

Triggers GitHub Actions workflow, monitors build, deploys to staging via ArgoCD, runs smoke tests, and promotes to production after Slack approval.

naftiko: '0.5'
info:
  label: Release Management Deployment Pipeline
  description: Triggers GitHub Actions workflow, monitors build, deploys to staging via ArgoCD, runs smoke tests, and promotes to production after Slack approval.
  tags:
  - devops
  - github
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: release_management_deployment_pipeline
      description: Orchestrate release management deployment pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: trigger-build
        type: call
        call: github.trigger-workflow
        with:
          repo: '{{resource_id}}'
          workflow: release.yml
      - name: deploy-staging
        type: call
        call: argocd.sync-app
        with:
          app_name: '{{resource_id}}-staging'
      - name: run-tests
        type: call
        call: postman.run-collection
        with:
          collection_id: '{{resource_id}}_smoke'
      - name: notify
        type: call
        call: slack.send-message
        with:
          channel: releases
          text: 'Release {{resource_id}} deployed to staging. Tests: {{run-tests.status}}'
  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-operation
        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-operation
        method: POST
Open in Framework → View in Fleet → release-management-deployment-pipeline.yml

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

naftiko: '0.5'
info:
  label: CI/CD Failure Observability Chain
  description: On a GitHub Actions pipeline failure, creates a Datadog event marker, opens a ServiceNow incident, and alerts the engineering team in Microsoft Teams.
  tags:
  - devops
  - ci-cd
  - observability
  - github-actions
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-alerts
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a pipeline failure event, create a Datadog event, open a ServiceNow incident, and alert Teams with full context.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
      - name: repo
        in: body
        type: string
      - name: branch
        in: body
        type: string
      - name: failed_job_name
        in: body
        type: string
      - name: log_url
        in: body
        type: string
      - name: commit_sha
        in: body
        type: string
      steps:
      - name: create-event
        type: call
        call: datadog.create-event
        with:
          title: 'Pipeline failure: {{repo}} / {{branch}}'
          text: 'Job: {{failed_job_name}}. Commit: {{commit_sha}}. Log: {{log_url}}'
          alert_type: error
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[CI Failure] {{repo}} / {{branch}} — {{failed_job_name}}'
          category: ci_cd_failure
          assigned_group: Engineering
          description: 'Pipeline: {{pipeline_id}}

            Branch: {{branch}}

            Commit: {{commit_sha}}

            Log: {{log_url}}

            Datadog event: {{create-event.id}}'
      - name: post-alert
        type: call
        call: msteams.send-message
        with:
          channel: engineering-alerts
          text: 'Pipeline Failure: {{repo}} | Branch: {{branch}} | Job: {{failed_job_name}} | Incident: {{create-incident.number}} | Log: {{log_url}}'
  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: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ci-cd-failure-observability-chain.yml

Pulls user access from SailPoint, compares against Workday roles, flags anomalies, creates certification tasks in ServiceNow, and emails managers.

naftiko: '0.5'
info:
  label: IT Access Review Certification Workflow
  description: Pulls user access from SailPoint, compares against Workday roles, flags anomalies, creates certification tasks in ServiceNow, and emails managers.
  tags:
  - security
  - sailpoint
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: it_access_review_certification_workflow
      description: Orchestrate it access review certification workflow workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-access
        type: call
        call: sailpoint.get-user-access
        with:
          user_id: '{{resource_id}}'
      - name: get-role
        type: call
        call: workday.get-employee
        with:
          employee_id: '{{resource_id}}'
      - name: create-cert
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Access review: {{resource_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: security-ops
          text: 'Access review created for {{resource_id}}: {{create-cert.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/abbvie
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → it-access-review-certification-workflow.yml

Searches Splunk indexes for log entries matching a given query. Used by IT operations to investigate application errors across AbbVie's cloud infrastructure.

naftiko: '0.5'
info:
  label: Splunk Log Search
  description: Searches Splunk indexes for log entries matching a given query. Used by IT operations to investigate application errors across AbbVie's cloud infrastructure.
  tags:
  - devops
  - logging
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: logging
    port: 8080
    tools:
    - name: search-logs
      description: Search Splunk logs by query string and time range.
      inputParameters:
      - name: query
        in: body
        type: string
        description: SPL search query.
      - name: time_range
        in: body
        type: string
        description: Relative time range such as -1h.
      call: splunk.search-logs
      with:
        query: '{{query}}'
        time_range: '{{time_range}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://abbvie-splunk.com/services/search/jobs
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /export
      operations:
      - name: search-logs
        method: POST
Open in Framework → View in Fleet → splunk-log-search.yml

Retrieves a Salesforce opportunity by ID including stage, amount, close date, and account name. Used by commercial teams to check deal status for AbbVie therapeutic areas.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Lookup
  description: Retrieves a Salesforce opportunity by ID including stage, amount, close date, and account name. Used by commercial teams to check deal status for AbbVie therapeutic areas.
  tags:
  - sales
  - crm
  - salesforce
  - commercial
capability:
  exposes:
  - type: mcp
    namespace: sales-crm
    port: 8080
    tools:
    - name: get-opportunity
      description: Look up a Salesforce opportunity by ID and return its stage, amount, close date, and account.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      call: salesforce.get-opportunity
      with:
        opportunity_id: '{{opportunity_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://abbvie.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-lookup.yml

Runs a Terraform plan via Azure DevOps pipeline, checks for infrastructure drift, and creates a ServiceNow change request if drift is detected in AbbVie's Azure environments.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Drift Detection
  description: Runs a Terraform plan via Azure DevOps pipeline, checks for infrastructure drift, and creates a ServiceNow change request if drift is detected in AbbVie's Azure environments.
  tags:
  - devops
  - infrastructure
  - terraform
  - azure-devops
  - servicenow
  - cloud
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: detect-drift
      description: Trigger a Terraform plan in Azure DevOps and create a ServiceNow change request if drift is found.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: Azure DevOps pipeline ID for the Terraform plan.
      - name: environment
        in: body
        type: string
        description: Target environment (dev, staging, prod).
      steps:
      - name: trigger-plan
        type: call
        call: azuredevops.run-pipeline
        with:
          project: '{{project}}'
          pipeline_id: '{{pipeline_id}}'
          parameters: '{"environment": "{{environment}}"}'
      - name: create-change-request
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Terraform drift detected: {{project}} / {{environment}}'
          description: Pipeline run {{trigger-plan.run_id}} detected infrastructure drift in {{environment}}. Review Terraform plan output and apply corrections.
          assigned_group: Cloud_Engineering
          category: infrastructure
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/abbvie
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: pipelines
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: run-pipeline
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-drift-detection.yml

Launches vulnerability scan via Qualys, runs OWASP ZAP against web apps, creates prioritized remediation tickets in Jira, and summarizes in Confluence.

naftiko: '0.5'
info:
  label: Automated Penetration Test Orchestrator
  description: Launches vulnerability scan via Qualys, runs OWASP ZAP against web apps, creates prioritized remediation tickets in Jira, and summarizes in Confluence.
  tags:
  - security
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: automated_pen_test_orchestrator
      description: Orchestrate automated penetration test orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: run-qualys
        type: call
        call: qualys.launch-scan
        with:
          target: '{{resource_id}}'
      - name: run-zap
        type: call
        call: zap.run-scan
        with:
          target_url: '{{resource_id}}'
      - name: create-tickets
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: 'Pen test findings: {{resource_id}}'
      - name: create-report
        type: call
        call: confluence.create-page
        with:
          space: SEC
          title: 'Pen test: {{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://abbvie.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-operation
        method: POST
Open in Framework → View in Fleet → automated-penetration-test-orchestrator.yml

Pulls cost and usage data from Oracle Cloud for a given compartment and date range, formats a summary, and posts it to a Confluence finance report page for budget tracking.

naftiko: '0.5'
info:
  label: Oracle Cloud Infrastructure Cost Report
  description: Pulls cost and usage data from Oracle Cloud for a given compartment and date range, formats a summary, and posts it to a Confluence finance report page for budget tracking.
  tags:
  - finance
  - cloud
  - oracle-cloud
  - confluence
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finance
    port: 8080
    tools:
    - name: generate-cost-report
      description: Given an OCI compartment and date range, pull cost data and publish a Confluence report.
      inputParameters:
      - name: compartment_id
        in: body
        type: string
        description: Oracle Cloud compartment OCID.
      - name: start_date
        in: body
        type: string
        description: Report start date (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: Report end date (YYYY-MM-DD).
      steps:
      - name: get-cost-data
        type: call
        call: oci.get-usage
        with:
          compartment_id: '{{compartment_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: CLOUDFINANCE
          title: 'OCI Cost Report: {{compartment_id}} ({{start_date}} to {{end_date}})'
          body: 'Compartment: {{compartment_id}}

            Period: {{start_date}} to {{end_date}}

            Total Cost: {{get-cost-data.total_cost}} {{get-cost-data.currency}}

            Compute: {{get-cost-data.compute_cost}}

            Storage: {{get-cost-data.storage_cost}}

            Network: {{get-cost-data.network_cost}}'
  consumes:
  - type: http
    namespace: oci
    baseUri: https://usagereports.us-ashburn-1.oci.oraclecloud.com/20200107
    authentication:
      type: bearer
      token: $secrets.oci_token
    resources:
    - name: usage
      path: /usage
      operations:
      - name: get-usage
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://abbvie.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → oracle-cloud-infrastructure-cost-report.yml

Captures EHS incidents from Intelex, correlates with SAP site data, generates a CAPA investigation, and alerts site leadership via Teams.

naftiko: '0.5'
info:
  label: Environmental Health Safety Incident Pipeline
  description: Captures EHS incidents from Intelex, correlates with SAP site data, generates a CAPA investigation, and alerts site leadership via Teams.
  tags:
  - ehs
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: ehs_incident_pipeline
      description: Orchestrate environmental health safety incident pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-incident
        type: call
        call: intelex.get-incident
        with:
          incident_id: '{{resource_id}}'
      - name: get-site-data
        type: call
        call: sap.get-plant
        with:
          plant_id: '{{get-incident.plant_id}}'
      - name: create-capa
        type: call
        call: servicenow.create-request
        with:
          short_description: 'EHS CAPA: {{resource_id}}'
          description: '{{get-incident.description}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel: ehs-leadership
          text: 'EHS incident {{resource_id}} at {{get-site-data.plant_name}}. CAPA: {{create-capa.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abbvie-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-operation
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → environmental-health-safety-incident-pipeline.yml

Executes a predefined analytics query against AbbVie's Teradata data warehouse and returns summary results. Used by data analysts for pharma sales and market access reporting.

naftiko: '0.5'
info:
  label: Teradata Data Warehouse Query
  description: Executes a predefined analytics query against AbbVie's Teradata data warehouse and returns summary results. Used by data analysts for pharma sales and market access reporting.
  tags:
  - data-analytics
  - data-warehouse
  - teradata
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: data-warehouse
    port: 8080
    tools:
    - name: run-analytics-query
      description: Execute a named query against Teradata and return results.
      inputParameters:
      - name: query_name
        in: body
        type: string
        description: Name of the predefined analytics query.
      - name: parameters
        in: body
        type: string
        description: JSON string of query parameters.
      call: teradata.execute-query
      with:
        query_name: '{{query_name}}'
        parameters: '{{parameters}}'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.abbvie.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries/{{query_name}}/execute
      inputParameters:
      - name: query_name
        in: path
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → teradata-data-warehouse-query.yml

When an SAP supply chain alert fires for a critical raw material, creates a ServiceNow priority incident, notifies the supply chain team in Microsoft Teams, and logs an entry in Confluence for audit tracking.

naftiko: '0.5'
info:
  label: Drug Supply Chain Disruption Escalation
  description: When an SAP supply chain alert fires for a critical raw material, creates a ServiceNow priority incident, notifies the supply chain team in Microsoft Teams, and logs an entry in Confluence for audit tracking.
  tags:
  - supply-chain
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: escalate-disruption
      description: Given a material shortage alert from SAP, create a priority incident, notify the supply chain team, and log the disruption for GMP audit trail.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number for the affected raw material.
      - name: plant_code
        in: body
        type: string
        description: SAP plant code where the shortage is detected.
      - name: shortage_quantity
        in: body
        type: string
        description: Quantity shortfall in base unit of measure.
      - name: affected_product
        in: body
        type: string
        description: The finished drug product affected by the shortage.
      steps:
      - name: get-material
        type: call
        call: sap.get-material
        with:
          material_number: '{{material_number}}'
      - name: create-priority-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supply disruption: {{get-material.material_name}} at plant {{plant_code}}'
          category: supply_chain_disruption
          assigned_group: Supply_Chain_Ops
          urgency: '1'
          description: 'Material: {{material_number}} ({{get-material.material_name}}). Plant: {{plant_code}}. Shortage: {{shortage_quantity}} {{get-material.unit}}. Affected product: {{affected_product}}.'
      - name: notify-supply-team
        type: call
        call: msteams.send-message
        with:
          channel: supply-chain-alerts
          text: 'SUPPLY DISRUPTION: {{get-material.material_name}} at plant {{plant_code}}. Shortage: {{shortage_quantity}} {{get-material.unit}}. Affected: {{affected_product}}. Incident: {{create-priority-incident.number}}'
      - name: log-audit-entry
        type: call
        call: confluence.create-page
        with:
          space_key: SUPPLY
          title: 'Disruption Log: {{material_number}} — {{plant_code}} — {{create-priority-incident.number}}'
          body: 'Material: {{material_number}} ({{get-material.material_name}})

            Plant: {{plant_code}}

            Shortage: {{shortage_quantity}}

            Product: {{affected_product}}

            Incident: {{create-priority-incident.number}}

            Timestamp: {{create-priority-incident.created_at}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abbvie-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Material('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://abbvie.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → drug-supply-chain-disruption-escalation.yml

Sends a message to a specified Slack channel. Used by automation workflows to notify teams about pipeline events and alerts.

naftiko: '0.5'
info:
  label: Slack Channel Message Sender
  description: Sends a message to a specified Slack channel. Used by automation workflows to notify teams about pipeline events and alerts.
  tags:
  - collaboration
  - slack
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: messaging
    port: 8080
    tools:
    - name: send-message
      description: Send a message to a Slack channel.
      inputParameters:
      - name: channel
        in: body
        type: string
        description: The Slack channel name or ID.
      - name: text
        in: body
        type: string
        description: The message text.
      call: slack.send-message
      with:
        channel: '{{channel}}'
        text: '{{text}}'
  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: send-message
        method: POST
Open in Framework → View in Fleet → slack-channel-message-sender.yml

Triggers a dataset refresh in Power BI for a specified workspace and dataset. Used by analytics teams to ensure pharma sales dashboards reflect the latest data from Teradata.

naftiko: '0.5'
info:
  label: Power BI Report Refresh Trigger
  description: Triggers a dataset refresh in Power BI for a specified workspace and dataset. Used by analytics teams to ensure pharma sales dashboards reflect the latest data from Teradata.
  tags:
  - analytics
  - business-intelligence
  - power-bi
  - data-refresh
capability:
  exposes:
  - type: mcp
    namespace: bi-analytics
    port: 8080
    tools:
    - name: refresh-dataset
      description: Trigger a Power BI dataset refresh for a given workspace and dataset ID.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      call: powerbi.refresh-dataset
      with:
        workspace_id: '{{workspace_id}}'
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-report-refresh-trigger.yml

When a manufacturing deviation is reported in SAP, creates a quality investigation in Veeva, assigns corrective actions in Jira, and notifies QA via Teams.

naftiko: '0.5'
info:
  label: Drug Manufacturing Deviation Handler
  description: When a manufacturing deviation is reported in SAP, creates a quality investigation in Veeva, assigns corrective actions in Jira, and notifies QA via Teams.
  tags:
  - manufacturing
  - quality
  - sap
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: abbvie
    port: 8080
    tools:
    - name: drug_manufacturing_deviation_handler
      description: Orchestrate drug manufacturing deviation handler workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-deviation
        type: call
        call: sap.get-deviation
        with:
          deviation_id: '{{resource_id}}'
      - name: create-investigation
        type: call
        call: veeva.create-investigation
        with:
          deviation_id: '{{resource_id}}'
          description: '{{get-deviation.description}}'
      - name: create-capa
        type: call
        call: jira.create-issue
        with:
          project: QA
          summary: CAPA for deviation {{resource_id}}
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel: quality-assurance
          text: 'Deviation {{resource_id}}: {{get-deviation.description}}. CAPA: {{create-capa.key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://abbvie-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-operation
        method: POST
  - type: http
    namespace: jira
    baseUri: https://abbvie.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-operation
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: msteams-operation
        method: POST
Open in Framework → View in Fleet → drug-manufacturing-deviation-handler.yml

Retrieves metadata and preview URL for a Tableau workbook view. Used by business users to quickly access pharma analytics dashboards without logging into Tableau Server.

naftiko: '0.5'
info:
  label: Tableau Dashboard Viewer
  description: Retrieves metadata and preview URL for a Tableau workbook view. Used by business users to quickly access pharma analytics dashboards without logging into Tableau Server.
  tags:
  - analytics
  - business-intelligence
  - tableau
  - visualization
capability:
  exposes:
  - type: mcp
    namespace: bi-analytics
    port: 8080
    tools:
    - name: get-tableau-view
      description: Look up a Tableau view by workbook and view name, returning the embed URL and last refresh time.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Tableau site ID.
      - name: view_id
        in: body
        type: string
        description: Tableau view ID.
      call: tableau.get-view
      with:
        site_id: '{{site_id}}'
        view_id: '{{view_id}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.abbvie.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/{{site_id}}/views/{{view_id}}
      inputParameters:
      - name: site_id
        in: path
      - name: view_id
        in: path
      operations:
      - name: get-view
        method: GET
Open in Framework → View in Fleet → tableau-dashboard-viewer.yml

Checks the quality gate status for a SonarQube project. Used by AbbVie engineering teams to validate code quality before merging changes to GxP-validated systems.

naftiko: '0.5'
info:
  label: SonarQube Code Quality Gate Check
  description: Checks the quality gate status for a SonarQube project. Used by AbbVie engineering teams to validate code quality before merging changes to GxP-validated systems.
  tags:
  - devops
  - code-quality
  - sonarqube
  - gxp
capability:
  exposes:
  - type: mcp
    namespace: code-quality
    port: 8080
    tools:
    - name: check-quality-gate
      description: Look up the quality gate status for a SonarQube project key.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The SonarQube project key.
      call: sonarqube.get-quality-gate
      with:
        project_key: '{{project_key}}'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.abbvie.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-quality-gate
        method: GET
Open in Framework → View in Fleet → sonarqube-code-quality-gate-check.yml

Retrieves a Confluence page by space key and title. Used across AbbVie teams to quickly access SOPs, process documentation, and regulatory guidelines.

naftiko: '0.5'
info:
  label: Confluence Page Lookup
  description: Retrieves a Confluence page by space key and title. Used across AbbVie teams to quickly access SOPs, process documentation, and regulatory guidelines.
  tags:
  - knowledge-management
  - documentation
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: get-confluence-page
      description: Look up a Confluence page by space key and title.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: title
        in: body
        type: string
        description: Page title to search for.
      call: confluence.get-page
      with:
        space_key: '{{space_key}}'
        title: '{{title}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://abbvie.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      inputParameters:
      - name: space_key
        in: query
      - name: title
        in: query
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-page-lookup.yml

When a code change is merged to a GxP-validated system, creates a change control record in ServiceNow, runs SonarQube quality gate, uploads evidence to SharePoint, and notifies QA in Microsoft Teams.

naftiko: '0.5'
info:
  label: GxP Validation Change Control
  description: When a code change is merged to a GxP-validated system, creates a change control record in ServiceNow, runs SonarQube quality gate, uploads evidence to SharePoint, and notifies QA in Microsoft Teams.
  tags:
  - quality
  - gxp
  - change-control
  - servicenow
  - sonarqube
  - sharepoint
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: gxp-quality
    port: 8080
    tools:
    - name: process-gxp-change
      description: Given a repository, commit SHA, and system name, execute GxP change control workflow including quality gate check and evidence archival.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository in owner/repo format.
      - name: commit_sha
        in: body
        type: string
        description: The merge commit SHA.
      - name: system_name
        in: body
        type: string
        description: Name of the GxP-validated system.
      - name: change_description
        in: body
        type: string
        description: Description of the change being deployed.
      steps:
      - name: create-change-control
        type: call
        call: servicenow.create-change
        with:
          short_description: 'GxP Change: {{system_name}} — {{commit_sha}}'
          description: 'Repository: {{repo}}. Commit: {{commit_sha}}. Change: {{change_description}}'
          assigned_group: QA_Validation
          category: gxp_change_control
      - name: check-quality
        type: call
        call: sonarqube.get-quality-gate
        with:
          project_key: '{{repo}}'
      - name: archive-evidence
        type: call
        call: sharepoint.create-folder
        with:
          site_id: gxp_validation
          folder_path: ChangeControl/{{system_name}}/{{create-change-control.number}}
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel: qa-validation
          text: 'GxP Change Control: {{system_name}} — {{create-change-control.number}}. Quality Gate: {{check-quality.status}}. Evidence: {{archive-evidence.url}}. Change: {{change_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://abbvie.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: sonarqube
    baseUri: https://sonarqube.abbvie.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: 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: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → gxp-validation-change-control.yml

Retrieves metadata and a pre-signed URL for an object in an S3 bucket. Used by data teams to access research datasets and clinical data exports.

naftiko: '0.5'
info:
  label: AWS S3 Object Retrieval
  description: Retrieves metadata and a pre-signed URL for an object in an S3 bucket. Used by data teams to access research datasets and clinical data exports.
  tags:
  - cloud
  - aws
  - s3
  - storage
capability:
  exposes:
  - type: mcp
    namespace: cloud-storage
    port: 8080
    tools:
    - name: get-object
      description: Get S3 object metadata and download URL by bucket and key.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: S3 bucket name.
      - name: object_key
        in: body
        type: string
        description: Object key path.
      call: s3.get-object
      with:
        bucket: '{{bucket}}'
        object_key: '{{object_key}}'
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /{{bucket}}/{{object_key}}
      inputParameters:
      - name: bucket
        in: path
      - name: object_key
        in: path
      operations:
      - name: get-object
        method: GET
Open in Framework → View in Fleet → aws-s3-object-retrieval.yml

Checks the status of an Apache NiFi data flow that processes clinical trial data, verifies the downstream Elasticsearch index health, and alerts the data engineering team via Microsoft Teams if issues are detected.

naftiko: '0.5'
info:
  label: Clinical Data Pipeline Monitoring
  description: Checks the status of an Apache NiFi data flow that processes clinical trial data, verifies the downstream Elasticsearch index health, and alerts the data engineering team via Microsoft Teams if issues are detected.
  tags:
  - data-engineering
  - clinical-data
  - apache-nifi
  - elasticsearch
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: check-clinical-pipeline
      description: Given a NiFi process group ID, check flow status and Elasticsearch index health, alerting the team on failures.
      inputParameters:
      - name: process_group_id
        in: body
        type: string
        description: The NiFi process group ID for the clinical data flow.
      - name: index_name
        in: body
        type: string
        description: The Elasticsearch index name for clinical data.
      steps:
      - name: get-flow-status
        type: call
        call: nifi.get-process-group
        with:
          process_group_id: '{{process_group_id}}'
      - name: check-index
        type: call
        call: elasticsearch.get-index-health
        with:
          index_name: '{{index_name}}'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel: data-engineering
          text: 'Clinical Pipeline Status — NiFi flow {{process_group_id}}: {{get-flow-status.status}}. Queued: {{get-flow-status.queued_count}}. ES index {{index_name}}: {{check-index.status}} ({{check-index.doc_count}} docs).'
  consumes:
  - type: http
    namespace: nifi
    baseUri: https://nifi.abbvie.com/nifi-api
    authentication:
      type: bearer
      token: $secrets.nifi_token
    resources:
    - name: process-groups
      path: /process-groups/{{process_group_id}}/status
      inputParameters:
      - name: process_group_id
        in: path
      operations:
      - name: get-process-group
        method: GET
  - type: http
    namespace: elasticsearch
    baseUri: https://es.abbvie.com:9200
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: indices
      path: /_cluster/health/{{index_name}}
      inputParameters:
      - name: index_name
        in: path
      operations:
      - name: get-index-health
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/{{channel}}/channels/general/messages
      inputParameters:
      - name: channel
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-data-pipeline-monitoring.yml

Queries Palo Alto Networks firewall for a specific security rule by name. Used by network security teams to audit firewall configurations protecting AbbVie's data center and cloud perimeters.

naftiko: '0.5'
info:
  label: Palo Alto Networks Firewall Rule Lookup
  description: Queries Palo Alto Networks firewall for a specific security rule by name. Used by network security teams to audit firewall configurations protecting AbbVie's data center and cloud perimeters.
  tags:
  - security
  - network
  - palo-alto-networks
  - firewall
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: get-firewall-rule
      description: Look up a Palo Alto Networks security rule by name.
      inputParameters:
      - name: rule_name
        in: body
        type: string
        description: Name of the firewall security rule.
      call: paloalto.get-security-rule
      with:
        rule_name: '{{rule_name}}'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://firewall.abbvie.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
      header: X-PAN-KEY
    resources:
    - name: security-rules
      path: /Policies/SecurityRules
      inputParameters:
      - name: rule_name
        in: query
      operations:
      - name: get-security-rule
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-firewall-rule-lookup.yml

Pulls engagement metrics from LinkedIn, Facebook, and Instagram for an AbbVie brand campaign, aggregates the data, and publishes a summary report to Confluence for the digital marketing team.

naftiko: '0.5'
info:
  label: Social Media Brand Monitoring
  description: Pulls engagement metrics from LinkedIn, Facebook, and Instagram for an AbbVie brand campaign, aggregates the data, and publishes a summary report to Confluence for the digital marketing team.
  tags:
  - marketing
  - social-media
  - linkedin
  - facebook
  - instagram
  - confluence
  - brand-monitoring
capability:
  exposes:
  - type: mcp
    namespace: social-media
    port: 8080
    tools:
    - name: generate-social-report
      description: Given a campaign identifier, pull engagement data from LinkedIn, Facebook, and Instagram, then publish a consolidated report.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Internal campaign identifier.
      - name: campaign_name
        in: body
        type: string
        description: Campaign display name.
      - name: date_range
        in: body
        type: string
        description: Reporting date range.
      steps:
      - name: get-linkedin-metrics
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{campaign_id}}'
      - name: get-facebook-metrics
        type: call
        call: facebook.get-campaign-insights
        with:
          campaign_id: '{{campaign_id}}'
      - name: get-instagram-metrics
        type: call
        call: instagram.get-media-insights
        with:
          campaign_id: '{{campaign_id}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: DIGITAL
          title: 'Social Media Report: {{campaign_name}} — {{date_range}}'
          body: 'Campaign: {{campaign_name}}


            LinkedIn — Impressions: {{get-linkedin-metrics.impressions}}, Clicks: {{get-linkedin-metrics.clicks}}, Engagement Rate: {{get-linkedin-metrics.engagement_rate}}


            Facebook — Reach: {{get-facebook-metrics.reach}}, Clicks: {{get-facebook-metrics.clicks}}, Reactions: {{get-facebook-metrics.reactions}}


            Instagram — Impressions: {{get-instagram-metrics.impressions}}, Likes: {{get-instagram-metrics.likes}}, Comments: {{get-instagram-metrics.comments}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: analytics
      path: /adAnalyticsV2
      inputParameters:
      - name: campaign_id
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: facebook
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.facebook_token
    resources:
    - name: insights
      path: /{{campaign_id}}/insights
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-insights
        method: GET
  - type: http
    namespace: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media-insights
      path: /{{campaign_id}}/insights
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-media-insights
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://abbvie.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → social-media-brand-monitoring.yml

Queries promo data for Albertsons.

naftiko: '0.5'
info:
  label: Snowflake Promo Performance
  description: Queries promo data for Albertsons.
  tags:
  - analytics
  - snowflake
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-promo
      description: Query promos.
      inputParameters:
      - name: promo
        type: string
        description: Promo ID.
      call: snowflake.run-query
      with:
        promo: '{{promo}}'
      outputParameters:
      - name: redemptions
        type: integer
        mapping: $.data[0].REDEMPTIONS
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-promo-performance.yml

When Datadog detects an AWS cloud spend anomaly above threshold, creates a ServiceNow incident and alerts the FinOps team in Microsoft Teams. Enables rapid cost containment for Albertsons cloud-hosted retail and e-commerce platforms.

naftiko: '0.5'
info:
  label: Cloud FinOps Cost Anomaly Responder
  description: When Datadog detects an AWS cloud spend anomaly above threshold, creates a ServiceNow incident and alerts the FinOps team in Microsoft Teams. Enables rapid cost containment for Albertsons cloud-hosted retail and e-commerce platforms.
  tags:
  - finops
  - cloud
  - datadog
  - aws
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops-ops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given a Datadog alert ID and AWS account ID, retrieve alert context, open a ServiceNow incident, and notify the FinOps Teams channel. Use when AWS cloud spend exceeds expected thresholds.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog monitor alert ID for the cost anomaly.
      - name: aws_account_id
        in: body
        type: string
        description: The AWS account ID where the anomaly was detected.
      - name: threshold_percent
        in: body
        type: number
        description: The percentage over budget that triggered the alert.
      steps:
      - name: get-datadog-alert
        type: call
        call: datadog-finops.get-monitor
        with:
          monitor_id: '{{alert_id}}'
      - name: create-snow-incident
        type: call
        call: servicenow-finops.create-incident
        with:
          short_description: 'AWS cost anomaly: {{threshold_percent}}% over budget on {{aws_account_id}}'
          category: Cloud
          urgency: '2'
      - name: notify-finops
        type: call
        call: msteams-finops.send-message
        with:
          channel_id: finops-alerts
          message: 'Cost anomaly: {{threshold_percent}}% over budget. Account: {{aws_account_id}}. Incident: {{create-snow-incident.number}}'
  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: monitor
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow-finops
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      inputParameters:
      - name: short_description
        in: body
      - name: category
        in: body
      - name: urgency
        in: body
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cloud-finops-cost-anomaly-responder.yml

Orchestrates labor schedule optimizer for Albertsons across store-ops, snowflake, workday.

naftiko: '0.5'
info:
  label: Labor Schedule Optimizer
  description: Orchestrates labor schedule optimizer for Albertsons across store-ops, snowflake, workday.
  tags:
  - store-ops
  - snowflake
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: labor-schedule-optimizer
      description: Orchestrates labor schedule optimizer for Albertsons across store-ops, snowflake, workday.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM LABOR_SCHEDULE_OPTIMIZER
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Labor Schedule Optimizer done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → labor-schedule-optimizer.yml

Gets PO items for Albertsons.

naftiko: '0.5'
info:
  label: SAP PO Items
  description: Gets PO items for Albertsons.
  tags:
  - procurement
  - sap
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: erp
    port: 8080
    tools:
    - name: get-po-items
      description: Get PO items.
      inputParameters:
      - name: po
        type: string
        description: PO.
      call: sap.get-items
      with:
        po: '{{po}}'
      outputParameters:
      - name: items
        type: array
        mapping: $.d.results
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-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: items
      path: /A_PurchaseOrder('{{po}}')/to_PurchaseOrderItem
      inputParameters:
      - name: po
        in: path
      operations:
      - name: get-items
        method: GET
Open in Framework → View in Fleet → sap-po-items.yml

Pulls headcount totals from Workday by division and publishes the snapshot to Snowflake and Power BI for HR and finance leadership. Supports monthly workforce planning for Albertsons' 285,000+ employees across stores, distribution, and corporate.

naftiko: '0.5'
info:
  label: Workday Headcount Snapshot Report
  description: Pulls headcount totals from Workday by division and publishes the snapshot to Snowflake and Power BI for HR and finance leadership. Supports monthly workforce planning for Albertsons' 285,000+ employees across stores, distribution, and corporate.
  tags:
  - hr
  - reporting
  - workday
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: publish-headcount-snapshot
      description: Given a division code and reporting period, retrieve headcount from Workday, write the snapshot to Snowflake, and trigger a Power BI refresh. Use for monthly workforce headcount reporting.
      inputParameters:
      - name: division_code
        in: body
        type: string
        description: The Albertsons division code (e.g., SAFEWAY-WEST, VONS, JEWEL-OSCO).
      - name: reporting_period
        in: body
        type: string
        description: The reporting period in YYYY-MM format.
      steps:
      - name: get-headcount
        type: call
        call: workday-hr.get-workers
        with:
          division: '{{division_code}}'
      - name: write-snowflake
        type: call
        call: snowflake-hr.insert-rows
        with:
          table: HR.HEADCOUNT_SNAPSHOTS
          data: '{{get-headcount.workers}}'
      - name: refresh-powerbi
        type: call
        call: powerbi-hr.trigger-refresh
        with:
          dataset_id: $secrets.powerbi_headcount_dataset_id
  consumes:
  - type: http
    namespace: workday-hr
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      inputParameters:
      - name: division
        in: query
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: snowflake-hr
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: rows
      path: /statements
      inputParameters:
      - name: table
        in: body
      - name: data
        in: body
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: powerbi-hr
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refresh
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → workday-headcount-snapshot-report.yml

Orchestrates customer order resolution workflow for Albertsons across customer-service, salesforce, snowflake.

naftiko: '0.5'
info:
  label: Customer Order Resolution Workflow
  description: Orchestrates customer order resolution workflow for Albertsons across customer-service, salesforce, snowflake.
  tags:
  - customer-service
  - salesforce
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: customer-ops
    port: 8080
    tools:
    - name: customer-order-resolution-workflow
      description: Orchestrates customer order resolution workflow for Albertsons across customer-service, salesforce, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM CUSTOMER_ORDER_RESOLUTION_WORKFLOW
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Customer Order Resolution Workflow — {{store_id}}
          category: customer-service
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → customer-order-resolution-workflow.yml

Orchestrates eod reconciliation for Albertsons across store-ops, snowflake, sap.

naftiko: '0.5'
info:
  label: Eod Reconciliation
  description: Orchestrates eod reconciliation for Albertsons across store-ops, snowflake, sap.
  tags:
  - store-ops
  - snowflake
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: eod-reconciliation
      description: Orchestrates eod reconciliation for Albertsons across store-ops, snowflake, sap.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM EOD_RECONCILIATION
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Eod Reconciliation — {{store_id}}
          category: store-ops
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → eod-reconciliation.yml

Looks up SAP vendor for Albertsons.

naftiko: '0.5'
info:
  label: SAP Vendor Lookup
  description: Looks up SAP vendor for Albertsons.
  tags:
  - procurement
  - sap
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: erp
    port: 8080
    tools:
    - name: get-vendor
      description: Look up vendor.
      inputParameters:
      - name: vendor
        type: string
        description: Vendor number.
      call: sap.get-vendor
      with:
        vendor: '{{vendor}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.d.SupplierName
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: suppliers
      path: /A_Supplier('{{vendor}}')
      inputParameters:
      - name: vendor
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → sap-vendor-lookup.yml

When a vendor invoice is submitted in SAP Ariba, retrieves the matching SAP purchase order, validates line-item amounts, and triggers approval or routes an exception. Streamlines Albertsons accounts payable three-way matching for grocery and pharmacy suppliers.

naftiko: '0.5'
info:
  label: SAP Ariba Vendor Invoice Approval
  description: When a vendor invoice is submitted in SAP Ariba, retrieves the matching SAP purchase order, validates line-item amounts, and triggers approval or routes an exception. Streamlines Albertsons accounts payable three-way matching for grocery and pharmacy suppliers.
  tags:
  - finance
  - procurement
  - sap-ariba
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: ap-approval
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Given an Ariba invoice ID and SAP PO number, retrieve both records, validate amounts, and approve or flag an exception in Ariba. Use when a vendor invoice requires three-way match validation for Albertsons grocery or pharmacy suppliers.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The SAP Ariba invoice ID to process.
      - name: po_number
        in: body
        type: string
        description: The related SAP purchase order number.
      steps:
      - name: get-ariba-invoice
        type: call
        call: sap-ariba-ap.get-invoice
        with:
          invoiceId: '{{invoice_id}}'
      - name: get-sap-po
        type: call
        call: sap-s4-ap.get-purchase-order
        with:
          PurchaseOrder: '{{po_number}}'
      - name: approve-invoice
        type: call
        call: sap-ariba-ap.approve-invoice
        with:
          invoiceId: '{{invoice_id}}'
          status: Approved
  consumes:
  - type: http
    namespace: sap-ariba-ap
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: apikey
      key: apiKey
      value: $secrets.ariba_api_key
      placement: query
    resources:
    - name: invoice
      path: /invoices/{{invoiceId}}
      inputParameters:
      - name: invoiceId
        in: path
      operations:
      - name: get-invoice
        method: GET
      - name: approve-invoice
        method: PATCH
  - type: http
    namespace: sap-s4-ap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_s4_user
      password: $secrets.sap_s4_pass
    resources:
    - name: purchase-order
      path: /A_PurchaseOrder('{{PurchaseOrder}}')
      inputParameters:
      - name: PurchaseOrder
        in: path
      operations:
      - name: get-purchase-order
        method: GET
Open in Framework → View in Fleet → sap-ariba-vendor-invoice-approval.yml

Queries SAP S/4HANA for Albertsons financial period close status across legal entities, identifies open posting periods, and triggers a Power BI executive finance dashboard refresh. Supports month-end close for retail finance.

naftiko: '0.5'
info:
  label: SAP Period Close Status Check
  description: Queries SAP S/4HANA for Albertsons financial period close status across legal entities, identifies open posting periods, and triggers a Power BI executive finance dashboard refresh. Supports month-end close for retail finance.
  tags:
  - finance
  - period-close
  - sap-s4hana
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: get-period-close-status
      description: Given a fiscal year and period number, retrieve SAP posting period status and trigger a Power BI finance refresh. Use during month-end close to monitor financial period status for Albertsons divisions.
      inputParameters:
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year to check (e.g., 2025).
      - name: period
        in: body
        type: string
        description: The fiscal period number (e.g., 01 for January).
      steps:
      - name: get-posting-periods
        type: call
        call: sap-s4-close.get-posting-periods
        with:
          FiscalYear: '{{fiscal_year}}'
          FiscalPeriod: '{{period}}'
      - name: refresh-powerbi
        type: call
        call: powerbi-finance.trigger-refresh
        with:
          dataset_id: $secrets.powerbi_period_close_dataset_id
  consumes:
  - type: http
    namespace: sap-s4-close
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_FINANCIALACCOUNTING_SRV
    authentication:
      type: basic
      username: $secrets.sap_s4_user
      password: $secrets.sap_s4_pass
    resources:
    - name: posting-periods
      path: /A_FinancialAccountingPeriod
      inputParameters:
      - name: FiscalYear
        in: query
      - name: FiscalPeriod
        in: query
      operations:
      - name: get-posting-periods
        method: GET
  - type: http
    namespace: powerbi-finance
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refresh
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → sap-period-close-status-check.yml

Triggers GitHub Advanced Security code scanning on an Albertsons digital commerce or pharmacy repository, retrieves critical findings, and creates Jira security issues for remediation. Ensures PCI DSS compliance for cardholder data environments.

naftiko: '0.5'
info:
  label: GitHub Security Code Scan
  description: Triggers GitHub Advanced Security code scanning on an Albertsons digital commerce or pharmacy repository, retrieves critical findings, and creates Jira security issues for remediation. Ensures PCI DSS compliance for cardholder data environments.
  tags:
  - devops
  - security
  - github
  - jira
capability:
  exposes:
  - type: mcp
    namespace: code-security
    port: 8080
    tools:
    - name: scan-repository-security
      description: Given a GitHub repository name and branch, retrieve code scanning alerts for critical vulnerabilities and create Jira security issues. Use for pre-release PCI compliance validation of Albertsons payment and e-commerce repositories.
      inputParameters:
      - name: repo_owner
        in: body
        type: string
        description: The GitHub organization or owner name (e.g., albertsons-digital).
      - name: repo_name
        in: body
        type: string
        description: The repository name (e.g., checkout-api, pharmacy-portal).
      - name: branch
        in: body
        type: string
        description: The branch to scan (e.g., main, release/2025).
      steps:
      - name: get-code-alerts
        type: call
        call: github-sec.list-code-alerts
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          ref: '{{branch}}'
          severity: critical
      - name: create-jira-security-issue
        type: call
        call: jira-security.create-issue
        with:
          project_key: SEC
          summary: 'Security findings: {{repo_name}} on {{branch}}'
          description: '{{get-code-alerts.total_count}} critical findings detected. PCI remediation required.'
          issue_type: Bug
          priority: Critical
  consumes:
  - type: http
    namespace: github-sec
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: code-alerts
      path: /repos/{{owner}}/{{repo}}/code-scanning/alerts
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: ref
        in: query
      - name: severity
        in: query
      operations:
      - name: list-code-alerts
        method: GET
  - type: http
    namespace: jira-security
    baseUri: https://albertsons.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: project_key
        in: body
      - name: summary
        in: body
      - name: description
        in: body
      - name: issue_type
        in: body
      - name: priority
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-security-code-scan.yml

Orchestrates app release pipeline for Albertsons across devops, github, datadog.

naftiko: '0.5'
info:
  label: App Release Pipeline
  description: Orchestrates app release pipeline for Albertsons across devops, github, datadog.
  tags:
  - devops
  - github
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: platform-ops
    port: 8080
    tools:
    - name: app-release-pipeline
      description: Orchestrates app release pipeline for Albertsons across devops, github, datadog.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: App Release Pipeline — {{store_id}}
          category: devops
      - name: check-health
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: store-{{store_id}}
      - name: check-repo
        type: call
        call: github.get-repo
        with:
          repo: albertsons/{{store_id}}
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: 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
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{repo}}
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → app-release-pipeline.yml

When a Priority-1 incident impacting store POS or pharmacy systems is created in ServiceNow, retrieves Datadog alert context, pages the on-call engineer via PagerDuty, and notifies the store operations Teams channel. Ensures rapid resolution of retail-impacting outages across Albertsons' 2,200+ stores.

naftiko: '0.5'
info:
  label: Store IT Priority-1 Incident Triage
  description: When a Priority-1 incident impacting store POS or pharmacy systems is created in ServiceNow, retrieves Datadog alert context, pages the on-call engineer via PagerDuty, and notifies the store operations Teams channel. Ensures rapid resolution of retail-impacting outages across Albertsons' 2,200+ stores.
  tags:
  - itsm
  - incident-response
  - servicenow
  - datadog
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: handle-store-p1-incident
      description: Given a ServiceNow incident number and Datadog monitor ID, retrieve alert context, page the on-call team via PagerDuty, and alert the store operations Teams channel. Use when a P1 incident affecting store POS, pharmacy, or loyalty systems is opened.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID for the triggering alert.
      - name: affected_system
        in: body
        type: string
        description: The name of the affected system (e.g., POS, pharmacy-rx, loyalty-api).
      steps:
      - name: get-snow-incident
        type: call
        call: servicenow-it.get-incident
        with:
          number: '{{incident_number}}'
      - name: get-datadog-monitor
        type: call
        call: datadog-it.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: page-oncall
        type: call
        call: pagerduty-it.create-incident
        with:
          title: 'P1: {{get-snow-incident.short_description}} — {{affected_system}}'
          service_id: $secrets.pagerduty_store_service_id
          urgency: high
      - name: notify-store-ops
        type: call
        call: msteams-it.send-message
        with:
          channel_id: store-operations-alerts
          message: 'P1 ACTIVE: {{affected_system}} — {{get-snow-incident.short_description}}. PD: {{page-oncall.incident_number}}'
  consumes:
  - type: http
    namespace: servicenow-it
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: datadog-it
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitor
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: pagerduty-it
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incident
      path: /incidents
      inputParameters:
      - name: title
        in: body
      - name: service_id
        in: body
      - name: urgency
        in: body
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-it
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-it-priority-1-incident-triage.yml

Fetches weekly promotion performance data from Snowflake and sends it to Anthropic Claude for natural language summarization, then posts the summary to the marketing Teams channel and a Confluence page. Accelerates promotion review for Albertsons marketing teams.

naftiko: '0.5'
info:
  label: AI-Assisted Grocery Promotion Performance Summarization
  description: Fetches weekly promotion performance data from Snowflake and sends it to Anthropic Claude for natural language summarization, then posts the summary to the marketing Teams channel and a Confluence page. Accelerates promotion review for Albertsons marketing teams.
  tags:
  - ai
  - marketing
  - anthropic
  - snowflake
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: promo-ai
    port: 8080
    tools:
    - name: summarize-promotion-performance
      description: Given a promotion ID and reporting week, retrieve performance metrics from Snowflake, send to Anthropic Claude for natural language summarization, and publish to Confluence and Teams. Use for weekly promotion performance reviews.
      inputParameters:
      - name: promotion_id
        in: body
        type: string
        description: The Albertsons promotion ID (e.g., PROMO-2025-WK14-FRESH).
      - name: report_week
        in: body
        type: string
        description: The ISO week identifier for the report (e.g., 2025-W14).
      steps:
      - name: get-promo-data
        type: call
        call: snowflake-promo.query-promotion
        with:
          promotion_id: '{{promotion_id}}'
          week: '{{report_week}}'
      - name: summarize-with-claude
        type: call
        call: anthropic-promo.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 512
          messages: '[{"role":"user","content":"Summarize the following grocery promotion performance data for week {{report_week}}: {{get-promo-data.metrics}}"}]'
      - name: publish-confluence
        type: call
        call: confluence-promo.create-page
        with:
          space_key: MKT
          title: 'Promotion Summary: {{promotion_id}} — {{report_week}}'
          body: '{{summarize-with-claude.content}}'
      - name: notify-marketing-team
        type: call
        call: msteams-promo.send-message
        with:
          channel_id: marketing-analytics
          message: 'Promo summary for {{promotion_id}} ({{report_week}}) published. View: {{publish-confluence.url}}'
  consumes:
  - type: http
    namespace: snowflake-promo
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: promotion
      path: /statements
      inputParameters:
      - name: promotion_id
        in: body
      - name: week
        in: body
      operations:
      - name: query-promotion
        method: POST
  - type: http
    namespace: anthropic-promo
    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
      inputParameters:
      - name: model
        in: body
      - name: max_tokens
        in: body
      - name: messages
        in: body
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: confluence-promo
    baseUri: https://albertsons.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: page
      path: /content
      inputParameters:
      - name: space_key
        in: body
      - name: title
        in: body
      - name: body
        in: body
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams-promo
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-grocery-promotion-performance-summarization.yml

Submits a change request in ServiceNow for planned infrastructure or application changes, and notifies change advisory board approvers in Microsoft Teams. Supports Albertsons ITIL-compliant change governance for retail and e-commerce systems.

naftiko: '0.5'
info:
  label: ServiceNow Change Management Approval
  description: Submits a change request in ServiceNow for planned infrastructure or application changes, and notifies change advisory board approvers in Microsoft Teams. Supports Albertsons ITIL-compliant change governance for retail and e-commerce systems.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change title, risk level, and planned start date, create a ServiceNow change request and notify the CAB approval group in Teams. Use when planned changes to Albertsons POS, loyalty, or e-commerce systems require formal approval.
      inputParameters:
      - name: change_title
        in: body
        type: string
        description: The change request title (e.g., SAP S/4HANA quarterly patch).
      - name: risk_level
        in: body
        type: string
        description: The change risk level (low, medium, high).
      - name: planned_start
        in: body
        type: string
        description: Planned start date and time in ISO 8601 format.
      - name: assigned_group
        in: body
        type: string
        description: The ServiceNow assignment group responsible for the change.
      steps:
      - name: create-change-request
        type: call
        call: servicenow-change.create-change
        with:
          short_description: '{{change_title}}'
          risk: '{{risk_level}}'
          start_date: '{{planned_start}}'
          assignment_group: '{{assigned_group}}'
      - name: notify-cab
        type: call
        call: msteams-change.send-message
        with:
          channel_id: cab-approvals
          message: 'New change request: {{change_title}} ({{risk_level}} risk). CHG: {{create-change-request.number}}. Planned: {{planned_start}}'
  consumes:
  - type: http
    namespace: servicenow-change
    baseUri: https://albertsons.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: short_description
        in: body
      - name: risk
        in: body
      - name: start_date
        in: body
      - name: assignment_group
        in: body
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams-change
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-management-approval.yml

Checks SAP material availability for Albertsons.

naftiko: '0.5'
info:
  label: SAP Material Availability
  description: Checks SAP material availability for Albertsons.
  tags:
  - inventory
  - sap
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: erp
    port: 8080
    tools:
    - name: check-material
      description: Check material availability.
      inputParameters:
      - name: material
        type: string
        description: Material.
      - name: plant
        type: string
        description: Plant.
      call: sap.get-stock
      with:
        material: '{{material}}'
        plant: '{{plant}}'
      outputParameters:
      - name: on_hand
        type: number
        mapping: $.d.Quantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-stock
        method: GET
Open in Framework → View in Fleet → sap-material-availability.yml

Orchestrates employee promotion workflow for Albertsons across hr, workday, servicenow.

naftiko: '0.5'
info:
  label: Employee Promotion Workflow
  description: Orchestrates employee promotion workflow for Albertsons across hr, workday, servicenow.
  tags:
  - hr
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: employee-promotion-workflow
      description: Orchestrates employee promotion workflow for Albertsons across hr, workday, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Employee Promotion Workflow — {{store_id}}
          category: hr
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Employee Promotion Workflow done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → employee-promotion-workflow.yml

Orchestrates site incident response for Albertsons across e-commerce, datadog, servicenow.

naftiko: '0.5'
info:
  label: Site Incident Response
  description: Orchestrates site incident response for Albertsons across e-commerce, datadog, servicenow.
  tags:
  - e-commerce
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: platform-ops
    port: 8080
    tools:
    - name: site-incident-response
      description: Orchestrates site incident response for Albertsons across e-commerce, datadog, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Site Incident Response — {{store_id}}
          category: e-commerce
      - name: check-health
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: store-{{store_id}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Site Incident Response done.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → site-incident-response.yml

Orchestrates store inventory replenishment pipeline for Albertsons across inventory, snowflake, sap.

naftiko: '0.5'
info:
  label: Store Inventory Replenishment Pipeline
  description: Orchestrates store inventory replenishment pipeline for Albertsons across inventory, snowflake, sap.
  tags:
  - inventory
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: inventory-ops
    port: 8080
    tools:
    - name: store-inventory-replenishment-pipeline
      description: Orchestrates store inventory replenishment pipeline for Albertsons across inventory, snowflake, sap.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM STORE_INVENTORY_REPLENISHMENT_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Store Inventory Replenishment Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-inventory-replenishment-pipeline.yml

Enrolls customers in Albertsons loyalty program by creating Salesforce profiles, syncing Snowflake data, and sending confirmations via Teams.

naftiko: '0.5'
info:
  label: Customer Loyalty Enrollment
  description: Enrolls customers in Albertsons loyalty program by creating Salesforce profiles, syncing Snowflake data, and sending confirmations via Teams.
  tags:
  - loyalty
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: loyalty-ops
    port: 8080
    tools:
    - name: customer-loyalty-enrollment
      description: Enrolls customers in Albertsons loyalty by creating Salesforce profiles and syncing Snowflake data.
      inputParameters:
      - name: customer_email
        type: string
        description: Customer email.
      - name: store_id
        type: string
        description: Enrollment store.
      steps:
      - name: create-profile
        type: call
        call: salesforce.create-contact
        with:
          email: '{{customer_email}}'
          store: '{{store_id}}'
      - name: sync-data
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO LOYALTY_ENROLLMENTS VALUES ('{{customer_email}}', '{{store_id}}', CURRENT_TIMESTAMP())
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: loyalty-ops
          text: 'New loyalty enrollment: {{customer_email}} at Store {{store_id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-loyalty-enrollment.yml

Orchestrates warehouse capacity planner for Albertsons across supply-chain, snowflake, sap.

naftiko: '0.5'
info:
  label: Warehouse Capacity Planner
  description: Orchestrates warehouse capacity planner for Albertsons across supply-chain, snowflake, sap.
  tags:
  - supply-chain
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: warehouse-capacity-planner
      description: Orchestrates warehouse capacity planner for Albertsons across supply-chain, snowflake, sap.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM WAREHOUSE_CAPACITY_PLANNER
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Warehouse Capacity Planner done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → warehouse-capacity-planner.yml

Orchestrates daily ops report for Albertsons across store-ops, snowflake, datadog.

naftiko: '0.5'
info:
  label: Daily Ops Report
  description: Orchestrates daily ops report for Albertsons across store-ops, snowflake, datadog.
  tags:
  - store-ops
  - snowflake
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: daily-ops-report
      description: Orchestrates daily ops report for Albertsons across store-ops, snowflake, datadog.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM DAILY_OPS_REPORT
      - name: check-health
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: store-{{store_id}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Daily Ops Report done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.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: 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → daily-ops-report.yml

Searches contacts for Albertsons.

naftiko: '0.5'
info:
  label: Salesforce Contact Search
  description: Searches contacts for Albertsons.
  tags:
  - crm
  - salesforce
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: search-contacts
      description: Search contacts.
      inputParameters:
      - name: email
        type: string
        description: Email.
      call: salesforce.search
      with:
        email: '{{email}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /parameterizedSearch/?q={{email}}&sobject=Contact
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → salesforce-contact-search.yml

When a GitHub Actions pipeline fails on a critical retail or e-commerce repository, creates a Jira incident ticket, alerts the engineering team in Microsoft Teams, and logs the failure in Datadog. Supports Albertsons digital commerce platform reliability.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure Response
  description: When a GitHub Actions pipeline fails on a critical retail or e-commerce repository, creates a Jira incident ticket, alerts the engineering team in Microsoft Teams, and logs the failure in Datadog. Supports Albertsons digital commerce platform reliability.
  tags:
  - devops
  - cicd
  - github
  - jira
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cicd-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub repository name, workflow run ID, and branch, create a Jira incident, alert engineering in Teams, and log a Datadog event. Use when a CI/CD pipeline failure occurs on a critical branch for Albertsons digital systems.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name (e.g., albertsons-ecommerce, pharmacy-api).
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      - name: branch
        in: body
        type: string
        description: The branch where the failure occurred (e.g., main, release/2025).
      steps:
      - name: create-jira-issue
        type: call
        call: jira-eng.create-issue
        with:
          project_key: ENG
          summary: 'Pipeline failure: {{repo_name}} on {{branch}}'
          issue_type: Bug
          priority: High
      - name: notify-engineering
        type: call
        call: msteams-eng.send-message
        with:
          channel_id: engineering-alerts
          message: 'CI/CD failure in {{repo_name}} ({{branch}}). Jira: {{create-jira-issue.key}}. Run: {{run_id}}'
      - name: log-datadog
        type: call
        call: datadog-cicd.create-event
        with:
          title: 'Pipeline failure: {{repo_name}}'
          text: Run {{run_id}} failed on {{branch}}
          tags: repo:{{repo_name}},branch:{{branch}}
  consumes:
  - type: http
    namespace: jira-eng
    baseUri: https://albertsons.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: project_key
        in: body
      - name: summary
        in: body
      - name: issue_type
        in: body
      - name: priority
        in: body
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: datadog-cicd
    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
      inputParameters:
      - name: title
        in: body
      - name: text
        in: body
      - name: tags
        in: body
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-response.yml

Orchestrates offboarding pipeline for Albertsons across hr, workday, servicenow.

naftiko: '0.5'
info:
  label: Offboarding Pipeline
  description: Orchestrates offboarding pipeline for Albertsons across hr, workday, servicenow.
  tags:
  - hr
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: offboarding-pipeline
      description: Orchestrates offboarding pipeline for Albertsons across hr, workday, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Offboarding Pipeline — {{store_id}}
          category: hr
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Offboarding Pipeline done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → offboarding-pipeline.yml

Orchestrates staffing gap alerts for Albertsons across store-ops, workday, snowflake.

naftiko: '0.5'
info:
  label: Staffing Gap Alerts
  description: Orchestrates staffing gap alerts for Albertsons across store-ops, workday, snowflake.
  tags:
  - store-ops
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: staffing-gap-alerts
      description: Orchestrates staffing gap alerts for Albertsons across store-ops, workday, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM STAFFING_GAP_ALERTS
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Staffing Gap Alerts done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → staffing-gap-alerts.yml

Retrieves PTO balance for Albertsons.

naftiko: '0.5'
info:
  label: Workday PTO Balance
  description: Retrieves PTO balance for Albertsons.
  tags:
  - hr
  - workday
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-pto
      description: Check PTO balance.
      inputParameters:
      - name: worker_id
        type: string
        description: Worker ID.
      call: workday.get-pto
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: available
        type: number
        mapping: $.timeOff.available
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-off
      path: /albertsons/workers/{{worker_id}}/timeOff
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-pto
        method: GET
Open in Framework → View in Fleet → workday-pto-balance.yml

Orchestrates it incident escalation for Albertsons across infrastructure, datadog, servicenow.

naftiko: '0.5'
info:
  label: It Incident Escalation
  description: Orchestrates it incident escalation for Albertsons across infrastructure, datadog, servicenow.
  tags:
  - infrastructure
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: it-incident-escalation
      description: Orchestrates it incident escalation for Albertsons across infrastructure, datadog, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: It Incident Escalation — {{store_id}}
          category: infrastructure
      - name: check-health
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: store-{{store_id}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: It Incident Escalation done.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-incident-escalation.yml

Schedules bakery production for Albertsons by pulling Snowflake demand data, checking SAP ingredients, and notifying bakers via Teams.

naftiko: '0.5'
info:
  label: Bakery Production Schedule
  description: Schedules bakery production for Albertsons by pulling Snowflake demand data, checking SAP ingredients, and notifying bakers via Teams.
  tags:
  - store-ops
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: bakery-production-schedule
      description: Schedules bakery production for Albertsons by pulling Snowflake demand and checking SAP ingredients.
      inputParameters:
      - name: store_id
        type: string
        description: Store identifier.
      - name: date
        type: string
        description: Production date.
      steps:
      - name: get-demand
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT item, projected_qty FROM BAKERY_DEMAND WHERE store='{{store_id}}' AND date='{{date}}'
      - name: check-ingredients
        type: call
        call: sap.get-stock
        with:
          plant: '{{store_id}}'
          category: bakery
      - name: notify-bakers
        type: call
        call: msteams.send-message
        with:
          channel_id: store-{{store_id}}-bakery
          text: Bakery production schedule for {{date}} is ready.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-stock
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bakery-production-schedule.yml

Orchestrates inventory audit pipeline for Albertsons across inventory, sap, snowflake.

naftiko: '0.5'
info:
  label: Inventory Audit Pipeline
  description: Orchestrates inventory audit pipeline for Albertsons across inventory, sap, snowflake.
  tags:
  - inventory
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: inventory-ops
    port: 8080
    tools:
    - name: inventory-audit-pipeline
      description: Orchestrates inventory audit pipeline for Albertsons across inventory, sap, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM INVENTORY_AUDIT_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Inventory Audit Pipeline — {{store_id}}
          category: inventory
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → inventory-audit-pipeline.yml

Orchestrates associate onboarding flow for Albertsons across hr, workday, servicenow.

naftiko: '0.5'
info:
  label: Associate Onboarding Flow
  description: Orchestrates associate onboarding flow for Albertsons across hr, workday, servicenow.
  tags:
  - hr
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: associate-onboarding-flow
      description: Orchestrates associate onboarding flow for Albertsons across hr, workday, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Associate Onboarding Flow — {{store_id}}
          category: hr
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Associate Onboarding Flow done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → associate-onboarding-flow.yml

Audits meat department compliance for Albertsons by pulling ServiceNow inspection data, checking Snowflake temperature logs, and notifying via Teams.

naftiko: '0.5'
info:
  label: Meat Department Compliance Audit
  description: Audits meat department compliance for Albertsons by pulling ServiceNow inspection data, checking Snowflake temperature logs, and notifying via Teams.
  tags:
  - compliance
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: meat-department-compliance-audit
      description: Audits meat department compliance for Albertsons by pulling inspections and temperature logs.
      inputParameters:
      - name: store_id
        type: string
        description: Store identifier.
      - name: date
        type: string
        description: Audit date.
      steps:
      - name: get-inspections
        type: call
        call: servicenow.get-tasks
        with:
          store: '{{store_id}}'
          category: meat_compliance
      - name: check-temps
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT zone, avg_temp, max_temp FROM MEAT_TEMP_LOGS WHERE store='{{store_id}}' AND date='{{date}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: compliance-audits
          text: Meat dept compliance audit for Store {{store_id}} on {{date}} complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.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: get-tasks
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → meat-department-compliance-audit.yml

Sends Teams notification for Albertsons.

naftiko: '0.5'
info:
  label: Teams Notification
  description: Sends Teams notification for Albertsons.
  tags:
  - communication
  - microsoft-teams
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: messaging
    port: 8080
    tools:
    - name: send-notif
      description: Send notification.
      inputParameters:
      - name: channel
        type: string
        description: Channel.
      - name: text
        type: string
        description: Message.
      call: msteams.send
      with:
        channel: '{{channel}}'
        text: '{{text}}'
      outputParameters:
      - name: id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel}}/messages
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → teams-notification.yml

Orchestrates benefits enrollment pipeline for Albertsons across hr, workday, servicenow.

naftiko: '0.5'
info:
  label: Benefits Enrollment Pipeline
  description: Orchestrates benefits enrollment pipeline for Albertsons across hr, workday, servicenow.
  tags:
  - hr
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: benefits-enrollment-pipeline
      description: Orchestrates benefits enrollment pipeline for Albertsons across hr, workday, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Benefits Enrollment Pipeline — {{store_id}}
          category: hr
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Benefits Enrollment Pipeline done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → benefits-enrollment-pipeline.yml

Triggers a Power BI dataset refresh for the Albertsons executive store sales dashboard and notifies the retail leadership team in Microsoft Teams. Ensures leadership has current same-store sales and division performance data.

naftiko: '0.5'
info:
  label: Power BI Store Sales Executive Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the Albertsons executive store sales dashboard and notifies the retail leadership team in Microsoft Teams. Ensures leadership has current same-store sales and division performance data.
  tags:
  - reporting
  - power-bi
  - microsoft-teams
  - retail
capability:
  exposes:
  - type: mcp
    namespace: store-reporting
    port: 8080
    tools:
    - name: refresh-sales-dashboard
      description: Given a Power BI dataset ID and reporting date, trigger a refresh of the store sales executive dashboard and notify retail leadership in Teams. Use at the start of each business day or before executive sales reviews.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the store sales dashboard.
      - name: report_date
        in: body
        type: string
        description: The reporting date in YYYY-MM-DD format.
      steps:
      - name: trigger-powerbi-refresh
        type: call
        call: powerbi-store.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-retail-leadership
        type: call
        call: msteams-store.send-message
        with:
          channel_id: retail-leadership
          message: 'Store sales dashboard refreshed for {{report_date}}. Dataset: {{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi-store
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refresh
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams-store
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-store-sales-executive-dashboard-refresh.yml

Queries Snowflake for the execution status of retail data ingestion pipelines covering sales, inventory, and loyalty data feeds, identifies failures, and creates Jira tickets for data engineering remediation.

naftiko: '0.5'
info:
  label: Snowflake Retail Data Pipeline Health Check
  description: Queries Snowflake for the execution status of retail data ingestion pipelines covering sales, inventory, and loyalty data feeds, identifies failures, and creates Jira tickets for data engineering remediation.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - retail
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: check-retail-pipeline-health
      description: Given a pipeline prefix and lookback window in hours, query Snowflake task history for failures and open Jira tickets for each failed pipeline. Use for daily retail data pipeline health reviews.
      inputParameters:
      - name: pipeline_prefix
        in: body
        type: string
        description: The Snowflake task name prefix (e.g., SALES_, INVENTORY_, LOYALTY_).
      - name: lookback_hours
        in: body
        type: integer
        description: Number of hours to look back for failed pipeline tasks.
      steps:
      - name: query-snowflake-tasks
        type: call
        call: snowflake-data.query-tasks
        with:
          prefix: '{{pipeline_prefix}}'
          hours: '{{lookback_hours}}'
      - name: create-jira-task
        type: call
        call: jira-data.create-issue
        with:
          project_key: DATA
          summary: 'Retail pipeline failures: {{pipeline_prefix}}'
          description: '{{query-snowflake-tasks.failed_count}} tasks failed in the last {{lookback_hours}} hours.'
          issue_type: Task
  consumes:
  - type: http
    namespace: snowflake-data
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: tasks
      path: /statements
      inputParameters:
      - name: prefix
        in: body
      - name: hours
        in: body
      operations:
      - name: query-tasks
        method: POST
  - type: http
    namespace: jira-data
    baseUri: https://albertsons.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: project_key
        in: body
      - name: summary
        in: body
      - name: description
        in: body
      - name: issue_type
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → snowflake-retail-data-pipeline-health-check.yml

Orchestrates store opening readiness check for Albertsons across store-ops, datadog, workday.

naftiko: '0.5'
info:
  label: Store Opening Readiness Check
  description: Orchestrates store opening readiness check for Albertsons across store-ops, datadog, workday.
  tags:
  - store-ops
  - datadog
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: store-opening-readiness-check
      description: Orchestrates store opening readiness check for Albertsons across store-ops, datadog, workday.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: check-health
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: store-{{store_id}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Store Opening Readiness Check done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → store-opening-readiness-check.yml

Orchestrates security incident handler for Albertsons across security, servicenow, datadog.

naftiko: '0.5'
info:
  label: Security Incident Handler
  description: Orchestrates security incident handler for Albertsons across security, servicenow, datadog.
  tags:
  - security
  - servicenow
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: security-incident-handler
      description: Orchestrates security incident handler for Albertsons across security, servicenow, datadog.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Security Incident Handler — {{store_id}}
          category: security
      - name: check-health
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: store-{{store_id}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Security Incident Handler done.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → security-incident-handler.yml

Orchestrates marketing roi tracker for Albertsons across marketing, snowflake, salesforce.

naftiko: '0.5'
info:
  label: Marketing Roi Tracker
  description: Orchestrates marketing roi tracker for Albertsons across marketing, snowflake, salesforce.
  tags:
  - marketing
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-ops
    port: 8080
    tools:
    - name: marketing-roi-tracker
      description: Orchestrates marketing roi tracker for Albertsons across marketing, snowflake, salesforce.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM MARKETING_ROI_TRACKER
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Marketing Roi Tracker done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → marketing-roi-tracker.yml

Retrieves Net Promoter Score survey responses from Salesforce for Albertsons store shoppers, computes NPS by banner and region, and writes the results to Snowflake for the customer experience analytics team.

naftiko: '0.5'
info:
  label: Salesforce Customer NPS Survey Sync
  description: Retrieves Net Promoter Score survey responses from Salesforce for Albertsons store shoppers, computes NPS by banner and region, and writes the results to Snowflake for the customer experience analytics team.
  tags:
  - crm
  - customer-experience
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cx-analytics
    port: 8080
    tools:
    - name: sync-nps-survey-results
      description: Given a date range and store banner filter, retrieve NPS survey responses from Salesforce, and write aggregate results to Snowflake. Use for weekly CX reporting across Albertsons, Safeway, Vons, and other banners.
      inputParameters:
      - name: date_from
        in: body
        type: string
        description: Start date for NPS survey retrieval in YYYY-MM-DD format.
      - name: date_to
        in: body
        type: string
        description: End date for NPS survey retrieval in YYYY-MM-DD format.
      - name: banner
        in: body
        type: string
        description: The store banner to filter (e.g., ALBERTSONS, SAFEWAY, VONS, ALL).
      steps:
      - name: get-nps-responses
        type: call
        call: salesforce-nps.query-surveys
        with:
          q: SELECT Id, ABS_NPS_Score__c, ABS_Banner__c, ABS_Region__c, CreatedDate FROM ABS_Survey__c WHERE CreatedDate >= {{date_from}} AND CreatedDate <= {{date_to}} AND ABS_Banner__c = '{{banner}}'
      - name: write-snowflake-nps
        type: call
        call: snowflake-nps.insert-rows
        with:
          table: CX.NPS_SURVEY_RESPONSES
          data: '{{get-nps-responses.records}}'
  consumes:
  - type: http
    namespace: salesforce-nps
    baseUri: https://albertsons.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: surveys
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-surveys
        method: GET
  - type: http
    namespace: snowflake-nps
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: rows
      path: /statements
      inputParameters:
      - name: table
        in: body
      - name: data
        in: body
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → salesforce-customer-nps-survey-sync.yml

Checks change request for Albertsons.

naftiko: '0.5'
info:
  label: ServiceNow Change Status
  description: Checks change request for Albertsons.
  tags:
  - itsm
  - servicenow
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-change
      description: Look up change.
      inputParameters:
      - name: change
        type: string
        description: Change number.
      call: servicenow.get-change
      with:
        change: '{{change}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.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}}
      inputParameters:
      - name: change
        in: query
      operations:
      - name: get-change
        method: GET
Open in Framework → View in Fleet → servicenow-change-status.yml

Retrieves payroll results from Workday for a pay cycle, compares totals against the prior period stored in Snowflake, and creates a Jira variance review task if the delta exceeds threshold. Supports Albertsons payroll integrity across all divisions and employment types.

naftiko: '0.5'
info:
  label: Workday Payroll Reconciliation
  description: Retrieves payroll results from Workday for a pay cycle, compares totals against the prior period stored in Snowflake, and creates a Jira variance review task if the delta exceeds threshold. Supports Albertsons payroll integrity across all divisions and employment types.
  tags:
  - hr
  - payroll
  - workday
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: payroll-ops
    port: 8080
    tools:
    - name: reconcile-payroll
      description: Given a Workday pay group ID and variance threshold percentage, retrieve payroll totals, compare against prior period from Snowflake, and create a Jira review task if variance exceeds the threshold. Use for weekly or bi-weekly payroll reconciliation.
      inputParameters:
      - name: pay_group_id
        in: body
        type: string
        description: The Workday pay group ID (e.g., WEEKLY-STORE, BIWEEKLY-CORP).
      - name: variance_threshold_pct
        in: body
        type: number
        description: The percentage variance above which a Jira review task is created (e.g., 3.0 for 3%).
      steps:
      - name: get-payroll-results
        type: call
        call: workday-payroll.get-pay-run
        with:
          pay_group_id: '{{pay_group_id}}'
      - name: query-prior-period
        type: call
        call: snowflake-payroll.query-prior
        with:
          pay_group_id: '{{pay_group_id}}'
      - name: create-variance-task
        type: call
        call: jira-payroll.create-issue
        with:
          project_key: PAY
          summary: 'Payroll variance: {{pay_group_id}}'
          description: Variance above {{variance_threshold_pct}}% detected versus prior period. Finance review required.
          issue_type: Task
  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: pay-run
      path: /albertsons/payrollResults
      inputParameters:
      - name: pay_group_id
        in: query
      operations:
      - name: get-pay-run
        method: GET
  - type: http
    namespace: snowflake-payroll
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: prior
      path: /statements
      inputParameters:
      - name: pay_group_id
        in: body
      operations:
      - name: query-prior
        method: POST
  - type: http
    namespace: jira-payroll
    baseUri: https://albertsons.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: project_key
        in: body
      - name: summary
        in: body
      - name: description
        in: body
      - name: issue_type
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → workday-payroll-reconciliation.yml

Orchestrates vendor invoice matching pipeline for Albertsons across procurement, sap, servicenow.

naftiko: '0.5'
info:
  label: Vendor Invoice Matching Pipeline
  description: Orchestrates vendor invoice matching pipeline for Albertsons across procurement, sap, servicenow.
  tags:
  - procurement
  - sap
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: vendor-invoice-matching-pipeline
      description: Orchestrates vendor invoice matching pipeline for Albertsons across procurement, sap, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM VENDOR_INVOICE_MATCHING_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Vendor Invoice Matching Pipeline — {{store_id}}
          category: procurement
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → vendor-invoice-matching-pipeline.yml

Queries Snowflake sales data for Albertsons.

naftiko: '0.5'
info:
  label: Snowflake Sales Query
  description: Queries Snowflake sales data for Albertsons.
  tags:
  - analytics
  - snowflake
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: query-sales
      description: Query sales data.
      inputParameters:
      - name: store_id
        type: string
        description: Store ID.
      - name: period
        type: string
        description: Period.
      call: snowflake.run-query
      with:
        store_id: '{{store_id}}'
        period: '{{period}}'
      outputParameters:
      - name: revenue
        type: number
        mapping: $.data[0].REVENUE
      - name: count
        type: integer
        mapping: $.data[0].TXN_COUNT
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-sales-query.yml

Checks synthetic test for Albertsons.

naftiko: '0.5'
info:
  label: Datadog Synthetic Test
  description: Checks synthetic test for Albertsons.
  tags:
  - monitoring
  - datadog
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: get-synthetic
      description: Check synthetic.
      inputParameters:
      - name: test_id
        type: string
        description: Test ID.
      call: datadog.get-test
      with:
        test_id: '{{test_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.results[0].status
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: synthetics
      path: /synthetics/tests/{{test_id}}/results
      inputParameters:
      - name: test_id
        in: path
      operations:
      - name: get-test
        method: GET
Open in Framework → View in Fleet → datadog-synthetic-test.yml

Plans deli production for Albertsons by pulling Snowflake demand forecasts, checking SAP ingredient inventory, and notifying deli teams via Teams.

naftiko: '0.5'
info:
  label: Deli Production Planning
  description: Plans deli production for Albertsons by pulling Snowflake demand forecasts, checking SAP ingredient inventory, and notifying deli teams via Teams.
  tags:
  - store-ops
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: deli-production-planning
      description: Plans deli production for Albertsons by pulling Snowflake demand forecasts and SAP ingredient checks.
      inputParameters:
      - name: store_id
        type: string
        description: Store identifier.
      - name: date
        type: string
        description: Production date.
      steps:
      - name: get-demand
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT item, projected_qty FROM DELI_DEMAND WHERE store='{{store_id}}' AND date='{{date}}'
      - name: check-ingredients
        type: call
        call: sap.get-stock
        with:
          plant: '{{store_id}}'
          category: deli_ingredients
      - name: notify-deli
        type: call
        call: msteams.send-message
        with:
          channel_id: store-{{store_id}}-deli
          text: Deli production plan for {{date}} is ready.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-stock
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → deli-production-planning.yml

Orchestrates supply chain delay handler for Albertsons across supply-chain, sap, servicenow.

naftiko: '0.5'
info:
  label: Supply Chain Delay Handler
  description: Orchestrates supply chain delay handler for Albertsons across supply-chain, sap, servicenow.
  tags:
  - supply-chain
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: supply-chain-delay-handler
      description: Orchestrates supply chain delay handler for Albertsons across supply-chain, sap, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Supply Chain Delay Handler — {{store_id}}
          category: supply-chain
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Supply Chain Delay Handler done.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-delay-handler.yml

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft Teams workspace, and sends a welcome notification to the hiring manager. Ensures day-one readiness for Albertsons store, pharmacy, and corporate staff.

naftiko: '0.5'
info:
  label: New Employee Onboarding Orchestration
  description: When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft Teams workspace, and sends a welcome notification to the hiring manager. Ensures day-one readiness for Albertsons store, pharmacy, and corporate staff.
  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 worker ID and start date, orchestrate the full onboarding sequence across ServiceNow for ticket creation and Microsoft Teams for welcome notification. Invoke when a new hire record is confirmed in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The new hire's start date in ISO 8601 format (YYYY-MM-DD).
      - name: department
        in: body
        type: string
        description: The department the employee is joining (e.g., Store Ops, Pharmacy, Corporate).
      steps:
      - name: get-worker
        type: call
        call: workday-onboard.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: create-onboarding-ticket
        type: call
        call: servicenow-onboard.create-incident
        with:
          short_description: 'Onboarding: {{get-worker.display_name}}'
          caller_id: '{{get-worker.manager_email}}'
          assignment_group: IT Onboarding
      - name: notify-manager
        type: call
        call: msteams-hr.send-message
        with:
          channel_id: '{{department}}-general'
          message: 'Welcome {{get-worker.display_name}} joining on {{start_date}}! Ticket: {{create-onboarding-ticket.number}}'
  consumes:
  - type: http
    namespace: workday-onboard
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: worker
      path: /albertsons/workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow-onboard
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      inputParameters:
      - name: short_description
        in: body
      - name: caller_id
        in: body
      - name: assignment_group
        in: body
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-hr
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-employee-onboarding-orchestration.yml

Orchestrates churn prevention pipeline for Albertsons across loyalty, snowflake, salesforce.

naftiko: '0.5'
info:
  label: Churn Prevention Pipeline
  description: Orchestrates churn prevention pipeline for Albertsons across loyalty, snowflake, salesforce.
  tags:
  - loyalty
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: loyalty-ops
    port: 8080
    tools:
    - name: churn-prevention-pipeline
      description: Orchestrates churn prevention pipeline for Albertsons across loyalty, snowflake, salesforce.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM CHURN_PREVENTION_PIPELINE
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Churn Prevention Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → churn-prevention-pipeline.yml

Orchestrates supplier onboarding flow for Albertsons across supply-chain, sap, servicenow.

naftiko: '0.5'
info:
  label: Supplier Onboarding Flow
  description: Orchestrates supplier onboarding flow for Albertsons across supply-chain, sap, servicenow.
  tags:
  - supply-chain
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: supplier-onboarding-flow
      description: Orchestrates supplier onboarding flow for Albertsons across supply-chain, sap, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Supplier Onboarding Flow — {{store_id}}
          category: supply-chain
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Supplier Onboarding Flow done.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-onboarding-flow.yml

When an employee departure is confirmed in Workday, deactivates the Microsoft Entra ID account and notifies the manager via Teams. Ensures complete offboarding for Albertsons store, pharmacy, and corporate employees.

naftiko: '0.5'
info:
  label: Employee Offboarding Orchestration
  description: When an employee departure is confirmed in Workday, deactivates the Microsoft Entra ID account and notifies the manager via Teams. Ensures complete offboarding for Albertsons store, pharmacy, and corporate employees.
  tags:
  - hr
  - offboarding
  - workday
  - microsoft-entra
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-employee-offboarding
      description: Given a Workday employee ID and last working day, disable the Entra ID account and notify the manager in Teams. Use when an employee departure is confirmed in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: last_working_day
        in: body
        type: string
        description: The employee's last working day in ISO 8601 format (YYYY-MM-DD).
      steps:
      - name: get-worker
        type: call
        call: workday-off.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: disable-entra-account
        type: call
        call: entra-id.disable-user
        with:
          userPrincipalName: '{{get-worker.email}}'
          accountEnabled: false
      - name: notify-manager
        type: call
        call: msteams-off.send-message
        with:
          channel_id: '{{get-worker.manager_email}}'
          message: 'Offboarding complete for {{get-worker.display_name}}. Last day: {{last_working_day}}. 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: worker
      path: /albertsons/workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: entra-id
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: user
      path: /users/{{userPrincipalName}}
      inputParameters:
      - name: userPrincipalName
        in: path
      - name: accountEnabled
        in: body
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: msteams-off
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /users/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-offboarding-orchestration.yml

Orchestrates payment processing pipeline for Albertsons across procurement, sap, snowflake.

naftiko: '0.5'
info:
  label: Payment Processing Pipeline
  description: Orchestrates payment processing pipeline for Albertsons across procurement, sap, snowflake.
  tags:
  - procurement
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: payment-processing-pipeline
      description: Orchestrates payment processing pipeline for Albertsons across procurement, sap, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM PAYMENT_PROCESSING_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Payment Processing Pipeline — {{store_id}}
          category: procurement
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → payment-processing-pipeline.yml

Manages curbside pickup for Albertsons by checking Salesforce orders, verifying Snowflake inventory, and notifying associates via Teams.

naftiko: '0.5'
info:
  label: Curbside Pickup Workflow
  description: Manages curbside pickup for Albertsons by checking Salesforce orders, verifying Snowflake inventory, and notifying associates via Teams.
  tags:
  - e-commerce
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-ops
    port: 8080
    tools:
    - name: curbside-pickup-workflow
      description: Manages curbside pickup for Albertsons by checking orders and verifying inventory.
      inputParameters:
      - name: order_id
        type: string
        description: Order identifier.
      - name: store_id
        type: string
        description: Pickup store.
      steps:
      - name: get-order
        type: call
        call: salesforce.get-order
        with:
          order_id: '{{order_id}}'
      - name: verify-inventory
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT sku, available_qty FROM STORE_INVENTORY WHERE store='{{store_id}}' AND sku IN (SELECT sku FROM ORDER_ITEMS WHERE order_id='{{order_id}}')
      - name: notify-associate
        type: call
        call: msteams.send-message
        with:
          channel_id: store-{{store_id}}-curbside
          text: Curbside order {{order_id}} ready for picking.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → curbside-pickup-workflow.yml

Orchestrates vendor performance scorecard for Albertsons across supply-chain, sap, snowflake.

naftiko: '0.5'
info:
  label: Vendor Performance Scorecard
  description: Orchestrates vendor performance scorecard for Albertsons across supply-chain, sap, snowflake.
  tags:
  - supply-chain
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: vendor-performance-scorecard
      description: Orchestrates vendor performance scorecard for Albertsons across supply-chain, sap, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM VENDOR_PERFORMANCE_SCORECARD
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Vendor Performance Scorecard done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-performance-scorecard.yml

Orchestrates shrinkage investigation for Albertsons across store-ops, snowflake, servicenow.

naftiko: '0.5'
info:
  label: Shrinkage Investigation
  description: Orchestrates shrinkage investigation for Albertsons across store-ops, snowflake, servicenow.
  tags:
  - store-ops
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: loss-prevention
    port: 8080
    tools:
    - name: shrinkage-investigation
      description: Orchestrates shrinkage investigation for Albertsons across store-ops, snowflake, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM SHRINKAGE_INVESTIGATION
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Shrinkage Investigation — {{store_id}}
          category: store-ops
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Shrinkage Investigation done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.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: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → shrinkage-investigation.yml

Retrieves purchase order details from SAP S/4HANA given a PO number. Used by Albertsons procurement and finance teams to verify order status, vendor, and line-item details without accessing the ERP UI.

naftiko: '0.5'
info:
  label: SAP Purchase Order Lookup
  description: Retrieves purchase order details from SAP S/4HANA given a PO number. Used by Albertsons procurement and finance teams to verify order status, vendor, and line-item details without accessing the ERP UI.
  tags:
  - finance
  - procurement
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP purchase order number, retrieve full PO details including vendor, line items, delivery date, and status from SAP S/4HANA. Use when an agent or user needs to verify grocery or pharmacy procurement PO data.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number (e.g., 4500098765).
      call: sap-s4.get-purchase-order
      with:
        PurchaseOrder: '{{po_number}}'
      outputParameters:
      - name: vendor
        type: string
        mapping: $.d.Supplier
      - name: status
        type: string
        mapping: $.d.PurchaseOrderStatus
      - name: total_net_amount
        type: string
        mapping: $.d.PurchaseOrderNetAmount
  consumes:
  - type: http
    namespace: sap-s4
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_s4_user
      password: $secrets.sap_s4_pass
    resources:
    - name: purchase-order
      path: /A_PurchaseOrder('{{PurchaseOrder}}')
      inputParameters:
      - name: PurchaseOrder
        in: path
      operations:
      - name: get-purchase-order
        method: GET
Open in Framework → View in Fleet → sap-purchase-order-lookup.yml

Checks Datadog monitor status for Albertsons.

naftiko: '0.5'
info:
  label: Datadog Monitor Health
  description: Checks Datadog monitor status for Albertsons.
  tags:
  - monitoring
  - datadog
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: check-monitor
      description: Check Datadog monitor.
      inputParameters:
      - name: monitor_id
        type: string
        description: Monitor ID.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.overall_state
      - name: name
        type: string
        mapping: $.name
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-monitor-health.yml

Manages perishable markdowns for Albertsons by analyzing Snowflake expiration data, updating SAP prices, and notifying stores via Teams.

naftiko: '0.5'
info:
  label: Perishable Markdown Pipeline
  description: Manages perishable markdowns for Albertsons by analyzing Snowflake expiration data, updating SAP prices, and notifying stores via Teams.
  tags:
  - e-commerce
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pricing-ops
    port: 8080
    tools:
    - name: perishable-markdown-pipeline
      description: Manages perishable markdowns for Albertsons by analyzing Snowflake expiration data and updating SAP.
      inputParameters:
      - name: store_id
        type: string
        description: Store identifier.
      - name: date
        type: string
        description: Date.
      steps:
      - name: get-expiring
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT sku, expiry_date, current_price FROM PERISHABLE_INVENTORY WHERE store='{{store_id}}' AND expiry_date <= DATEADD(day, 2, '{{date}}')
      - name: update-prices
        type: call
        call: sap.update-pricing
        with:
          plant: '{{store_id}}'
          markdown_type: perishable
      - name: notify-store
        type: call
        call: msteams.send-message
        with:
          channel_id: store-{{store_id}}-ops
          text: Perishable markdowns applied for {{date}}.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_SLSPRICINGCONDITIONRECORD_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: pricing
      path: /A_SlsPrcgCndnRecdValidity
      operations:
      - name: update-pricing
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → perishable-markdown-pipeline.yml

Orchestrates catalog sync pipeline for Albertsons across inventory, sap, snowflake.

naftiko: '0.5'
info:
  label: Catalog Sync Pipeline
  description: Orchestrates catalog sync pipeline for Albertsons across inventory, sap, snowflake.
  tags:
  - inventory
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: merchandising
    port: 8080
    tools:
    - name: catalog-sync-pipeline
      description: Orchestrates catalog sync pipeline for Albertsons across inventory, sap, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM CATALOG_SYNC_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Catalog Sync Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → catalog-sync-pipeline.yml

Orchestrates compliance review pipeline for Albertsons across compliance, servicenow, snowflake.

naftiko: '0.5'
info:
  label: Compliance Review Pipeline
  description: Orchestrates compliance review pipeline for Albertsons across compliance, servicenow, snowflake.
  tags:
  - compliance
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: compliance-review-pipeline
      description: Orchestrates compliance review pipeline for Albertsons across compliance, servicenow, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM COMPLIANCE_REVIEW_PIPELINE
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Compliance Review Pipeline — {{store_id}}
          category: compliance
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Compliance Review Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.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: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-review-pipeline.yml

Tracks grocery deliveries for Albertsons by checking SAP shipment status, updating Snowflake logistics, and notifying stores via Teams.

naftiko: '0.5'
info:
  label: Grocery Delivery Tracking
  description: Tracks grocery deliveries for Albertsons by checking SAP shipment status, updating Snowflake logistics, and notifying stores via Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: grocery-delivery-tracking
      description: Tracks grocery deliveries for Albertsons by checking SAP shipment status and updating Snowflake logistics.
      inputParameters:
      - name: shipment_id
        type: string
        description: Shipment identifier.
      - name: store_id
        type: string
        description: Destination store.
      steps:
      - name: check-shipment
        type: call
        call: sap.get-delivery
        with:
          shipment_id: '{{shipment_id}}'
      - name: update-logistics
        type: call
        call: snowflake.run-query
        with:
          statement: UPDATE DELIVERY_TRACKING SET status='{{check-shipment.status}}' WHERE shipment_id='{{shipment_id}}'
      - name: notify-store
        type: call
        call: msteams.send-message
        with:
          channel_id: store-{{store_id}}-receiving
          text: 'Delivery {{shipment_id}} status: {{check-shipment.status}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV_V2
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /A_OutbDeliveryHeader('{{shipment_id}}')
      inputParameters:
      - name: shipment_id
        in: path
      operations:
      - name: get-delivery
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → grocery-delivery-tracking.yml

Orchestrates store safety audit pipeline for Albertsons across store-ops, servicenow, workday.

naftiko: '0.5'
info:
  label: Store Safety Audit Pipeline
  description: Orchestrates store safety audit pipeline for Albertsons across store-ops, servicenow, workday.
  tags:
  - store-ops
  - servicenow
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: safety-ops
    port: 8080
    tools:
    - name: store-safety-audit-pipeline
      description: Orchestrates store safety audit pipeline for Albertsons across store-ops, servicenow, workday.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Store Safety Audit Pipeline — {{store_id}}
          category: store-ops
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Store Safety Audit Pipeline done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → store-safety-audit-pipeline.yml

Orchestrates cost optimization pipeline for Albertsons across infrastructure, snowflake, servicenow.

naftiko: '0.5'
info:
  label: Cost Optimization Pipeline
  description: Orchestrates cost optimization pipeline for Albertsons across infrastructure, snowflake, servicenow.
  tags:
  - infrastructure
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: cost-optimization-pipeline
      description: Orchestrates cost optimization pipeline for Albertsons across infrastructure, snowflake, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM COST_OPTIMIZATION_PIPELINE
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Cost Optimization Pipeline — {{store_id}}
          category: infrastructure
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Cost Optimization Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.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: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cost-optimization-pipeline.yml

Orchestrates contract renewal alerts for Albertsons across procurement, sap, servicenow.

naftiko: '0.5'
info:
  label: Contract Renewal Alerts
  description: Orchestrates contract renewal alerts for Albertsons across procurement, sap, servicenow.
  tags:
  - procurement
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: contract-renewal-alerts
      description: Orchestrates contract renewal alerts for Albertsons across procurement, sap, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Contract Renewal Alerts — {{store_id}}
          category: procurement
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Contract Renewal Alerts done.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → contract-renewal-alerts.yml

Retrieves employee profile from Workday for Albertsons.

naftiko: '0.5'
info:
  label: Workday Employee Directory
  description: Retrieves employee profile from Workday for Albertsons.
  tags:
  - hr
  - workday
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-employee-dir
      description: Look up Workday employee.
      inputParameters:
      - name: worker_id
        type: string
        description: Workday worker ID.
      call: workday.get-worker
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.worker.name.formatted
      - name: title
        type: string
        mapping: $.worker.position.title
  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: /albertsons/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-directory.yml

Retrieves SLO compliance history from Datadog for Albertsons customer-facing e-commerce and pharmacy applications, publishes the weekly report to Confluence, and refreshes the Power BI operations dashboard.

naftiko: '0.5'
info:
  label: Datadog Application SLO Report
  description: Retrieves SLO compliance history from Datadog for Albertsons customer-facing e-commerce and pharmacy applications, publishes the weekly report to Confluence, and refreshes the Power BI operations dashboard.
  tags:
  - observability
  - slo
  - datadog
  - confluence
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: publish-slo-report
      description: Given a Datadog SLO ID list and report week, retrieve SLO compliance data, publish to Confluence, and refresh Power BI. Use for weekly SLO reviews for Albertsons.com, pharmacy portal, and loyalty API.
      inputParameters:
      - name: slo_ids
        in: body
        type: string
        description: Comma-separated Datadog SLO IDs to include in the report.
      - name: report_week
        in: body
        type: string
        description: The ISO week identifier for the report (e.g., 2025-W14).
      steps:
      - name: get-slo-history
        type: call
        call: datadog-slo.get-slo-history
        with:
          slo_ids: '{{slo_ids}}'
      - name: publish-confluence-page
        type: call
        call: confluence-slo.create-page
        with:
          space_key: OPS
          title: SLO Report — {{report_week}}
          body: 'Weekly SLO compliance: {{get-slo-history.summary}}'
      - name: refresh-powerbi
        type: call
        call: powerbi-slo.trigger-refresh
        with:
          dataset_id: $secrets.powerbi_slo_dataset_id
  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: slo_ids
        in: query
      operations:
      - name: get-slo-history
        method: GET
  - type: http
    namespace: confluence-slo
    baseUri: https://albertsons.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: page
      path: /content
      inputParameters:
      - name: space_key
        in: body
      - name: title
        in: body
      - name: body
        in: body
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: powerbi-slo
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refresh
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → datadog-application-slo-report.yml

Orchestrates shipment tracking pipeline for Albertsons across supply-chain, sap, snowflake.

naftiko: '0.5'
info:
  label: Shipment Tracking Pipeline
  description: Orchestrates shipment tracking pipeline for Albertsons across supply-chain, sap, snowflake.
  tags:
  - supply-chain
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: shipment-tracking-pipeline
      description: Orchestrates shipment tracking pipeline for Albertsons across supply-chain, sap, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM SHIPMENT_TRACKING_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Shipment Tracking Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → shipment-tracking-pipeline.yml

Retrieves completed story points from Jira for the last sprint across Albertsons digital product teams, publishes the velocity report to Confluence, and posts a summary to the engineering Teams channel.

naftiko: '0.5'
info:
  label: Sprint Velocity Digest
  description: Retrieves completed story points from Jira for the last sprint across Albertsons digital product teams, publishes the velocity report to Confluence, and posts a summary to the engineering Teams channel.
  tags:
  - devops
  - reporting
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: digest-sprint-velocity
      description: Given a Jira project key and sprint ID, retrieve completed story points, publish a Confluence velocity page, and notify the engineering Teams channel. Use at the end of each sprint for Albertsons digital product teams.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key (e.g., ECOM, PHARMACY, LOYALTY).
      - name: sprint_id
        in: body
        type: string
        description: The Jira sprint ID to report on.
      steps:
      - name: get-sprint-data
        type: call
        call: jira-agile.get-sprint-issues
        with:
          project_key: '{{project_key}}'
          sprint_id: '{{sprint_id}}'
      - name: publish-confluence
        type: call
        call: confluence-agile.create-page
        with:
          space_key: ENG
          title: Sprint Velocity — {{project_key}} Sprint {{sprint_id}}
          body: 'Completed: {{get-sprint-data.completed_points}} story points. Issues: {{get-sprint-data.completed_issues}}'
      - name: notify-teams
        type: call
        call: msteams-agile.send-message
        with:
          channel_id: engineering-metrics
          message: 'Sprint {{sprint_id}} closed: {{get-sprint-data.completed_points}} story points for {{project_key}}. Report: {{publish-confluence.url}}'
  consumes:
  - type: http
    namespace: jira-agile
    baseUri: https://albertsons.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprint-issues
      path: /search
      inputParameters:
      - name: project_key
        in: query
      - name: sprint_id
        in: query
      operations:
      - name: get-sprint-issues
        method: GET
  - type: http
    namespace: confluence-agile
    baseUri: https://albertsons.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: page
      path: /content
      inputParameters:
      - name: space_key
        in: body
      - name: title
        in: body
      - name: body
        in: body
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams-agile
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sprint-velocity-digest.yml

Orchestrates loyalty enrollment pipeline for Albertsons across loyalty, salesforce, snowflake.

naftiko: '0.5'
info:
  label: Loyalty Enrollment Pipeline
  description: Orchestrates loyalty enrollment pipeline for Albertsons across loyalty, salesforce, snowflake.
  tags:
  - loyalty
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: loyalty-ops
    port: 8080
    tools:
    - name: loyalty-enrollment-pipeline
      description: Orchestrates loyalty enrollment pipeline for Albertsons across loyalty, salesforce, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM LOYALTY_ENROLLMENT_PIPELINE
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Loyalty Enrollment Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → loyalty-enrollment-pipeline.yml

Checks workflow for Albertsons.

naftiko: '0.5'
info:
  label: GitHub Workflow Status
  description: Checks workflow for Albertsons.
  tags:
  - devops
  - github
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: get-wf
      description: Check workflow.
      inputParameters:
      - name: repo
        type: string
        description: Repo.
      - name: wf
        type: string
        description: Workflow.
      call: github.get-run
      with:
        repo: '{{repo}}'
        wf: '{{wf}}'
      outputParameters:
      - name: conclusion
        type: string
        mapping: $.workflow_runs[0].conclusion
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: runs
      path: /repos/{{repo}}/actions/workflows/{{wf}}/runs?per_page=1
      inputParameters:
      - name: repo
        in: path
      - name: wf
        in: path
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → github-workflow-status.yml

Orchestrates recall response pipeline for Albertsons across inventory, sap, snowflake.

naftiko: '0.5'
info:
  label: Recall Response Pipeline
  description: Orchestrates recall response pipeline for Albertsons across inventory, sap, snowflake.
  tags:
  - inventory
  - sap
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: product-safety
    port: 8080
    tools:
    - name: recall-response-pipeline
      description: Orchestrates recall response pipeline for Albertsons across inventory, sap, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM RECALL_RESPONSE_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query
        method: GET
Open in Framework → View in Fleet → recall-response-pipeline.yml

Orchestrates gift card inquiry handler for Albertsons across e-commerce, salesforce, snowflake.

naftiko: '0.5'
info:
  label: Gift Card Inquiry Handler
  description: Orchestrates gift card inquiry handler for Albertsons across e-commerce, salesforce, snowflake.
  tags:
  - e-commerce
  - salesforce
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: customer-ops
    port: 8080
    tools:
    - name: gift-card-inquiry-handler
      description: Orchestrates gift card inquiry handler for Albertsons across e-commerce, salesforce, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM GIFT_CARD_INQUIRY_HANDLER
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Gift Card Inquiry Handler — {{store_id}}
          category: e-commerce
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → gift-card-inquiry-handler.yml

Retrieves a Just for U loyalty member's account details from Salesforce including rewards balance, tier status, and recent redemptions. Used by Albertsons customer service agents to resolve loyalty program inquiries.

naftiko: '0.5'
info:
  label: Loyalty Customer Account Lookup
  description: Retrieves a Just for U loyalty member's account details from Salesforce including rewards balance, tier status, and recent redemptions. Used by Albertsons customer service agents to resolve loyalty program inquiries.
  tags:
  - crm
  - loyalty
  - salesforce
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: loyalty-crm
    port: 8080
    tools:
    - name: get-loyalty-account
      description: Given a Just for U member ID or email, retrieve account details from Salesforce including rewards balance, tier status, and recent transactions. Use when a customer service agent needs to access a loyalty member account.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Albertsons Just for U loyalty member ID.
      - name: email
        in: body
        type: string
        description: The member's email address (alternative lookup key).
      call: salesforce-loyalty.search-contacts
      with:
        q: SELECT Id, Name, ABS_Loyalty_ID__c, ABS_Rewards_Balance__c, ABS_Tier__c FROM Contact WHERE ABS_Loyalty_ID__c = '{{member_id}}'
      outputParameters:
      - name: member_name
        type: string
        mapping: $.records[0].Name
      - name: rewards_balance
        type: string
        mapping: $.records[0].ABS_Rewards_Balance__c
      - name: tier
        type: string
        mapping: $.records[0].ABS_Tier__c
  consumes:
  - type: http
    namespace: salesforce-loyalty
    baseUri: https://albertsons.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: search-contacts
        method: GET
Open in Framework → View in Fleet → loyalty-customer-account-lookup.yml

Looks up a Salesforce case by ID for Albertsons.

naftiko: '0.5'
info:
  label: Salesforce Case Status Lookup
  description: Looks up a Salesforce case by ID for Albertsons.
  tags:
  - crm
  - salesforce
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-case-status
      description: Look up Salesforce case status.
      inputParameters:
      - name: case_id
        type: string
        description: Salesforce case ID.
      call: salesforce.get-case
      with:
        case_id: '{{case_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: priority
        type: string
        mapping: $.Priority
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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
Open in Framework → View in Fleet → salesforce-case-status-lookup.yml

Applies a Terraform Cloud workspace run to provision or update Albertsons AWS infrastructure, logs the outcome to Datadog, and notifies the platform engineering team. Automates infrastructure-as-code deployments for Albertsons digital retail platforms.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Provisioning
  description: Applies a Terraform Cloud workspace run to provision or update Albertsons AWS infrastructure, logs the outcome to Datadog, and notifies the platform engineering team. Automates infrastructure-as-code deployments for Albertsons digital retail platforms.
  tags:
  - cloud
  - infrastructure
  - terraform
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: trigger-terraform-run
      description: Given a Terraform Cloud workspace ID and environment, trigger a plan-and-apply run, log the outcome to Datadog, and notify the platform team in Teams. Use when infrastructure changes need to be applied for Albertsons cloud environments.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID (e.g., ws-abc123).
      - name: environment
        in: body
        type: string
        description: The target environment (prod, staging, dev).
      steps:
      - name: create-terraform-run
        type: call
        call: terraform-cloud.create-run
        with:
          workspace_id: '{{workspace_id}}'
          auto_apply: true
      - name: log-datadog
        type: call
        call: datadog-infra.create-event
        with:
          title: 'Terraform run: {{workspace_id}}'
          text: Run {{create-terraform-run.run_id}} started for {{environment}}
          tags: env:{{environment}},workspace:{{workspace_id}}
      - name: notify-platform
        type: call
        call: msteams-infra.send-message
        with:
          channel_id: platform-engineering
          message: 'Terraform run started: workspace {{workspace_id}} ({{environment}}). Run ID: {{create-terraform-run.run_id}}'
  consumes:
  - type: http
    namespace: terraform-cloud
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: run
      path: /runs
      inputParameters:
      - name: workspace_id
        in: body
      - name: auto_apply
        in: body
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: datadog-infra
    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
      inputParameters:
      - name: title
        in: body
      - name: text
        in: body
      - name: tags
        in: body
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams-infra
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-infrastructure-provisioning.yml

Orchestrates price change pipeline for Albertsons across e-commerce, sap, snowflake.

naftiko: '0.5'
info:
  label: Price Change Pipeline
  description: Orchestrates price change pipeline for Albertsons across e-commerce, sap, snowflake.
  tags:
  - e-commerce
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pricing-ops
    port: 8080
    tools:
    - name: price-change-pipeline
      description: Orchestrates price change pipeline for Albertsons across e-commerce, sap, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM PRICE_CHANGE_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Price Change Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → price-change-pipeline.yml

Queries Entra ID group memberships and validates against Workday job roles to identify access requiring recertification. Creates Jira review tasks for the security team. Supports Albertsons quarterly access certification for privileged system access.

naftiko: '0.5'
info:
  label: Access Certification Review
  description: Queries Entra ID group memberships and validates against Workday job roles to identify access requiring recertification. Creates Jira review tasks for the security team. Supports Albertsons quarterly access certification for privileged system access.
  tags:
  - security
  - identity
  - access-management
  - workday
  - microsoft-entra
  - jira
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-access-certification
      description: Given an Entra ID group ID and division scope, retrieve group memberships, validate against Workday roles, and create Jira review tasks for access mismatches. Use for quarterly access certification campaigns.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Entra ID group ID to certify (e.g., grp-abs-sap-admin).
      - name: division
        in: body
        type: string
        description: The Albertsons division for the access review scope.
      steps:
      - name: get-group-members
        type: call
        call: entra-access.get-group-members
        with:
          group_id: '{{group_id}}'
      - name: get-workday-roles
        type: call
        call: workday-access.get-workers
        with:
          division: '{{division}}'
      - name: create-review-task
        type: call
        call: jira-access.create-issue
        with:
          project_key: SEC
          summary: 'Access certification: {{group_id}} — {{division}}'
          description: '{{get-group-members.member_count}} members require recertification review in {{division}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: entra-access
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: group-members
      path: /groups/{{group_id}}/members
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: get-group-members
        method: GET
  - type: http
    namespace: workday-access
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      inputParameters:
      - name: division
        in: query
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: jira-access
    baseUri: https://albertsons.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: project_key
        in: body
      - name: summary
        in: body
      - name: description
        in: body
      - name: issue_type
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → access-certification-review.yml

Retrieves ServiceNow incident details for Albertsons.

naftiko: '0.5'
info:
  label: ServiceNow Incident Detail
  description: Retrieves ServiceNow incident details for Albertsons.
  tags:
  - itsm
  - servicenow
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident-detail
      description: Look up ServiceNow incident.
      inputParameters:
      - name: incident_number
        type: string
        description: 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
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-detail.yml

Queries customer segments for Albertsons.

naftiko: '0.5'
info:
  label: Snowflake Customer Segments
  description: Queries customer segments for Albertsons.
  tags:
  - analytics
  - snowflake
  - loyalty
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-segments
      description: Query segments.
      inputParameters:
      - name: segment
        type: string
        description: Segment.
      call: snowflake.run-query
      with:
        segment: '{{segment}}'
      outputParameters:
      - name: count
        type: integer
        mapping: $.data[0].COUNT
      - name: spend
        type: number
        mapping: $.data[0].AVG_SPEND
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-customer-segments.yml

Triggers Power BI refresh for Albertsons.

naftiko: '0.5'
info:
  label: Power BI Refresh
  description: Triggers Power BI refresh for Albertsons.
  tags:
  - analytics
  - power-bi
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: refresh-dataset
      description: Trigger refresh.
      inputParameters:
      - name: dataset_id
        type: string
        description: Dataset ID.
      call: powerbi.refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → power-bi-refresh.yml

Replenishes pharmacy inventory for Albertsons by checking SAP stock levels, creating transfer orders, and notifying pharmacists via Teams.

naftiko: '0.5'
info:
  label: Pharmacy Inventory Replenishment
  description: Replenishes pharmacy inventory for Albertsons by checking SAP stock levels, creating transfer orders, and notifying pharmacists via Teams.
  tags:
  - inventory
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: inventory-ops
    port: 8080
    tools:
    - name: pharmacy-inventory-replenishment
      description: Replenishes pharmacy inventory for Albertsons by checking SAP stock and creating transfer orders.
      inputParameters:
      - name: store_id
        type: string
        description: Store identifier.
      - name: drug_category
        type: string
        description: Drug category.
      steps:
      - name: check-stock
        type: call
        call: sap.get-stock
        with:
          category: '{{drug_category}}'
          plant: '{{store_id}}'
      - name: create-order
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Pharmacy replenishment: {{drug_category}} — Store {{store_id}}'
          assignment_group: Pharmacy_Ops
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacy-ops
          text: 'Pharmacy replenishment initiated for Store {{store_id}}: {{drug_category}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-stock
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacy-inventory-replenishment.yml

Orchestrates seasonal promotion setup for Albertsons across e-commerce, sap, snowflake.

naftiko: '0.5'
info:
  label: Seasonal Promotion Setup
  description: Orchestrates seasonal promotion setup for Albertsons across e-commerce, sap, snowflake.
  tags:
  - e-commerce
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: merchandising
    port: 8080
    tools:
    - name: seasonal-promotion-setup
      description: Orchestrates seasonal promotion setup for Albertsons across e-commerce, sap, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM SEASONAL_PROMOTION_SETUP
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Seasonal Promotion Setup done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → seasonal-promotion-setup.yml

Orchestrates energy monitoring pipeline for Albertsons across store-ops, snowflake, sap.

naftiko: '0.5'
info:
  label: Energy Monitoring Pipeline
  description: Orchestrates energy monitoring pipeline for Albertsons across store-ops, snowflake, sap.
  tags:
  - store-ops
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: facilities
    port: 8080
    tools:
    - name: energy-monitoring-pipeline
      description: Orchestrates energy monitoring pipeline for Albertsons across store-ops, snowflake, sap.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM ENERGY_MONITORING_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Energy Monitoring Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → energy-monitoring-pipeline.yml

Creates a GitHub release tag for an Albertsons digital platform, publishes release notes to Confluence, and notifies the engineering Teams channel. Coordinates software release activities for Albertsons.com, pharmacy apps, and loyalty platforms.

naftiko: '0.5'
info:
  label: GitHub Deployment Release Coordination
  description: Creates a GitHub release tag for an Albertsons digital platform, publishes release notes to Confluence, and notifies the engineering Teams channel. Coordinates software release activities for Albertsons.com, pharmacy apps, and loyalty platforms.
  tags:
  - devops
  - release-management
  - github
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: release-mgmt
    port: 8080
    tools:
    - name: coordinate-release
      description: Given a GitHub repository, version tag, and release notes, create the GitHub release, publish to Confluence, and notify the engineering Teams channel. Use when releasing a new version of an Albertsons digital platform.
      inputParameters:
      - name: repo_owner
        in: body
        type: string
        description: The GitHub organization or owner name (e.g., albertsons-digital).
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name (e.g., albertsons-app, pharmacy-api, loyalty-service).
      - name: version_tag
        in: body
        type: string
        description: The semantic version tag (e.g., v4.2.0).
      - name: release_notes
        in: body
        type: string
        description: The release notes describing changes in this version.
      steps:
      - name: create-github-release
        type: call
        call: github-release.create-release
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          tag_name: '{{version_tag}}'
          body: '{{release_notes}}'
      - name: publish-confluence
        type: call
        call: confluence-release.create-page
        with:
          space_key: ENG
          title: 'Release: {{repo_name}} {{version_tag}}'
          body: '{{release_notes}}'
      - name: notify-engineering
        type: call
        call: msteams-release.send-message
        with:
          channel_id: engineering-releases
          message: 'Released {{version_tag}} for {{repo_name}}. Notes: {{publish-confluence.url}}'
  consumes:
  - type: http
    namespace: github-release
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: release
      path: /repos/{{owner}}/{{repo}}/releases
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: tag_name
        in: body
      - name: body
        in: body
      operations:
      - name: create-release
        method: POST
  - type: http
    namespace: confluence-release
    baseUri: https://albertsons.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: page
      path: /content
      inputParameters:
      - name: space_key
        in: body
      - name: title
        in: body
      - name: body
        in: body
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams-release
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-deployment-release-coordination.yml

Orchestrates remodel coordination for Albertsons across store-ops, sap, servicenow.

naftiko: '0.5'
info:
  label: Remodel Coordination
  description: Orchestrates remodel coordination for Albertsons across store-ops, sap, servicenow.
  tags:
  - store-ops
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: construction
    port: 8080
    tools:
    - name: remodel-coordination
      description: Orchestrates remodel coordination for Albertsons across store-ops, sap, servicenow.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Remodel Coordination — {{store_id}}
          category: store-ops
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Remodel Coordination done.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → remodel-coordination.yml

Orchestrates markdown optimization pipeline for Albertsons across e-commerce, snowflake, sap.

naftiko: '0.5'
info:
  label: Markdown Optimization Pipeline
  description: Orchestrates markdown optimization pipeline for Albertsons across e-commerce, snowflake, sap.
  tags:
  - e-commerce
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pricing-ops
    port: 8080
    tools:
    - name: markdown-optimization-pipeline
      description: Orchestrates markdown optimization pipeline for Albertsons across e-commerce, snowflake, sap.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM MARKDOWN_OPTIMIZATION_PIPELINE
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Markdown Optimization Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → markdown-optimization-pipeline.yml

Queries LinkedIn Talent Solutions for candidates matching active Albertsons corporate and store operations requisitions, and creates Jira recruiting tasks for recruiter follow-up on qualified candidates.

naftiko: '0.5'
info:
  label: LinkedIn Grocery Retail Talent Pipeline Enrichment
  description: Queries LinkedIn Talent Solutions for candidates matching active Albertsons corporate and store operations requisitions, and creates Jira recruiting tasks for recruiter follow-up on qualified candidates.
  tags:
  - hr
  - recruiting
  - linkedin
  - jira
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: enrich-talent-pipeline
      description: Given a LinkedIn job posting ID and role discipline, retrieve matching candidate profiles and create a Jira recruiting task for follow-up. Use when sourcing candidates for Albertsons corporate or operations leadership roles.
      inputParameters:
      - name: job_posting_id
        in: body
        type: string
        description: The LinkedIn job posting ID for the active requisition.
      - name: discipline
        in: body
        type: string
        description: The role discipline (e.g., Merchandising, Finance, Technology, Operations).
      steps:
      - name: get-linkedin-candidates
        type: call
        call: linkedin-talent.search-candidates
        with:
          jobPostingId: '{{job_posting_id}}'
          discipline: '{{discipline}}'
      - name: create-recruiter-task
        type: call
        call: jira-recruiting.create-issue
        with:
          project_key: RECRUIT
          summary: 'Candidate pipeline: {{discipline}} — {{job_posting_id}}'
          description: '{{get-linkedin-candidates.total_count}} candidates identified for {{discipline}} requisition.'
          issue_type: Task
  consumes:
  - type: http
    namespace: linkedin-talent
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: candidates
      path: /talentSearch
      inputParameters:
      - name: jobPostingId
        in: query
      - name: discipline
        in: query
      operations:
      - name: search-candidates
        method: GET
  - type: http
    namespace: jira-recruiting
    baseUri: https://albertsons.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue
      path: /issue
      inputParameters:
      - name: project_key
        in: body
      - name: summary
        in: body
      - name: description
        in: body
      - name: issue_type
        in: body
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → linkedin-grocery-retail-talent-pipeline-enrichment.yml

Orchestrates loyalty points reconciliation for Albertsons across loyalty, salesforce, snowflake.

naftiko: '0.5'
info:
  label: Loyalty Points Reconciliation
  description: Orchestrates loyalty points reconciliation for Albertsons across loyalty, salesforce, snowflake.
  tags:
  - loyalty
  - salesforce
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: loyalty-ops
    port: 8080
    tools:
    - name: loyalty-points-reconciliation
      description: Orchestrates loyalty points reconciliation for Albertsons across loyalty, salesforce, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM LOYALTY_POINTS_RECONCILIATION
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Loyalty Points Reconciliation — {{store_id}}
          category: loyalty
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → loyalty-points-reconciliation.yml

Orchestrates customer feedback analysis for Albertsons across customer-service, salesforce, snowflake.

naftiko: '0.5'
info:
  label: Customer Feedback Analysis
  description: Orchestrates customer feedback analysis for Albertsons across customer-service, salesforce, snowflake.
  tags:
  - customer-service
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: customer-feedback-analysis
      description: Orchestrates customer feedback analysis for Albertsons across customer-service, salesforce, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM CUSTOMER_FEEDBACK_ANALYSIS
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Customer Feedback Analysis done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-feedback-analysis.yml

Gets headcount for Albertsons.

naftiko: '0.5'
info:
  label: Workday Headcount
  description: Gets headcount for Albertsons.
  tags:
  - hr
  - workday
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-hc
      description: Get headcount.
      inputParameters:
      - name: dept
        type: string
        description: Department.
      call: workday.get-hc
      with:
        dept: '{{dept}}'
      outputParameters:
      - name: total
        type: integer
        mapping: $.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: hc
      path: /albertsons/headcount
      operations:
      - name: get-hc
        method: GET
Open in Framework → View in Fleet → workday-headcount.yml

When a critical CVE is identified, queries Datadog security signals, creates a ServiceNow security incident, and notifies the CISO team in Microsoft Teams. Enables rapid vulnerability response for Albertsons PCI-compliant retail systems.

naftiko: '0.5'
info:
  label: Security CVE Vulnerability Triage
  description: When a critical CVE is identified, queries Datadog security signals, creates a ServiceNow security incident, and notifies the CISO team in Microsoft Teams. Enables rapid vulnerability response for Albertsons PCI-compliant retail systems.
  tags:
  - security
  - cve
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: triage-cve
      description: Given a CVE identifier, affected system, and severity, retrieve Datadog security signals, create a ServiceNow security incident, and notify the security team in Teams. Use when a critical or high CVE requires triage in Albertsons PCI-scope systems.
      inputParameters:
      - name: cve_id
        in: body
        type: string
        description: The CVE identifier (e.g., CVE-2024-12345).
      - name: affected_system
        in: body
        type: string
        description: The name of the affected system (e.g., POS, e-commerce, loyalty-api).
      - name: severity
        in: body
        type: string
        description: The CVE severity level (critical, high, medium, low).
      steps:
      - name: get-security-signals
        type: call
        call: datadog-sec.list-signals
        with:
          query: cve:{{cve_id}}
      - name: create-security-incident
        type: call
        call: servicenow-sec.create-incident
        with:
          short_description: CVE {{cve_id}} ({{severity}}) on {{affected_system}}
          category: Security
          priority: '1'
      - name: notify-security-team
        type: call
        call: msteams-sec.send-message
        with:
          channel_id: security-alerts
          message: 'CVE {{cve_id}} ({{severity}}) on {{affected_system}}. Incident: {{create-security-incident.number}}'
  consumes:
  - 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: signals
      path: /security_analytics/signals/search
      inputParameters:
      - name: query
        in: body
      operations:
      - name: list-signals
        method: POST
  - type: http
    namespace: servicenow-sec
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      inputParameters:
      - name: short_description
        in: body
      - name: category
        in: body
      - name: priority
        in: body
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-sec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: message
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      - name: message
        in: body
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → security-cve-vulnerability-triage.yml

Queries inventory for Albertsons.

naftiko: '0.5'
info:
  label: Snowflake Inventory Query
  description: Queries inventory for Albertsons.
  tags:
  - inventory
  - snowflake
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: query-inv
      description: Query inventory.
      inputParameters:
      - name: loc
        type: string
        description: Location.
      call: snowflake.run-query
      with:
        loc: '{{loc}}'
      outputParameters:
      - name: units
        type: integer
        mapping: $.data[0].UNITS
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-inventory-query.yml

Orchestrates maintenance request workflow for Albertsons across store-ops, servicenow, sap.

naftiko: '0.5'
info:
  label: Maintenance Request Workflow
  description: Orchestrates maintenance request workflow for Albertsons across store-ops, servicenow, sap.
  tags:
  - store-ops
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: facilities
    port: 8080
    tools:
    - name: maintenance-request-workflow
      description: Orchestrates maintenance request workflow for Albertsons across store-ops, servicenow, sap.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: check-erp
        type: call
        call: sap.get-data
        with:
          entity: '{{store_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Maintenance Request Workflow — {{store_id}}
          category: store-ops
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Maintenance Request Workflow done.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: entities
      path: /A_BusinessPartner
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → maintenance-request-workflow.yml

Orchestrates emergency notification pipeline for Albertsons across store-ops, workday, microsoft-teams.

naftiko: '0.5'
info:
  label: Emergency Notification Pipeline
  description: Orchestrates emergency notification pipeline for Albertsons across store-ops, workday, microsoft-teams.
  tags:
  - store-ops
  - workday
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: emergency-ops
    port: 8080
    tools:
    - name: emergency-notification-pipeline
      description: Orchestrates emergency notification pipeline for Albertsons across store-ops, workday, microsoft-teams.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Emergency Notification Pipeline — {{store_id}}
          category: store-ops
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Emergency Notification Pipeline done.
      - name: get-hr
        type: call
        call: workday.get-workers
        with:
          store: '{{store_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /albertsons/workers
      operations:
      - name: get-workers
        method: GET
Open in Framework → View in Fleet → emergency-notification-pipeline.yml

Tracks fresh produce waste for Albertsons by logging Snowflake shrinkage data, creating SAP adjustments, and alerting managers via Teams.

naftiko: '0.5'
info:
  label: Fresh Produce Waste Tracking
  description: Tracks fresh produce waste for Albertsons by logging Snowflake shrinkage data, creating SAP adjustments, and alerting managers via Teams.
  tags:
  - inventory
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: fresh-produce-waste-tracking
      description: Tracks fresh produce waste for Albertsons by logging Snowflake shrinkage data and SAP adjustments.
      inputParameters:
      - name: store_id
        type: string
        description: Store identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: get-waste-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT category, waste_qty, waste_value FROM PRODUCE_WASTE WHERE store='{{store_id}}' AND date='{{date}}'
      - name: post-adjustment
        type: call
        call: sap.post-adjustment
        with:
          plant: '{{store_id}}'
          type: produce_waste
      - name: alert-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: store-{{store_id}}-ops
          text: Produce waste report for {{date}} posted.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: adjustments
      path: /A_MaterialDocumentHeader
      operations:
      - name: post-adjustment
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fresh-produce-waste-tracking.yml

Orchestrates cx survey pipeline for Albertsons across customer-service, salesforce, snowflake.

naftiko: '0.5'
info:
  label: Cx Survey Pipeline
  description: Orchestrates cx survey pipeline for Albertsons across customer-service, salesforce, snowflake.
  tags:
  - customer-service
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customer-ops
    port: 8080
    tools:
    - name: cx-survey-pipeline
      description: Orchestrates cx survey pipeline for Albertsons across customer-service, salesforce, snowflake.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM CX_SURVEY_PIPELINE
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Cx Survey Pipeline done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cx-survey-pipeline.yml

Verifies vendor deliveries for Albertsons by matching SAP PO data, logging Snowflake receipts, and creating ServiceNow discrepancy tickets.

naftiko: '0.5'
info:
  label: Vendor Delivery Verification
  description: Verifies vendor deliveries for Albertsons by matching SAP PO data, logging Snowflake receipts, and creating ServiceNow discrepancy tickets.
  tags:
  - supply-chain
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: vendor-delivery-verification
      description: Verifies vendor deliveries for Albertsons by matching SAP PO data and logging Snowflake receipts.
      inputParameters:
      - name: po_number
        type: string
        description: Purchase order number.
      - name: receipt_doc
        type: string
        description: Receiving document number.
      steps:
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: log-receipt
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO DELIVERY_RECEIPTS VALUES ('{{po_number}}', '{{receipt_doc}}', CURRENT_TIMESTAMP())
      - name: flag-discrepancy
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Delivery verification: PO {{po_number}}'
          category: supply-chain
  consumes:
  - type: http
    namespace: sap
    baseUri: https://albertsons-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.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: servicenow
    baseUri: https://albertsons.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → vendor-delivery-verification.yml

Orchestrates qbr report generator for Albertsons across analytics, snowflake, salesforce.

naftiko: '0.5'
info:
  label: Qbr Report Generator
  description: Orchestrates qbr report generator for Albertsons across analytics, snowflake, salesforce.
  tags:
  - analytics
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: qbr-report-generator
      description: Orchestrates qbr report generator for Albertsons across analytics, snowflake, salesforce.
      inputParameters:
      - name: store_id
        type: string
        description: Store or entity identifier.
      - name: date
        type: string
        description: Date in YYYY-MM-DD.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM QBR_REPORT_GENERATOR
      - name: get-sf
        type: call
        call: salesforce.query
        with:
          q: SELECT Id FROM Account
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: ops-{{store_id}}
          text: Qbr Report Generator done.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://albertsons.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://albertsons.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: channels
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → qbr-report-generator.yml

Retrieves the current status, value, and stage of a Salesforce opportunity by ID, for use in sales pipeline reviews and CRM status checks.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Status Lookup
  description: Retrieves the current status, value, and stage of a Salesforce opportunity by ID, for use in sales pipeline reviews and CRM status checks.
  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 during customer calls.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity record ID, e.g. 0065G00001abc.
      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
      - name: account_name
        type: string
        mapping: $.Account.Name
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://amgen.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-status-lookup.yml

Orchestrates bioreactor scale-up validation by comparing process parameters across scales, generating equivalency reports, and notifying process development.

naftiko: '0.5'
info:
  label: Bioreactor Scale-Up Validation Orchestration
  description: Orchestrates bioreactor scale-up validation by comparing process parameters across scales, generating equivalency reports, and notifying process development.
  tags:
  - manufacturing
  - rd
  - quality
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: scale-up-validation
    port: 8080
    tools:
    - name: validate-scale-up
      description: Given small-scale and large-scale batch IDs, compare process parameters, generate equivalency report, and notify team. Use when process development validates scale-up.
      inputParameters:
      - name: small_scale_batch
        in: body
        type: string
        description: Small-scale batch identifier.
      - name: large_scale_batch
        in: body
        type: string
        description: Large-scale batch identifier.
      steps:
      - name: compare-parameters
        type: call
        call: snowflake.execute-query
        with:
          query_name: scale_up_comparison
          params: '{{small_scale_batch}},{{large_scale_batch}}'
      - name: create-validation-record
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Scale-up validation: {{small_scale_batch}} vs {{large_scale_batch}}'
          category: process_validation
          assigned_group: Process_Development
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: process-development
          text: 'Scale-up comparison complete. Titer equivalence: {{compare-parameters.titer_equivalence}}%. CQA within spec: {{compare-parameters.cqa_pass}}. Task: {{create-validation-record.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://amgen.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://amgen.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bioreactor-scale-up-validation-orchestration.yml

Retrieves the current health status of Amgen's monitored infrastructure hosts and services from Datadog, returning a consolidated health snapshot.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Health Check
  description: Retrieves the current health status of Amgen's monitored infrastructure hosts and services 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. Returns a health summary suitable for ops dashboards and incident triage.
      inputParameters:
      - name: environment
        in: body
        type: string
        description: 'The deployment environment to query: production, staging, or development.'
      call: datadog.list-monitors
      with:
        tags: env:{{environment}}
      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
      operations:
      - name: list-monitors
        method: GET
        inputParameters:
        - name: tags
          in: query
Open in Framework → View in Fleet → datadog-infrastructure-health-check.yml

When a supply chain risk is identified for a critical raw material, creates a ServiceNow procurement task, updates the Salesforce supply record, and alerts the procurement team in Teams.

naftiko: '0.5'
info:
  label: Supply Chain Disruption Alert
  description: When a supply chain risk is identified for a critical raw material, creates a ServiceNow procurement task, updates the Salesforce supply record, and alerts the procurement team in Teams.
  tags:
  - supply-chain
  - procurement
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: handle-supply-disruption
      description: Given a material ID, supplier name, and disruption severity, create a ServiceNow procurement task, update the Salesforce supply record, and notify the procurement team in Teams.
      inputParameters:
      - name: material_id
        in: body
        type: string
        description: The SAP material ID for the at-risk raw material.
      - name: supplier_name
        in: body
        type: string
        description: The supplier name experiencing the disruption.
      - name: disruption_type
        in: body
        type: string
        description: 'Type of disruption: shortage, delay, quality_issue, or force_majeure.'
      - name: severity
        in: body
        type: string
        description: 'Disruption severity: critical, high, medium, or low.'
      steps:
      - name: create-procurement-task
        type: call
        call: servicenow-sc.create-task
        with:
          short_description: 'Supply disruption: {{material_id}} from {{supplier_name}}'
          description: 'Disruption type: {{disruption_type}}. Severity: {{severity}}.'
          assignment_group: Procurement
      - name: update-supply-record
        type: call
        call: salesforce-sc.update-record
        with:
          object_type: Supply_Record__c
          material_id: '{{material_id}}'
          status: Disrupted
          disruption_type: '{{disruption_type}}'
      - name: alert-procurement
        type: call
        call: msteams-sc.post-channel-message
        with:
          channel_id: procurement-alerts
          message: 'Supply Disruption: {{material_id}} from {{supplier_name}} | Type: {{disruption_type}} | Severity: {{severity}} | Task: {{create-procurement-task.number}}'
  consumes:
  - type: http
    namespace: servicenow-sc
    baseUri: https://amgen.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: salesforce-sc
    baseUri: https://amgen.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: supply-records
      path: /sobjects/Supply_Record__c
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: msteams-sc
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → supply-chain-disruption-alert.yml

When an employee changes roles in Workday, updates their Okta group memberships, adjusts Salesforce profile permissions, and notifies the new manager via Teams.

naftiko: '0.5'
info:
  label: Workday Role Change Provisioning
  description: When an employee changes roles in Workday, updates their Okta group memberships, adjusts Salesforce profile permissions, and notifies the new manager via Teams.
  tags:
  - hr
  - identity
  - workday
  - okta
  - salesforce
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, adjust Salesforce profile, and notify the new manager in Teams.
      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_upn
        in: body
        type: string
        description: The UPN 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}}'
          new_department: '{{get-worker.new_department}}'
      - name: notify-new-manager
        type: call
        call: msteams-role.send-message
        with:
          recipient_upn: '{{new_manager_upn}}'
          message: '{{get-worker.full_name}} has been assigned to your team in role: {{new_role}}. Okta and Salesforce 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: /amgen/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-role
    baseUri: https://amgen.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: msteams-role
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-role-change-provisioning.yml

Returns current headcount by department and cost center from Workday, suitable for finance planning and headcount reporting.

naftiko: '0.5'
info:
  label: Payroll Headcount Snapshot
  description: Returns current headcount by department and cost center from Workday, suitable for 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 Amgen 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: /amgen/reports/headcount
      operations:
      - name: headcount-report
        method: GET
Open in Framework → View in Fleet → payroll-headcount-snapshot.yml

Assembles a New Drug Application submission package by gathering documents from Veeva Vault, creating the eCTD structure, and notifying the regulatory team.

naftiko: '0.5'
info:
  label: NDA Submission Package Orchestration
  description: Assembles a New Drug Application submission package by gathering documents from Veeva Vault, creating the eCTD structure, and notifying the regulatory team.
  tags:
  - regulatory
  - clinical
  - veeva-vault
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: nda-submission
    port: 8080
    tools:
    - name: assemble-nda-package
      description: Given an NDA number and molecule name, gather documents, create eCTD structure, and notify team. Use when regulatory affairs prepares an NDA filing.
      inputParameters:
      - name: nda_number
        in: body
        type: string
        description: NDA application number.
      - name: molecule_name
        in: body
        type: string
        description: Drug molecule name.
      steps:
      - name: gather-documents
        type: call
        call: veeva-vault.query-documents
        with:
          nda_number: '{{nda_number}}'
          doc_type: ectd
      - name: create-submission
        type: call
        call: veeva-vault.create-submission
        with:
          nda_number: '{{nda_number}}'
          molecule: '{{molecule_name}}'
          document_ids: '{{gather-documents.document_ids}}'
      - name: create-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'NDA submission: {{nda_number}} - {{molecule_name}}'
          category: regulatory_submission
          assigned_group: Regulatory_Affairs
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-submissions
          text: 'NDA {{nda_number}} package assembled for {{molecule_name}}. Documents: {{gather-documents.count}}. Task: {{create-task.number}}'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://amgen-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /query
      operations:
      - name: query-documents
        method: POST
    - name: submissions
      path: /objects/submission__c
      operations:
      - name: create-submission
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://amgen.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nda-submission-package-orchestration.yml

When a cold chain temperature excursion is detected during biologic shipment, creates a deviation, quarantines the batch, notifies quality, and initiates stability assessment.

naftiko: '0.5'
info:
  label: Cold Chain Temperature Excursion Orchestration
  description: When a cold chain temperature excursion is detected during biologic shipment, creates a deviation, quarantines the batch, notifies quality, and initiates stability assessment.
  tags:
  - supply-chain
  - quality
  - manufacturing
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cold-chain
    port: 8080
    tools:
    - name: handle-temp-excursion
      description: Given a shipment ID, batch number, and temperature reading, create deviation, quarantine batch, notify quality, and start assessment. Use when cold chain monitoring detects temperature breach.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: Shipment tracking identifier.
      - name: batch_number
        in: body
        type: string
        description: Affected batch number.
      - name: temperature_reading
        in: body
        type: string
        description: Recorded temperature reading.
      steps:
      - name: create-deviation
        type: call
        call: servicenow.create-deviation
        with:
          description: 'Cold chain excursion: Shipment {{shipment_id}}, Batch {{batch_number}}, Temp {{temperature_reading}}'
          area: cold_chain
          priority: '1'
      - name: quarantine-batch
        type: call
        call: sap-erp.update-batch-status
        with:
          batch: '{{batch_number}}'
          status: quarantine
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-supply-chain
          text: 'COLD CHAIN ALERT: Shipment {{shipment_id}}, Batch {{batch_number}} quarantined. Temp: {{temperature_reading}}. Deviation: {{create-deviation.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: deviations
      path: /table/u_deviation
      operations:
      - name: create-deviation
        method: POST
  - type: http
    namespace: sap-erp
    baseUri: https://amgen-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch('{{batch}}')
      inputParameters:
      - name: batch
        in: path
      operations:
      - name: update-batch-status
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cold-chain-temperature-excursion-orchestration.yml

Retrieves a pending expense report from SAP Concur, validates it against 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 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, validate against Amgen travel policy, 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://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-approval.yml

When a new clinical trial site is approved in Veeva Vault, creates a ServiceNow task for site setup, notifies the clinical operations team in Teams, and logs the activation in Salesforce.

naftiko: '0.5'
info:
  label: Clinical Trial Site Activation
  description: When a new clinical trial site is approved in Veeva Vault, creates a ServiceNow task for site setup, notifies the clinical operations team in Teams, and logs the activation in Salesforce.
  tags:
  - clinical-trials
  - veeva
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: activate-trial-site
      description: Given a Veeva Vault study ID and site ID, create a ServiceNow setup task, log the site in Salesforce, and notify the clinical operations team via Teams.
      inputParameters:
      - name: vault_study_id
        in: body
        type: string
        description: The Veeva Vault study document ID for the clinical trial.
      - name: site_id
        in: body
        type: string
        description: The clinical site identifier to be activated.
      - name: site_name
        in: body
        type: string
        description: The human-readable name of the clinical trial site.
      steps:
      - name: create-setup-task
        type: call
        call: servicenow-clin.create-task
        with:
          short_description: 'Site activation: {{site_name}} for study {{vault_study_id}}'
          assignment_group: Clinical_Operations
      - name: log-in-salesforce
        type: call
        call: salesforce-clin.create-record
        with:
          object_type: Clinical_Site__c
          study_id: '{{vault_study_id}}'
          site_id: '{{site_id}}'
          site_name: '{{site_name}}'
          status: Activated
      - name: notify-team
        type: call
        call: msteams-clin.post-channel-message
        with:
          channel_id: clinical-ops-alerts
          message: 'Site {{site_name}} (ID: {{site_id}}) activated for study {{vault_study_id}}. ServiceNow task: {{create-setup-task.number}}.'
  consumes:
  - type: http
    namespace: servicenow-clin
    baseUri: https://amgen.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: salesforce-clin
    baseUri: https://amgen.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams-clin
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-site-activation.yml

When CrowdStrike detects a high-severity endpoint detection, creates a ServiceNow security incident, isolates the endpoint via CrowdStrike API, and alerts the SOC team in Teams.

naftiko: '0.5'
info:
  label: CrowdStrike Security Alert Triage
  description: When CrowdStrike detects a high-severity endpoint detection, creates a ServiceNow security incident, isolates the endpoint via CrowdStrike API, and alerts the SOC team in Teams.
  tags:
  - security
  - crowdstrike
  - servicenow
  - incident-response
  - soc
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 via CrowdStrike, and alert the SOC channel in Teams.
      inputParameters:
      - name: detection_id
        in: body
        type: string
        description: The CrowdStrike detection ID.
      - name: host_id
        in: body
        type: string
        description: The CrowdStrike host/device 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
        type: call
        call: msteams-soc.post-channel-message
        with:
          channel_id: soc-alerts
          message: 'SECURITY ALERT: CrowdStrike detection {{detection_id}} ({{severity}}) on host {{host_id}}. Host isolated. Incident: {{create-security-incident.number}}.'
  consumes:
  - type: http
    namespace: servicenow-soc
    baseUri: https://amgen.service-now.com/api/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: 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/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → crowdstrike-security-alert-triage.yml

When a candidate applies via LinkedIn Recruiter, enriches their profile in Workday Recruiting and notifies the hiring manager in Teams.

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 in Teams.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: enrich-candidate-profile
      description: Given a LinkedIn member URN and a Workday job requisition ID, fetch the LinkedIn profile and create or enrich the candidate record in Workday, then notify the hiring manager in Teams.
      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 the candidate applied for.
      - name: hiring_manager_upn
        in: body
        type: string
        description: The UPN of the hiring manager to notify.
      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: msteams-recruit.send-message
        with:
          recipient_upn: '{{hiring_manager_upn}}'
          message: 'New candidate: {{get-linkedin-profile.firstName}} {{get-linkedin-profile.lastName}} applied for req {{job_req_id}}. Title: {{get-linkedin-profile.headline}}. Workday record: {{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: /amgen/jobRequisitions/{{job_req_id}}/candidates
      inputParameters:
      - name: job_req_id
        in: path
      operations:
      - name: create-candidate
        method: POST
  - type: http
    namespace: msteams-recruit
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-acquisition-signal.yml

Generates a weekly account health digest from Salesforce, summarizing open opportunities, recent activities, and support cases for strategic accounts, posted to the sales Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Account Health Digest
  description: Generates a weekly account health digest from Salesforce, summarizing open opportunities, recent activities, and support cases for strategic accounts, posted to the sales Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: account-health
    port: 8080
    tools:
    - name: digest-account-health
      description: Given a Salesforce account ID, retrieve open opportunities, recent activities, and open cases, then post a health digest to the sales Teams channel.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID, e.g. 0015G00001xyz.
      - name: teams_channel_id
        in: body
        type: string
        description: The Teams channel ID where the digest should be posted.
      steps:
      - name: get-account
        type: call
        call: salesforce-acct.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-opportunities
        type: call
        call: salesforce-acct.get-account-opportunities
        with:
          account_id: '{{account_id}}'
      - name: post-digest
        type: call
        call: msteams-acct.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: 'Account Health: {{get-account.name}} | Open Opps: {{get-opportunities.total_count}} | Total Pipeline: ${{get-opportunities.total_amount}} | Health Score: {{get-account.health_score}}'
  consumes:
  - type: http
    namespace: salesforce-acct
    baseUri: https://amgen.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: msteams-acct
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-account-health-digest.yml

Triggers a refresh of the commercial performance Power BI dashboard.

naftiko: '0.5'
info:
  label: Power BI Commercial Dashboard Refresh
  description: Triggers a refresh of the commercial performance Power BI dashboard.
  tags:
  - commercial
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-commercial-dashboard
      description: Given a dataset ID, trigger a Power BI refresh. Use when commercial teams need updated data.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-commercial-dashboard-refresh.yml

Triggers a Tableau workbook extract refresh and notifies stakeholders in Teams 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 in Teams when the refresh completes or fails.
  tags:
  - data
  - analytics
  - tableau
  - reporting
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 the designated stakeholder channel in Teams when complete.
      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. amgen.
      - name: notification_channel
        in: body
        type: string
        description: The Teams channel ID 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: msteams-bi.post-channel-message
        with:
          channel_id: '{{notification_channel}}'
          message: 'Tableau workbook {{workbook_id}} refresh triggered. Job ID: {{trigger-refresh.job_id}}.'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.amgen.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: msteams-bi
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-refresh-trigger.yml

When GitHub Advanced Security finds a critical code scanning alert, automatically creates a Jira security issue and notifies the security engineering team in Teams.

naftiko: '0.5'
info:
  label: GitHub Security Scan to Jira
  description: When GitHub Advanced Security finds a critical code scanning alert, automatically creates a Jira security issue and notifies the security engineering team in Teams.
  tags:
  - security
  - devops
  - github
  - jira
  - microsoft-teams
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 team in Teams.
      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: notify-appsec
        type: call
        call: msteams-appsec.post-channel-message
        with:
          channel_id: appsec-alerts
          message: '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://amgen.atlassian.net/rest/api/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-appsec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-security-scan-to-jira.yml

Retrieves the current development phase and key milestones for a drug molecule in the pipeline tracking system.

naftiko: '0.5'
info:
  label: Drug Molecule Pipeline Status Lookup
  description: Retrieves the current development phase and key milestones for a drug molecule in the pipeline tracking system.
  tags:
  - rd
  - clinical
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: pipeline-tracker
    port: 8080
    tools:
    - name: get-molecule-status
      description: Given a molecule ID, return the development phase, next milestone, and projected timeline. Use when R&D leadership needs pipeline visibility.
      inputParameters:
      - name: molecule_id
        in: body
        type: string
        description: Internal molecule identifier.
      call: snowflake.execute-query
      with:
        query_name: molecule_pipeline_status
        params: '{{molecule_id}}'
      outputParameters:
      - name: phase
        type: string
        mapping: $.data[0].phase
      - name: next_milestone
        type: string
        mapping: $.data[0].next_milestone
      - name: projected_date
        type: string
        mapping: $.data[0].projected_date
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://amgen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → drug-molecule-pipeline-status-lookup.yml

Generates a daily sprint status digest from Jira, summarizing completed, in-progress, and blocked issues, then posts it to the engineering Teams 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 Teams channel.
  tags:
  - devops
  - jira
  - reporting
  - sprint
  - microsoft-teams
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 Teams 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. ENG or BIONF.
      - name: sprint_name
        in: body
        type: string
        description: The Jira sprint name to summarize.
      - name: teams_channel_id
        in: body
        type: string
        description: The Teams channel ID to post the digest to.
      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: msteams-sprint.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: '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://amgen.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: msteams-sprint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-digest-report.yml

Creates a ServiceNow change request for infrastructure changes, routes it to the CAB board, and notifies requestors in Teams upon approval or rejection.

naftiko: '0.5'
info:
  label: Change Management Approval Workflow
  description: Creates a ServiceNow change request for infrastructure changes, routes it to the CAB board, and notifies requestors in Teams upon approval or rejection.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
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 in Teams. Use for any infrastructure or application change requiring CAB approval.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the change, e.g. Upgrade Kubernetes cluster to v1.30.
      - 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_upn
        in: body
        type: string
        description: The UPN of the change requestor for Teams notification.
      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: msteams-chg.send-message
        with:
          recipient_upn: '{{requestor_upn}}'
          message: 'Your change request has been submitted: {{create-cr.number}}. Type: {{change_type}}. Risk: {{risk_level}}. Pending CAB review.'
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams-chg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → change-management-approval-workflow.yml

Retrieves the status of regulatory submission documents from Veeva Vault and cross-references open action items in ServiceNow for a given regulatory filing.

naftiko: '0.5'
info:
  label: Regulatory Submission Document Tracker
  description: Retrieves the status of regulatory submission documents from Veeva Vault and cross-references open action items in ServiceNow for a given regulatory filing.
  tags:
  - regulatory
  - veeva
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: get-submission-status
      description: Given a Veeva Vault document ID for a regulatory submission, retrieve document status and cross-reference any open ServiceNow action items. Use for regulatory filing status checks.
      inputParameters:
      - name: vault_doc_id
        in: body
        type: string
        description: The Veeva Vault document ID for the regulatory submission.
      steps:
      - name: get-vault-doc
        type: call
        call: veeva-vault.get-document
        with:
          doc_id: '{{vault_doc_id}}'
      - name: get-action-items
        type: call
        call: servicenow-reg.query-tasks
        with:
          correlation_id: '{{vault_doc_id}}'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://amgen.veevavault.com/api/v23.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: servicenow-reg
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: query-tasks
        method: GET
Open in Framework → View in Fleet → regulatory-submission-document-tracker.yml

Tracks cell line development milestones by querying the LIMS for clone data, updating Jira tasks, and notifying the cell biology team.

naftiko: '0.5'
info:
  label: Cell Line Development Tracking Orchestration
  description: Tracks cell line development milestones by querying the LIMS for clone data, updating Jira tasks, and notifying the cell biology team.
  tags:
  - rd
  - manufacturing
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cell-line-dev
    port: 8080
    tools:
    - name: update-cell-line-status
      description: Given a cell line ID, query clone selection data, update Jira, and notify the team. Use when cell biology reaches development milestones.
      inputParameters:
      - name: cell_line_id
        in: body
        type: string
        description: Cell line identifier.
      steps:
      - name: get-clone-data
        type: call
        call: snowflake.execute-query
        with:
          query_name: cell_line_clone_data
          params: '{{cell_line_id}}'
      - name: update-jira
        type: call
        call: jira.update-issue
        with:
          issue_key: CLD-{{cell_line_id}}
          status: '{{get-clone-data.current_stage}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: cell-biology
          text: 'Cell line {{cell_line_id}} update: Stage {{get-clone-data.current_stage}}. Top clone titer: {{get-clone-data.top_titer}} g/L.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://amgen.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://amgen.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: update-issue
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cell-line-development-tracking-orchestration.yml

Retrieves the current GxP validation status for a regulated system from ServiceNow, returning validation lifecycle details for compliance reporting.

naftiko: '0.5'
info:
  label: GxP System Validation Status Check
  description: Retrieves the current GxP validation status for a regulated system from ServiceNow, returning validation lifecycle details for compliance reporting.
  tags:
  - compliance
  - gxp
  - validation
  - servicenow
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: gxp-compliance
    port: 8080
    tools:
    - name: get-system-validation-status
      description: Given a GxP system name or CMDB CI ID, retrieve its current validation status, last qualification date, and next revalidation due date from ServiceNow.
      inputParameters:
      - name: system_ci_id
        in: body
        type: string
        description: The ServiceNow CMDB configuration item ID for the GxP system.
      call: servicenow-gxp.get-ci
      with:
        ci_id: '{{system_ci_id}}'
      outputParameters:
      - name: system_name
        type: string
        mapping: $.result.name
      - name: validation_status
        type: string
        mapping: $.result.u_validation_status
      - name: last_qualified
        type: string
        mapping: $.result.u_last_qualified_date
      - name: next_revalidation
        type: string
        mapping: $.result.u_next_revalidation_date
  consumes:
  - type: http
    namespace: servicenow-gxp
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb-ci
      path: /table/cmdb_ci/{{ci_id}}
      inputParameters:
      - name: ci_id
        in: path
      operations:
      - name: get-ci
        method: GET
Open in Framework → View in Fleet → gxp-system-validation-status-check.yml

Manages drug product lot release by checking QC results, verifying stability data, generating the certificate of analysis, and notifying distribution.

naftiko: '0.5'
info:
  label: Drug Product Lot Release Orchestration
  description: Manages drug product lot release by checking QC results, verifying stability data, generating the certificate of analysis, and notifying distribution.
  tags:
  - quality
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lot-release
    port: 8080
    tools:
    - name: release-drug-product-lot
      description: Given a batch number and product code, verify QC, check stability, create CoA, and notify distribution. Use when QA releases a drug product lot.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: Batch number.
      - name: product_code
        in: body
        type: string
        description: Drug product code.
      steps:
      - name: get-qc-results
        type: call
        call: sap-erp.get-inspection
        with:
          batch: '{{batch_number}}'
          material: '{{product_code}}'
      - name: release-batch
        type: call
        call: sap-erp.release-batch
        with:
          batch: '{{batch_number}}'
          status: released
      - name: create-coa-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'CoA: Batch {{batch_number}} - {{product_code}}'
          category: quality_release
          assigned_group: Quality_Assurance
      - name: notify-distribution
        type: call
        call: msteams.send-message
        with:
          channel_id: drug-product-distribution
          text: 'Lot {{batch_number}} ({{product_code}}) released. QC: {{get-qc-results.result}}. CoA task: {{create-coa-task.number}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://amgen-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspections
      path: /A_InspectionResult
      operations:
      - name: get-inspection
        method: GET
    - name: batches
      path: /A_BatchRelease
      operations:
      - name: release-batch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://amgen.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → drug-product-lot-release-orchestration.yml

Retrieves the current status of an Investigational New Drug application from the regulatory tracking system by IND number.

naftiko: '0.5'
info:
  label: FDA IND Submission Status Lookup
  description: Retrieves the current status of an Investigational New Drug application from the regulatory tracking system by IND number.
  tags:
  - regulatory
  - clinical
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: get-ind-status
      description: Given an IND number, return the current review status, FDA division, and expected response date. Use when regulatory affairs checks IND submission progress.
      inputParameters:
      - name: ind_number
        in: body
        type: string
        description: FDA IND application number.
      call: veeva-vault.get-submission
      with:
        ind_number: '{{ind_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.status
      - name: fda_division
        type: string
        mapping: $.data.review_division
      - name: expected_response
        type: string
        mapping: $.data.target_date
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://amgen-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: submissions
      path: /objects/submission__c/{{ind_number}}
      inputParameters:
      - name: ind_number
        in: path
      operations:
      - name: get-submission
        method: GET
Open in Framework → View in Fleet → fda-ind-submission-status-lookup.yml

When protein characterization experiments complete, ingests analytical results into Snowflake, validates data quality, and notifies the R&D team.

naftiko: '0.5'
info:
  label: Protein Characterization Data Pipeline
  description: When protein characterization experiments complete, ingests analytical results into Snowflake, validates data quality, and notifies the R&D team.
  tags:
  - rd
  - analytics
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: protein-analytics
    port: 8080
    tools:
    - name: process-characterization-data
      description: Given an experiment ID and data path, ingest results, validate quality, and notify researchers. Use when analytical lab completes protein characterization.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: Experiment identifier.
      - name: data_path
        in: body
        type: string
        description: S3 path to results file.
      steps:
      - name: ingest-data
        type: call
        call: snowflake.execute-query
        with:
          query_name: ingest_protein_characterization
          params: '{{experiment_id}},{{data_path}}'
      - name: validate-quality
        type: call
        call: snowflake.execute-query
        with:
          query_name: validate_analytical_quality
          params: '{{experiment_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: rd-analytical
          text: 'Protein characterization {{experiment_id}} processed. Quality: {{validate-quality.pass_rate}}% pass.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://amgen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → protein-characterization-data-pipeline.yml

When a Snowflake data quality check fails, creates a Jira data quality issue and notifies the data engineering team via Microsoft Teams.

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 Microsoft Teams.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: handle-data-quality-failure
      description: Given a Snowflake data quality check failure for a specific table, open a Jira data quality issue and notify the data engineering team in Teams.
      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 name of the data quality check 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 {{table_name}}. Detail: {{failure_detail}}.'
      - name: notify-data-team
        type: call
        call: msteams-dq.post-channel-message
        with:
          channel_id: data-engineering-alerts
          message: 'Data Quality Failure: {{table_name}} | Check: {{check_name}} | Jira: {{create-dq-issue.key}}'
  consumes:
  - type: http
    namespace: jira-dq
    baseUri: https://amgen.atlassian.net/rest/api/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-dq
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-alert.yml

Orchestrates PK data analysis by extracting concentration data from Snowflake, running noncompartmental analysis, generating reports, and notifying the clinical pharmacology team.

naftiko: '0.5'
info:
  label: Pharmacokinetics Data Analysis Orchestration
  description: Orchestrates PK data analysis by extracting concentration data from Snowflake, running noncompartmental analysis, generating reports, and notifying the clinical pharmacology team.
  tags:
  - clinical
  - rd
  - analytics
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pk-analysis
    port: 8080
    tools:
    - name: run-pk-analysis
      description: Given a study ID and analyte, extract PK data, run NCA, generate report, and notify team. Use when clinical pharmacology performs PK analysis.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: analyte
        in: body
        type: string
        description: Analyte name.
      steps:
      - name: extract-pk-data
        type: call
        call: snowflake.execute-query
        with:
          query_name: extract_pk_concentrations
          params: '{{study_id}},{{analyte}}'
      - name: run-nca
        type: call
        call: snowflake.execute-query
        with:
          query_name: pk_nca_analysis
          params: '{{study_id}},{{analyte}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-pharmacology
          text: 'PK analysis complete for {{study_id}} - {{analyte}}. Cmax: {{run-nca.cmax}}. AUC: {{run-nca.auc}}. Half-life: {{run-nca.half_life}}h.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://amgen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacokinetics-data-analysis-orchestration.yml

When an employee termination is recorded in Workday, revokes Microsoft 365 access, closes all open ServiceNow tickets assigned to the user, and notifies the HR business partner via Teams.

naftiko: '0.5'
info:
  label: Employee Offboarding Workflow
  description: When an employee termination is recorded in Workday, revokes Microsoft 365 access, closes all open ServiceNow tickets assigned to the user, and notifies the HR business partner via Teams.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-employee-offboarding
      description: Given a Workday employee ID and termination date, revoke Microsoft 365 licenses, disable the Azure AD account, close open ServiceNow tickets, and alert the HR business partner in Teams.
      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 effective termination date in ISO 8601 format.
      - name: hr_bp_upn
        in: body
        type: string
        description: The UPN of the HR business partner to notify, e.g. jsmith@amgen.com.
      steps:
      - name: get-worker
        type: call
        call: workday-off.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: disable-account
        type: call
        call: msgraph-off.disable-user
        with:
          user_principal_name: '{{get-worker.work_email}}'
      - name: revoke-licenses
        type: call
        call: msgraph-off.remove-license
        with:
          user_principal_name: '{{get-worker.work_email}}'
      - name: notify-hr-bp
        type: call
        call: msteams-off.send-message
        with:
          recipient_upn: '{{hr_bp_upn}}'
          message: 'Offboarding complete for {{get-worker.full_name}} (termination: {{termination_date}}). M365 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: /amgen/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph-off
    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
      - name: remove-license
        method: POST
  - type: http
    namespace: msteams-off
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-offboarding-workflow.yml

Submits a clinical study report from Veeva Vault to OpenAI for summarization and stores the structured summary back in SharePoint for regulatory affairs teams.

naftiko: '0.5'
info:
  label: AI Document Summarization for Clinical Reports
  description: Submits a clinical study report from Veeva Vault to OpenAI for summarization and stores the structured summary back in SharePoint for regulatory affairs teams.
  tags:
  - ai
  - clinical-trials
  - veeva
  - openai
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: ai-clinical
    port: 8080
    tools:
    - name: summarize-clinical-report
      description: Given a Veeva Vault document ID for a clinical report, retrieve the document, submit it to OpenAI for a structured summary, and store the result in SharePoint.
      inputParameters:
      - name: vault_doc_id
        in: body
        type: string
        description: The Veeva Vault document ID for the clinical study report.
      - name: sharepoint_site_id
        in: body
        type: string
        description: The SharePoint site ID where the summary should be stored.
      steps:
      - name: get-vault-document
        type: call
        call: veeva-ai.get-document
        with:
          doc_id: '{{vault_doc_id}}'
      - name: generate-summary
        type: call
        call: openai.create-completion
        with:
          model: gpt-4o
          prompt: 'Summarize the following clinical study report in structured format with sections for Objective, Methods, Results, and Conclusion: {{get-vault-document.content}}'
      - name: store-summary
        type: call
        call: sharepoint-ai.create-file
        with:
          site_id: '{{sharepoint_site_id}}'
          file_name: summary_{{vault_doc_id}}.txt
          content: '{{generate-summary.text}}'
  consumes:
  - type: http
    namespace: veeva-ai
    baseUri: https://amgen.veevavault.com/api/v23.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-document
        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: sharepoint-ai
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/items/root:/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_name
        in: path
      operations:
      - name: create-file
        method: PUT
Open in Framework → View in Fleet → ai-document-summarization-for-clinical-reports.yml

Monitors drug product stability studies by checking timepoint results, flagging out-of-trend data, and notifying the stability team.

naftiko: '0.5'
info:
  label: Stability Study Monitoring Orchestration
  description: Monitors drug product stability studies by checking timepoint results, flagging out-of-trend data, and notifying the stability team.
  tags:
  - quality
  - rd
  - manufacturing
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: stability-monitoring
    port: 8080
    tools:
    - name: check-stability-timepoint
      description: Given a stability protocol ID and timepoint, check results, flag trends, and notify team. Use when stability lab reports new timepoint data.
      inputParameters:
      - name: protocol_id
        in: body
        type: string
        description: Stability protocol identifier.
      - name: timepoint
        in: body
        type: string
        description: Timepoint in months.
      steps:
      - name: get-results
        type: call
        call: snowflake.execute-query
        with:
          query_name: stability_timepoint_results
          params: '{{protocol_id}},{{timepoint}}'
      - name: check-trends
        type: call
        call: snowflake.execute-query
        with:
          query_name: stability_trend_analysis
          params: '{{protocol_id}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: stability-studies
          text: 'Stability {{protocol_id}} T={{timepoint}}mo: All specs met: {{get-results.all_pass}}. Trend alert: {{check-trends.trend_flag}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://amgen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → stability-study-monitoring-orchestration.yml

When an AWS cost anomaly is detected, annotates the event in Datadog, opens a ServiceNow ticket for FinOps review, and posts a summary to the finance alerts Teams channel.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Responder
  description: When an AWS cost anomaly is detected, annotates the event in Datadog, opens a ServiceNow ticket for FinOps review, and posts a summary to the finance alerts Teams channel.
  tags:
  - finops
  - cloud
  - aws
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS cost anomaly ID, affected service, and estimated overage, create a Datadog event annotation, open a ServiceNow FinOps ticket, and notify the finance channel in Teams.
      inputParameters:
      - name: anomaly_id
        in: body
        type: string
        description: The AWS Cost Anomaly Detection anomaly ID.
      - name: aws_service
        in: body
        type: string
        description: The AWS service generating the anomaly, e.g. EC2, S3, RDS.
      - name: estimated_overage_usd
        in: body
        type: number
        description: Estimated dollar overage detected.
      - name: business_unit
        in: body
        type: string
        description: The Amgen business unit owning the AWS account.
      steps:
      - name: annotate-datadog
        type: call
        call: datadog-finops.create-event
        with:
          title: 'AWS Cost Anomaly: {{aws_service}}'
          text: 'Anomaly {{anomaly_id}} — estimated overage: ${{estimated_overage_usd}} — BU: {{business_unit}}'
          alert_type: warning
      - name: create-finops-ticket
        type: call
        call: servicenow-finops.create-incident
        with:
          short_description: AWS cost anomaly on {{aws_service}} — ${{estimated_overage_usd}} overage
          description: 'Anomaly {{anomaly_id}} on {{aws_service}} for {{business_unit}}. Datadog event: {{annotate-datadog.id}}.'
          assignment_group: FinOps
      - name: notify-finance
        type: call
        call: msteams-finops.post-channel-message
        with:
          channel_id: cloud-finance-alerts
          message: 'AWS Cost Anomaly: {{aws_service}} | Overage: ${{estimated_overage_usd}} | BU: {{business_unit}} | Ticket: {{create-finops-ticket.number}}'
  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: servicenow-finops
    baseUri: https://amgen.service-now.com/api/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-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-responder.yml

When a vendor invoice is received in SAP Ariba, validates it against the SAP purchase order, routes it for approval via ServiceNow, and notifies the finance team in Teams.

naftiko: '0.5'
info:
  label: Invoice Processing and Approval
  description: When a vendor invoice is received in SAP Ariba, validates it against the SAP purchase order, routes it for approval via ServiceNow, and notifies the finance team in Teams.
  tags:
  - finance
  - procurement
  - sap-ariba
  - servicenow
  - invoice-processing
capability:
  exposes:
  - type: mcp
    namespace: finance-ap
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Given an Ariba invoice ID and SAP PO number, validate the invoice against the PO in SAP, create a ServiceNow approval task, and notify the finance team in Microsoft Teams.
      inputParameters:
      - name: ariba_invoice_id
        in: body
        type: string
        description: The SAP Ariba invoice identifier.
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number to validate against.
      - name: vendor_name
        in: body
        type: string
        description: The vendor name for notification context.
      steps:
      - name: get-invoice
        type: call
        call: sap-ariba.get-invoice
        with:
          invoice_id: '{{ariba_invoice_id}}'
      - name: validate-po
        type: call
        call: sap-po.get-po
        with:
          po_number: '{{po_number}}'
      - name: create-approval-task
        type: call
        call: servicenow-ap.create-task
        with:
          short_description: 'Invoice approval: {{vendor_name}} - {{ariba_invoice_id}}'
          description: 'Invoice {{ariba_invoice_id}} from {{vendor_name}} against PO {{po_number}}. Amount: {{get-invoice.total_amount}} {{get-invoice.currency}}.'
          assignment_group: Finance_AP
      - name: notify-finance
        type: call
        call: msteams-ap.send-message
        with:
          recipient_upn: finance-ap@amgen.com
          message: 'Invoice {{ariba_invoice_id}} from {{vendor_name}} pending approval. PO: {{po_number}}. Task: {{create-approval-task.number}}.'
  consumes:
  - type: http
    namespace: sap-ariba
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap-po
    baseUri: https://amgen-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: servicenow-ap
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-ap
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → invoice-processing-and-approval.yml

Generates a competitive intelligence report on biosimilar market activity by querying Snowflake analytics for patent expirations, competitor filings, and market share data.

naftiko: '0.5'
info:
  label: Biosimilar Competitive Intelligence Report
  description: Generates a competitive intelligence report on biosimilar market activity by querying Snowflake analytics for patent expirations, competitor filings, and market share data.
  tags:
  - commercial
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: competitive-intel
    port: 8080
    tools:
    - name: get-biosimilar-report
      description: Given a therapeutic area and molecule name, return competitive landscape data including biosimilar filings, patent status, and market share. Use when commercial strategy needs competitive intelligence.
      inputParameters:
      - name: therapeutic_area
        in: body
        type: string
        description: Therapeutic area, e.g. 'oncology', 'inflammation'.
      - name: molecule_name
        in: body
        type: string
        description: Reference molecule name.
      call: snowflake.execute-query
      with:
        query_name: biosimilar_competitive_report
        params: '{{therapeutic_area}},{{molecule_name}}'
      outputParameters:
      - name: biosimilar_count
        type: integer
        mapping: $.data[0].biosimilar_count
      - name: market_share
        type: number
        mapping: $.data[0].originator_market_share
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://amgen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → biosimilar-competitive-intelligence-report.yml

Monitors bioreactor fermentation parameters and when out-of-spec conditions occur, creates a deviation, alerts manufacturing, and logs data in the process historian.

naftiko: '0.5'
info:
  label: Bioprocess Fermentation Monitoring Orchestration
  description: Monitors bioreactor fermentation parameters and when out-of-spec conditions occur, creates a deviation, alerts manufacturing, and logs data in the process historian.
  tags:
  - manufacturing
  - quality
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bioprocess-monitoring
    port: 8080
    tools:
    - name: handle-fermentation-excursion
      description: Given a bioreactor ID, parameter name, and measured value, create a deviation, alert the team, and log data. Use when bioreactor monitoring detects out-of-spec conditions.
      inputParameters:
      - name: bioreactor_id
        in: body
        type: string
        description: Bioreactor identifier.
      - name: parameter_name
        in: body
        type: string
        description: 'Parameter name: pH, dissolved_oxygen, temperature, agitation.'
      - name: measured_value
        in: body
        type: string
        description: The measured out-of-spec value.
      steps:
      - name: create-deviation
        type: call
        call: servicenow.create-deviation
        with:
          description: 'Fermentation excursion: {{parameter_name}} = {{measured_value}} at bioreactor {{bioreactor_id}}'
          area: bioprocess
          priority: '2'
      - name: log-event
        type: call
        call: sap-erp.create-process-event
        with:
          equipment: '{{bioreactor_id}}'
          parameter: '{{parameter_name}}'
          value: '{{measured_value}}'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: bioprocess-ops
          text: 'ALERT: Bioreactor {{bioreactor_id}} - {{parameter_name}} excursion: {{measured_value}}. Deviation: {{create-deviation.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: deviations
      path: /table/u_deviation
      operations:
      - name: create-deviation
        method: POST
  - type: http
    namespace: sap-erp
    baseUri: https://amgen-s4.sap.com/sap/opu/odata/sap/PP_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: events
      path: /A_ProcessEvent
      operations:
      - name: create-process-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bioprocess-fermentation-monitoring-orchestration.yml

When a complex ServiceNow incident is created, submits the incident description to OpenAI for AI-assisted triage categorization and recommended resolution steps, updating 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 incident description to OpenAI for AI-assisted triage categorization and recommended resolution steps, updating 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 the 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://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
        inputParameters:
        - name: number
          in: query
      - name: update-incident
        method: PATCH
  - type: http
    namespace: openai-triage
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
Open in Framework → View in Fleet → intelligent-incident-triage-with-openai.yml

Retrieves employer brand and talent pipeline metrics from LinkedIn.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline Report
  description: Retrieves employer brand and talent pipeline metrics from LinkedIn.
  tags:
  - hr
  - marketing
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: employer-brand
    port: 8080
    tools:
    - name: get-talent-metrics
      description: Return LinkedIn follower count, engagement rate, and talent pipeline size. Use when HR needs employer brand data.
      inputParameters:
      - name: time_period
        in: body
        type: string
        description: Reporting period.
      call: linkedin.get-organization-stats
      with:
        period: '{{time_period}}'
      outputParameters:
      - name: follower_count
        type: integer
        mapping: $.data.followerCount
      - name: engagement_rate
        type: number
        mapping: $.data.engagementRate
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: stats
      path: /organizationPageStatistics
      operations:
      - name: get-organization-stats
        method: GET
Open in Framework → View in Fleet → linkedin-talent-pipeline-report.yml

Searches Amgen SharePoint document libraries by keyword.

naftiko: '0.5'
info:
  label: SharePoint Document Search
  description: Searches Amgen SharePoint document libraries by keyword.
  tags:
  - documentation
  - collaboration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: doc-search
    port: 8080
    tools:
    - name: search-sharepoint
      description: Given a search query, return matching documents with titles and links. Use when employees search SharePoint.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keywords.
      call: sharepoint.search
      with:
        querytext: '{{query}}'
      outputParameters:
      - name: result_count
        type: integer
        mapping: $.PrimaryQueryResult.RelevantResults.TotalRows
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://amgen.sharepoint.com/_api
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: search
      path: /search/query?querytext='{{querytext}}'
      inputParameters:
      - name: querytext
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → sharepoint-document-search.yml

Queries Snowflake for failed or long-running data pipeline tasks and reports their status, enabling data engineering teams to triage issues quickly.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Health Check
  description: Queries Snowflake for failed or long-running data pipeline tasks and reports their status, enabling data engineering teams to triage issues quickly.
  tags:
  - data
  - analytics
  - snowflake
  - pipeline-monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: get-pipeline-task-failures
      description: Query Snowflake task history for failed or suspended pipeline tasks in a given database and schema. Use to triage data engineering issues and SLA breaches.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: The Snowflake database to query, e.g. AMGEN_ANALYTICS.
      - name: schema_name
        in: body
        type: string
        description: The Snowflake schema to query, e.g. PIPELINES.
      - name: lookback_hours
        in: body
        type: integer
        description: Number of hours to look back in task history, e.g. 24.
      call: snowflake.query-task-history
      with:
        database: '{{database_name}}'
        schema: '{{schema_name}}'
        hours: '{{lookback_hours}}'
      outputParameters:
      - name: failed_tasks
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://amgen.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/{{database}}/schemas/{{schema}}/tasks/history
      inputParameters:
      - name: database
        in: path
      - name: schema
        in: path
      - name: hours
        in: query
      operations:
      - name: query-task-history
        method: GET
Open in Framework → View in Fleet → snowflake-data-pipeline-health-check.yml

When a serious adverse event is reported for a biologic therapy, logs it in the safety database, notifies pharmacovigilance, creates a regulatory filing task, and updates the CTMS.

naftiko: '0.5'
info:
  label: Biologic Drug Adverse Event Reporting Orchestration
  description: When a serious adverse event is reported for a biologic therapy, logs it in the safety database, notifies pharmacovigilance, creates a regulatory filing task, and updates the CTMS.
  tags:
  - clinical
  - regulatory
  - safety
  - oracle
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: report-adverse-event
      description: Given a study ID, patient ID, event description, and severity, log the event, alert pharmacovigilance, create filing task, and update CTMS. Use when clinical sites report serious adverse events.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: patient_id
        in: body
        type: string
        description: Patient subject identifier.
      - name: event_description
        in: body
        type: string
        description: Description of the adverse event.
      - name: severity
        in: body
        type: string
        description: 'Severity: mild, moderate, severe, life-threatening.'
      steps:
      - name: log-safety-event
        type: call
        call: oracle-argus.create-case
        with:
          study_id: '{{study_id}}'
          subject_id: '{{patient_id}}'
          description: '{{event_description}}'
          seriousness: '{{severity}}'
      - name: notify-pharmacovigilance
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacovigilance
          text: 'SAE Alert - Study {{study_id}}, Patient {{patient_id}}: {{event_description}} ({{severity}}). Argus case: {{log-safety-event.case_number}}'
      - name: create-regulatory-task
        type: call
        call: servicenow.create-task
        with:
          short_description: Regulatory SAE report - {{log-safety-event.case_number}}
          category: regulatory_filing
          priority: '1'
          assigned_group: Drug_Safety
  consumes:
  - type: http
    namespace: oracle-argus
    baseUri: https://amgen-argus.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_argus_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → biologic-drug-adverse-event-reporting-orchestration.yml

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Microsoft 365 access, and sends a Microsoft Teams welcome message to the new employee.

naftiko: '0.5'
info:
  label: Employee Onboarding Orchestrator
  description: When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Microsoft 365 access, and sends a Microsoft Teams welcome message to the new employee.
  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, orchestrate the full onboarding sequence across ServiceNow, Microsoft Teams, and Microsoft Graph. Creates the onboarding ticket, grants M365 license, and sends a welcome message.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire, e.g. WD-00123.
      - name: start_date
        in: body
        type: string
        description: The employee start date in ISO 8601 format, e.g. 2026-04-01.
      - name: department
        in: body
        type: string
        description: The business department the new hire is joining, e.g. Research & Development.
      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
          caller_id: '{{get-worker.work_email}}'
      - name: provision-m365
        type: call
        call: msgraph.assign-license
        with:
          user_principal_name: '{{get-worker.work_email}}'
          sku_id: enterprisepack
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-worker.work_email}}'
          message: Welcome to Amgen, {{get-worker.first_name}}! Your IT onboarding ticket is {{create-onboarding-ticket.number}}. Your Microsoft 365 access has been provisioned.
  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: /amgen/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: user-licenses
      path: /users/{{user_principal_name}}/assignLicense
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: assign-license
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{{recipient_upn}}/chats
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-onboarding-orchestrator.yml

When a critical Datadog alert fires, creates a ServiceNow incident, posts an alert to the Microsoft Teams ops channel, and pages the on-call engineer.

naftiko: '0.5'
info:
  label: IT Incident Response Chain
  description: When a critical Datadog alert fires, creates a ServiceNow incident, posts an alert to the Microsoft Teams ops channel, and pages the on-call engineer.
  tags:
  - itsm
  - incident-response
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog alert ID, severity, and affected service, create a ServiceNow incident and notify the IT operations channel in Microsoft Teams. Use when a Datadog monitor reaches critical state.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert or monitor ID.
      - name: severity
        in: body
        type: string
        description: 'Alert severity level: critical, high, medium, or low.'
      - name: service_name
        in: body
        type: string
        description: The name of the affected service or application.
      - 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: post-alert
        type: call
        call: msteams-ops.post-channel-message
        with:
          channel_id: it-ops-alerts
          message: 'INCIDENT: {{severity}} alert on {{service_name}} | Datadog: {{alert_id}} | ServiceNow: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow-ops
    baseUri: https://amgen.service-now.com/api/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-ops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-incident-response-chain.yml

On a GitHub Actions pipeline failure on a protected branch, opens a Jira bug, creates a Datadog deployment marker, and alerts the engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Response
  description: On a GitHub Actions pipeline failure on a protected branch, opens a Jira bug, creates a Datadog deployment marker, and alerts the engineering team in Microsoft Teams.
  tags:
  - devops
  - cicd
  - github
  - jira
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-cicd
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow run failure event, create a Datadog deployment marker, open a Jira bug for engineering triage, and alert the engineering channel in Teams.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name in org/repo format, e.g. amgen/bioinfo-pipeline.
      - name: workflow_name
        in: body
        type: string
        description: The name of the GitHub Actions workflow that failed.
      - name: branch_name
        in: body
        type: string
        description: The branch 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 workflow run.
      steps:
      - name: create-dd-marker
        type: call
        call: datadog-cicd.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: {{create-dd-marker.id}}.'
      - name: notify-engineering
        type: call
        call: msteams-cicd.post-channel-message
        with:
          channel_id: engineering-alerts
          message: 'Pipeline Failure: {{repo_name}} | Branch: {{branch_name}} | Workflow: {{workflow_name}} | Jira: {{create-jira-bug.key}} | Run: {{run_url}}'
  consumes:
  - type: http
    namespace: datadog-cicd
    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://amgen.atlassian.net/rest/api/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-cicd
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-response.yml

Generates a Power BI embed token for a specific report and workspace, enabling secure embedding in Amgen's internal portal.

naftiko: '0.5'
info:
  label: Power BI Report Embed Token Generator
  description: Generates a Power BI embed token for a specific report and workspace, enabling secure embedding in Amgen's internal portal.
  tags:
  - data
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: powerbi-reporting
    port: 8080
    tools:
    - name: get-report-embed-token
      description: Given a Power BI workspace ID and report ID, generate a secure embed token for use in Amgen's internal analytics portal.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: report_id
        in: body
        type: string
        description: The Power BI report ID to generate a token for.
      call: powerbi.generate-embed-token
      with:
        workspace_id: '{{workspace_id}}'
        report_id: '{{report_id}}'
      outputParameters:
      - name: token
        type: string
        mapping: $.token
      - name: expiration
        type: string
        mapping: $.expiration
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: embed-token
      path: /groups/{{workspace_id}}/reports/{{report_id}}/GenerateToken
      inputParameters:
      - name: workspace_id
        in: path
      - name: report_id
        in: path
      operations:
      - name: generate-embed-token
        method: POST
Open in Framework → View in Fleet → power-bi-report-embed-token-generator.yml

Manages contract renewals by checking expiring contracts in Ariba, creating renewal tasks, and notifying procurement leadership.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Renewal Orchestration
  description: Manages contract renewals by checking expiring contracts in Ariba, creating renewal tasks, and notifying procurement leadership.
  tags:
  - procurement
  - sap-ariba
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: contract-renewal
    port: 8080
    tools:
    - name: process-contract-renewal
      description: Given a contract ID, check terms, create renewal task, and notify procurement. Use when contracts approach expiration.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: SAP Ariba contract ID.
      steps:
      - name: get-contract
        type: call
        call: ariba.get-contract
        with:
          id: '{{contract_id}}'
      - name: create-renewal-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Contract renewal: {{get-contract.title}}'
          category: procurement
          assigned_group: Strategic_Sourcing
          due_date: '{{get-contract.expiry_date}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement
          text: 'Contract {{contract_id}} expiring {{get-contract.expiry_date}}: {{get-contract.title}}. Task: {{create-renewal-task.number}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://amgen.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-renewal-orchestration.yml

Uses OpenAI to generate a structured summary of a clinical study report or protocol document.

naftiko: '0.5'
info:
  label: OpenAI Clinical Document Summarization
  description: Uses OpenAI to generate a structured summary of a clinical study report or protocol document.
  tags:
  - clinical
  - ai
  - openai
capability:
  exposes:
  - type: mcp
    namespace: doc-summarization
    port: 8080
    tools:
    - name: summarize-clinical-document
      description: Given document text, generate a structured summary. Use when clinical teams need quick document overviews.
      inputParameters:
      - name: document_text
        in: body
        type: string
        description: Clinical document text.
      call: openai.create-completion
      with:
        model: gpt-4
        prompt: 'Summarize this clinical document: {{document_text}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.choices[0].message.content
  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: create-completion
        method: POST
Open in Framework → View in Fleet → openai-clinical-document-summarization.yml

Randomizes a patient into a clinical trial arm by verifying eligibility, executing randomization, updating CTMS, and notifying the site coordinator.

naftiko: '0.5'
info:
  label: Clinical Trial Randomization Orchestration
  description: Randomizes a patient into a clinical trial arm by verifying eligibility, executing randomization, updating CTMS, and notifying the site coordinator.
  tags:
  - clinical
  - rd
  - oracle
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trial-randomization
    port: 8080
    tools:
    - name: randomize-patient
      description: Given a study ID, site ID, and patient ID, verify eligibility, randomize, update CTMS, and notify. Use when sites randomize patients into clinical trials.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Study identifier.
      - name: site_id
        in: body
        type: string
        description: Site identifier.
      - name: patient_id
        in: body
        type: string
        description: Patient identifier.
      steps:
      - name: verify-eligibility
        type: call
        call: oracle-clinical.check-eligibility
        with:
          study_id: '{{study_id}}'
          patient_id: '{{patient_id}}'
      - name: execute-randomization
        type: call
        call: oracle-clinical.randomize
        with:
          study_id: '{{study_id}}'
          site_id: '{{site_id}}'
          patient_id: '{{patient_id}}'
      - name: notify-site
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-sites
          text: 'Patient {{patient_id}} randomized in study {{study_id}} at site {{site_id}}. Arm: {{execute-randomization.treatment_arm}}. Kit: {{execute-randomization.kit_number}}.'
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://amgen-ctms.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_ctms_token
    resources:
    - name: eligibility
      path: /studies/{{study_id}}/patients/{{patient_id}}/eligibility
      inputParameters:
      - name: study_id
        in: path
      - name: patient_id
        in: path
      operations:
      - name: check-eligibility
        method: GET
    - name: randomization
      path: /studies/{{study_id}}/randomize
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: randomize
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-randomization-orchestration.yml

When a pharmacovigilance signal is flagged in the safety database, creates a ServiceNow case for medical affairs review and notifies the drug safety team in Teams.

naftiko: '0.5'
info:
  label: Drug Safety Signal Notification
  description: When a pharmacovigilance signal is flagged in the safety database, creates a ServiceNow case for medical affairs review and notifies the drug safety team in Teams.
  tags:
  - pharmacovigilance
  - drug-safety
  - servicenow
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: notify-safety-signal
      description: Given a drug safety signal ID and product name, create a ServiceNow case for medical affairs review and notify the pharmacovigilance team in Teams.
      inputParameters:
      - name: signal_id
        in: body
        type: string
        description: The pharmacovigilance safety signal identifier.
      - name: product_name
        in: body
        type: string
        description: The Amgen product name associated with the signal.
      - name: signal_type
        in: body
        type: string
        description: The type of safety signal, e.g. adverse_event, labeling_update.
      - name: severity
        in: body
        type: string
        description: 'Signal severity: serious, non-serious.'
      steps:
      - name: create-safety-case
        type: call
        call: servicenow-safety.create-case
        with:
          short_description: 'Safety signal: {{product_name}} — {{signal_type}} ({{severity}})'
          category: pharmacovigilance
          assignment_group: Medical_Affairs
          description: 'Signal ID: {{signal_id}}. Product: {{product_name}}. Type: {{signal_type}}. Severity: {{severity}}.'
      - name: notify-pv-team
        type: call
        call: msteams-safety.post-channel-message
        with:
          channel_id: drug-safety-alerts
          message: 'Safety Signal: {{product_name}} | Type: {{signal_type}} | Severity: {{severity}} | Case: {{create-safety-case.number}}'
  consumes:
  - type: http
    namespace: servicenow-safety
    baseUri: https://amgen.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams-safety
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → drug-safety-signal-notification.yml

When a new employee joins Amgen, provisions the 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 Amgen, provisions the 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, retrieve their role and department, then assign the appropriate Okta application groups. Use during onboarding or role changes.
      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-okta-groups
        type: call
        call: okta.assign-group
        with:
          user_id: '{{okta_user_id}}'
          department: '{{get-worker-profile.department}}'
          job_title: '{{get-worker-profile.job_title}}'
  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: /amgen/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://amgen.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-members
      path: /groups/{{group_id}}/users/{{user_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: assign-group
        method: PUT
Open in Framework → View in Fleet → okta-user-access-provisioning.yml

Retrieves the version history of a Veeva Vault regulatory document and checks it against compliance audit requirements, returning a structured audit trail.

naftiko: '0.5'
info:
  label: Veeva Vault Document Version Audit
  description: Retrieves the version history of a Veeva Vault regulatory document and checks it against compliance audit requirements, returning a structured audit trail.
  tags:
  - regulatory
  - compliance
  - veeva
  - audit
capability:
  exposes:
  - type: mcp
    namespace: doc-audit
    port: 8080
    tools:
    - name: audit-document-versions
      description: Given a Veeva Vault document ID, retrieve all version history entries and return a structured audit trail for compliance review.
      inputParameters:
      - name: vault_doc_id
        in: body
        type: string
        description: The Veeva Vault document ID to audit.
      call: veeva-audit.get-document-versions
      with:
        doc_id: '{{vault_doc_id}}'
      outputParameters:
      - name: versions
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: veeva-audit
    baseUri: https://amgen.veevavault.com/api/v23.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: document-versions
      path: /objects/documents/{{doc_id}}/versions
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-document-versions
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-version-audit.yml

Creates a new Terraform Cloud workspace for a given project and environment, applies initial variable sets, and notifies the infrastructure team in Teams.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Provisioning
  description: Creates a new Terraform Cloud workspace for a given project and environment, applies initial variable sets, and notifies the infrastructure team in Teams.
  tags:
  - cloud
  - infrastructure
  - terraform
  - devops
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, configure variable sets, and notify the infrastructure team in Teams.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The project name for the new workspace, e.g. genomics-pipeline.
      - name: environment
        in: body
        type: string
        description: 'The deployment environment: dev, staging, or prod.'
      - name: terraform_org
        in: body
        type: string
        description: The Terraform Cloud organization name, e.g. amgen.
      steps:
      - name: create-workspace
        type: call
        call: terraform.create-workspace
        with:
          org: '{{terraform_org}}'
          name: '{{project_name}}-{{environment}}'
      - name: notify-infra
        type: call
        call: msteams-tf.post-channel-message
        with:
          channel_id: infrastructure-team
          message: 'Terraform workspace created: {{project_name}}-{{environment}} in org {{terraform_org}}. 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: msteams-tf
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-workspace-provisioning.yml

Retrieves campaign performance metrics from Google Analytics for a specified property and date range, returning sessions, conversions, and bounce rate for marketing analytics.

naftiko: '0.5'
info:
  label: Google Analytics Campaign Performance
  description: Retrieves campaign performance metrics from Google Analytics for a specified property and date range, returning sessions, conversions, and bounce rate for marketing analytics.
  tags:
  - marketing
  - analytics
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: get-campaign-metrics
      description: Query Google Analytics for campaign performance metrics. Returns sessions, conversions, bounce rate, and average session duration.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: The Google Analytics property ID.
      - name: campaign_name
        in: body
        type: string
        description: The campaign name to filter by.
      - 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: ga.run-report
      with:
        property_id: '{{property_id}}'
        dimensions: sessionCampaignName
        metrics: sessions,conversions,bounceRate
        date_range_start: '{{start_date}}'
        date_range_end: '{{end_date}}'
        filter: '{{campaign_name}}'
      outputParameters:
      - name: sessions
        type: string
        mapping: $.rows[0].metricValues[0].value
      - name: conversions
        type: string
        mapping: $.rows[0].metricValues[1].value
      - name: bounce_rate
        type: string
        mapping: $.rows[0].metricValues[2].value
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-campaign-performance.yml

Triggers a Power BI dataset refresh for a specified workspace and dataset, used by analytics teams to ensure dashboards reflect latest clinical or commercial data.

naftiko: '0.5'
info:
  label: Power BI Dashboard Refresh Trigger
  description: Triggers a Power BI dataset refresh for a specified workspace and dataset, used by analytics teams to ensure dashboards reflect latest clinical or commercial data.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: analytics-refresh
    port: 8080
    tools:
    - name: refresh-dashboard
      description: Trigger a Power BI dataset refresh by workspace and dataset ID. Returns refresh request status.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      call: powerbi.trigger-refresh
      with:
        workspace_id: '{{workspace_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: request_id
        type: string
        mapping: $.requestId
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-dashboard-refresh-trigger.yml

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

naftiko: '0.5'
info:
  label: AstraZeneca Metric Dashboard Query
  description: Queries metric values from a monitoring dashboard. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira
    port: 8080
    tools:
    - name: get-metric_dashboard_query
      description: Queries metric values from a monitoring dashboard. Used by AstraZeneca teams.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: The metric_name to look up.
      call: jira.get-metric_name
      with:
        metric_name: '{{metric_name}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.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: astrazeneca_metric_dashboard_q
        method: GET
Open in Framework → View in Fleet → astrazeneca-metric-dashboard-query.yml

Checks availability of an API endpoint. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca API Endpoint Status
  description: Checks availability of an API endpoint. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: get-api_endpoint_status
      description: Checks availability of an API endpoint. Used by AstraZeneca teams.
      inputParameters:
      - name: endpoint_url
        in: body
        type: string
        description: The endpoint_url to look up.
      call: grafana.get-endpoint_url
      with:
        endpoint_url: '{{endpoint_url}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://astrazeneca-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: astrazeneca_api_endpoint_statu
        method: GET
Open in Framework → View in Fleet → astrazeneca-api-endpoint-status.yml

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

naftiko: '0.5'
info:
  label: AstraZeneca Service Health Check
  description: Checks the health status of a monitored service. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: salesforce
    port: 8080
    tools:
    - name: get-service_health_check
      description: Checks the health status of a monitored service. Used by AstraZeneca teams.
      inputParameters:
      - name: health_target
        in: body
        type: string
        description: The health_target to look up.
      call: salesforce.get-health_target
      with:
        health_target: '{{health_target}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://astrazeneca.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: astrazeneca_service_health_che
        method: GET
Open in Framework → View in Fleet → astrazeneca-service-health-check.yml

Processes a Data Subject Access Request by searching for personal data in Workday, Salesforce, and ServiceNow, compiling results into a SharePoint package, and tracking the request in ServiceNow.

naftiko: '0.5'
info:
  label: DSAR Privacy Request Orchestrator
  description: Processes a Data Subject Access Request by searching for personal data in Workday, Salesforce, and ServiceNow, compiling results into a SharePoint package, and tracking the request in ServiceNow.
  tags:
  - privacy
  - compliance
  - gdpr
  - workday
  - salesforce
  - servicenow
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: privacy-dsar
    port: 8080
    tools:
    - name: process-dsar
      description: 'Process a DSAR: search personal data across systems, compile results, and track completion.'
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The DSAR request identifier.
      - name: data_subject_email
        in: body
        type: string
        description: The email address of the data subject.
      - name: data_subject_name
        in: body
        type: string
        description: The full name of the data subject.
      steps:
      - name: search-workday
        type: call
        call: workday.search-workers
        with:
          email: '{{data_subject_email}}'
      - name: search-salesforce
        type: call
        call: salesforce.search-contacts
        with:
          email: '{{data_subject_email}}'
      - name: search-servicenow
        type: call
        call: servicenow.search-records
        with:
          table: sys_user
          email: '{{data_subject_email}}'
      - name: compile-package
        type: call
        call: sharepoint.create-folder
        with:
          site_id: privacy_dsar_site
          folder_path: DSAR/{{request_id}}_{{data_subject_name}}
      - name: update-tracking
        type: call
        call: servicenow.create-record
        with:
          table: u_dsar_requests
          request_id: '{{request_id}}'
          subject_name: '{{data_subject_name}}'
          systems_searched: Workday, Salesforce, ServiceNow
          package_url: '{{compile-package.url}}'
          status: data_compiled
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/astrazeneca
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers-search
      path: /workers?email={{email}}
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-workers
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://astrazeneca.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts-search
      path: /parameterizedSearch/?q={{email}}&sobject=Contact
      inputParameters:
      - name: email
        in: query
      operations:
      - name: search-contacts
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table-search
      path: /table/{{table}}?sysparm_query=email={{email}}
      inputParameters:
      - name: table
        in: path
      - name: email
        in: query
      operations:
      - name: search-records
        method: GET
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        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
Open in Framework → View in Fleet → dsar-privacy-request-orchestrator.yml

When a medical information request arrives via Salesforce Service Cloud, retrieves the HCP profile, searches Veeva Vault for approved response documents, creates a case in ServiceNow, and sends the response via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Medical Information Request Orchestrator
  description: When a medical information request arrives via Salesforce Service Cloud, retrieves the HCP profile, searches Veeva Vault for approved response documents, creates a case in ServiceNow, and sends the response via Microsoft Outlook.
  tags:
  - medical-affairs
  - medical-information
  - salesforce
  - veeva
  - servicenow
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: medical-information
    port: 8080
    tools:
    - name: process-med-info-request
      description: 'Process a medical information request end-to-end: retrieve HCP context, find approved response, log case, and send reply.'
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce Service Cloud case ID.
      - name: product_name
        in: body
        type: string
        description: The drug product referenced in the inquiry.
      - name: topic
        in: body
        type: string
        description: The medical topic of the inquiry.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: search-vault-docs
        type: call
        call: veeva.search-documents
        with:
          query: product:{{product_name}} AND topic:{{topic}} AND status:Approved
      - name: log-mi-case
        type: call
        call: servicenow.create-record
        with:
          table: u_medical_information
          short_description: 'MI Request: {{product_name}} - {{topic}}'
          hcp_name: '{{get-case.contact_name}}'
          document_id: '{{search-vault-docs.documents[0].id}}'
      - name: send-response
        type: call
        call: outlook.send-mail
        with:
          to: '{{get-case.contact_email}}'
          subject: 'AstraZeneca Medical Information: {{product_name}} - {{topic}}'
          body: 'Dear {{get-case.contact_name}}, please find the attached response document regarding {{product_name}}. Reference: {{log-mi-case.sys_id}}'
          attachment_url: '{{search-vault-docs.documents[0].download_url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://astrazeneca.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: veeva
    baseUri: https://astrazeneca.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: search
      path: /objects/documents/search
      operations:
      - name: search-documents
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → medical-information-request-orchestrator.yml

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

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

Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB.

naftiko: '0.5'
info:
  label: IT Asset Lifecycle Pipeline
  description: Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB.
  tags:
  - operations
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: it_asset_lifecycle_pipeline
      description: Orchestrate it asset lifecycle pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: IT Asset Lifecycle Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.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://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → it-asset-lifecycle-pipeline.yml

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

naftiko: '0.5'
info:
  label: AstraZeneca User Account Lookup
  description: Retrieves user account details from the directory. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: get-user_account_lookup
      description: Retrieves user account details from the directory. Used by AstraZeneca teams.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The user_id to look up.
      call: snowflake.get-user_id
      with:
        user_id: '{{user_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: astrazeneca_user_account_looku
        method: GET
Open in Framework → View in Fleet → astrazeneca-user-account-lookup.yml

Retrieves vulnerability scan results. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca Security Scan Results
  description: Retrieves vulnerability scan results. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack
    port: 8080
    tools:
    - name: get-security_scan_results
      description: Retrieves vulnerability scan results. Used by AstraZeneca teams.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The scan_id to look up.
      call: slack.get-scan_id
      with:
        scan_id: '{{scan_id}}'
  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: astrazeneca_security_scan_resu
        method: GET
Open in Framework → View in Fleet → astrazeneca-security-scan-results.yml

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

naftiko: '0.5'
info:
  label: Employee Onboarding Automation Pipeline
  description: Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.
  tags:
  - hr
  - workday
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: employee_onboarding_automation
      description: Orchestrate employee onboarding automation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-workday
        type: call
        call: workday.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-workday.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: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → employee-onboarding-automation-pipeline.yml

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

naftiko: '0.5'
info:
  label: Change Management Approval Pipeline
  description: Validates change requests, routes for approval, schedules implementation, and notifies stakeholders.
  tags:
  - itsm
  - servicenow
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: change_management_approval_pipeline
      description: Orchestrate change management approval pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Change Management Approval Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.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://astrazeneca.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → change-management-approval-pipeline.yml

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

naftiko: '0.5'
info:
  label: AstraZeneca Log Search Query
  description: Searches application logs for matching patterns. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: servicenow
    port: 8080
    tools:
    - name: get-log_search_query
      description: Searches application logs for matching patterns. Used by AstraZeneca teams.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search_query to look up.
      call: servicenow.get-search_query
      with:
        search_query: '{{search_query}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.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: astrazeneca_servicenow_log_sea
        method: GET
Open in Framework → View in Fleet → astrazeneca-log-search-query.yml

Launches a clinical trial patient recruitment campaign by creating a Salesforce Marketing Cloud email journey, publishing trial information to the AstraZeneca website via the CMS, and tracking campaign performance in Google Analytics.

naftiko: '0.5'
info:
  label: Patient Recruitment Campaign Orchestrator
  description: Launches a clinical trial patient recruitment campaign by creating a Salesforce Marketing Cloud email journey, publishing trial information to the AstraZeneca website via the CMS, and tracking campaign performance in Google Analytics.
  tags:
  - clinical-trials
  - patient-recruitment
  - salesforce-marketing-cloud
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: patient-recruitment
    port: 8080
    tools:
    - name: launch-recruitment-campaign
      description: 'Orchestrate patient recruitment: create email journey, publish trial listing, and configure analytics tracking.'
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical trial protocol number.
      - name: study_title
        in: body
        type: string
        description: The public study title.
      - name: therapeutic_area
        in: body
        type: string
        description: The therapeutic area.
      - name: target_audience_list
        in: body
        type: string
        description: Salesforce Marketing Cloud data extension name for the target audience.
      steps:
      - name: create-email-journey
        type: call
        call: sfmc.create-journey
        with:
          name: Recruitment - {{study_title}}
          data_extension: '{{target_audience_list}}'
          template: clinical_trial_recruitment
          study_id: '{{study_id}}'
      - name: publish-trial-page
        type: call
        call: cms.create-page
        with:
          title: '{{study_title}} - Clinical Trial Recruitment'
          category: clinical-trials/{{therapeutic_area}}
          study_id: '{{study_id}}'
      - name: configure-analytics
        type: call
        call: google-analytics.create-custom-dimension
        with:
          property_id: $secrets.ga_property_id
          dimension_name: study_{{study_id}}_recruitment
  consumes:
  - type: http
    namespace: sfmc
    baseUri: https://astrazeneca.rest.marketingcloudapis.com/interaction/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: journeys
      path: /interactions
      operations:
      - name: create-journey
        method: POST
  - type: http
    namespace: cms
    baseUri: https://cms.astrazeneca.com/api/v2
    authentication:
      type: bearer
      token: $secrets.cms_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: google-analytics
    baseUri: https://analyticsadmin.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: custom-dimensions
      path: /properties/{{property_id}}/customDimensions
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: create-custom-dimension
        method: POST
Open in Framework → View in Fleet → patient-recruitment-campaign-orchestrator.yml

On detection of a GxP manufacturing deviation, creates a quality event in SAP QM, opens a CAPA investigation in ServiceNow, uploads supporting evidence to SharePoint, and alerts the quality assurance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: GxP Deviation Workflow
  description: On detection of a GxP manufacturing deviation, creates a quality event in SAP QM, opens a CAPA investigation in ServiceNow, uploads supporting evidence to SharePoint, and alerts the quality assurance team via Microsoft Teams.
  tags:
  - quality
  - gxp
  - manufacturing
  - sap
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-deviations
    port: 8080
    tools:
    - name: raise-deviation
      description: 'Orchestrate a GxP deviation workflow: create quality event, open CAPA, store evidence, and notify QA team.'
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The manufacturing batch number.
      - name: deviation_description
        in: body
        type: string
        description: Description of the observed deviation.
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code where deviation occurred.
      - name: severity
        in: body
        type: string
        description: Deviation severity (critical, major, minor).
      steps:
      - name: create-quality-notification
        type: call
        call: sap-qm.create-notification
        with:
          notification_type: Q2
          plant: '{{plant_code}}'
          material_batch: '{{batch_number}}'
          description: '{{deviation_description}}'
      - name: open-capa
        type: call
        call: servicenow.create-record
        with:
          table: u_capa_investigations
          short_description: CAPA for batch {{batch_number}} - {{severity}} deviation
          description: '{{deviation_description}}'
          sap_qm_ref: '{{create-quality-notification.notification_number}}'
      - name: store-evidence
        type: call
        call: sharepoint.create-folder
        with:
          site_id: quality_management_site
          folder_path: Deviations/{{batch_number}}_{{create-quality-notification.notification_number}}
      - name: alert-qa-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_assurance
          text: 'GxP Deviation ({{severity}}): Batch {{batch_number}} at plant {{plant_code}}. SAP QM: {{create-quality-notification.notification_number}}. CAPA: {{open-capa.sys_id}}. Evidence folder: {{store-evidence.url}}'
  consumes:
  - type: http
    namespace: sap-qm
    baseUri: https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: notifications
      path: /QualityNotification
      operations:
      - name: create-notification
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → gxp-deviation-workflow.yml

Retrieves compliance check status. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca Compliance Check Status
  description: Retrieves compliance check status. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - okta
capability:
  exposes:
  - type: mcp
    namespace: okta
    port: 8080
    tools:
    - name: get-compliance_check_status
      description: Retrieves compliance check status. Used by AstraZeneca teams.
      inputParameters:
      - name: check_id
        in: body
        type: string
        description: The check_id to look up.
      call: okta.get-check_id
      with:
        check_id: '{{check_id}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://astrazeneca.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: astrazeneca_compliance_check_s
        method: GET
Open in Framework → View in Fleet → astrazeneca-compliance-check-status.yml

Executes a read-only analytics query. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca Database Query Runner
  description: Executes a read-only analytics query. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: powerbi
    port: 8080
    tools:
    - name: get-database_query_runner
      description: Executes a read-only analytics query. Used by AstraZeneca teams.
      inputParameters:
      - name: sql_query
        in: body
        type: string
        description: The sql_query to look up.
      call: powerbi.get-sql_query
      with:
        sql_query: '{{sql_query}}'
  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: astrazeneca_database_query_run
        method: GET
Open in Framework → View in Fleet → astrazeneca-database-query-runner.yml

When a lab experiment completes, extracts results from the electronic lab notebook, transforms the data via Azure Data Factory, loads it into Snowflake, and notifies the research lead via Slack.

naftiko: '0.5'
info:
  label: R&D Experiment Results to Data Lake
  description: When a lab experiment completes, extracts results from the electronic lab notebook, transforms the data via Azure Data Factory, loads it into Snowflake, and notifies the research lead via Slack.
  tags:
  - research
  - data-pipeline
  - azure-data-factory
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: rd-data-pipeline
    port: 8080
    tools:
    - name: ingest-experiment-results
      description: Extract experiment results from the ELN, transform and load into Snowflake, and notify the research team.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: The electronic lab notebook experiment identifier.
      - name: project_code
        in: body
        type: string
        description: The R&D project code.
      - name: researcher_email
        in: body
        type: string
        description: Email of the lead researcher to notify.
      steps:
      - name: get-experiment
        type: call
        call: eln.get-experiment
        with:
          experiment_id: '{{experiment_id}}'
      - name: trigger-etl
        type: call
        call: adf.trigger-pipeline
        with:
          pipeline_name: eln_to_snowflake
          parameters:
            experiment_id: '{{experiment_id}}'
            project_code: '{{project_code}}'
            source_url: '{{get-experiment.data_export_url}}'
      - name: notify-researcher
        type: call
        call: slack.post-message
        with:
          channel: rd-data-pipelines
          text: 'Experiment {{experiment_id}} (project {{project_code}}) results loaded to Snowflake. Pipeline run: {{trigger-etl.run_id}}. Researcher: {{researcher_email}}'
  consumes:
  - type: http
    namespace: eln
    baseUri: https://astrazeneca-eln.benchling.com/api/v2
    authentication:
      type: bearer
      token: $secrets.benchling_token
    resources:
    - name: experiments
      path: /experiments/{{experiment_id}}
      inputParameters:
      - name: experiment_id
        in: path
      operations:
      - name: get-experiment
        method: GET
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/rg-astrazeneca-data/providers/Microsoft.DataFactory/factories/adf-astrazeneca
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipelines
      path: /pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01
      inputParameters:
      - name: pipeline_name
        in: path
      operations:
      - name: trigger-pipeline
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → r-d-experiment-results-to-data-lake.yml

Queries cost and spending data. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca Cost Report Query
  description: Queries cost and spending data. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: get-cost_report_query
      description: Queries cost and spending data. Used by AstraZeneca teams.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The cost_center to look up.
      call: workday.get-cost_center
      with:
        cost_center: '{{cost_center}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: astrazeneca_cost_report_query
        method: GET
Open in Framework → View in Fleet → astrazeneca-cost-report-query.yml

On new clinical trial protocol creation in Oracle Clinical, provisions a SharePoint document library for trial master file storage, creates a Jira epic for study milestones, and notifies the study team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Protocol Orchestrator
  description: On new clinical trial protocol creation in Oracle Clinical, provisions a SharePoint document library for trial master file storage, creates a Jira epic for study milestones, and notifies the study team via Microsoft Teams.
  tags:
  - clinical-trials
  - protocol-management
  - oracle
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-trial-setup
    port: 8080
    tools:
    - name: provision-trial
      description: Given an Oracle Clinical protocol ID, orchestrate trial document provisioning, milestone tracking setup, and team notification.
      inputParameters:
      - name: protocol_id
        in: body
        type: string
        description: The Oracle Clinical protocol identifier.
      - name: study_title
        in: body
        type: string
        description: The human-readable study title.
      - name: therapeutic_area
        in: body
        type: string
        description: The therapeutic area (e.g., oncology, cardiovascular).
      steps:
      - name: get-protocol
        type: call
        call: oracle-clinical.get-protocol
        with:
          protocol_id: '{{protocol_id}}'
      - name: create-tmf-library
        type: call
        call: sharepoint.create-folder
        with:
          site_id: clinical_tmf_site
          folder_path: TMF/{{study_title}}_{{protocol_id}}
      - name: create-study-epic
        type: call
        call: jira.create-issue
        with:
          project_key: CLIN
          summary: 'Study Milestones: {{study_title}}'
          issue_type: Epic
          description: Tracking milestones for {{study_title}} in {{therapeutic_area}}.
      - name: notify-study-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{therapeutic_area}}_trials'
          text: 'New trial provisioned: {{study_title}} ({{protocol_id}}). TMF at {{create-tmf-library.url}}. Track milestones at {{create-study-epic.key}}.'
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://astrazeneca-clinical.oracle.com/ocs/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_clinical_token
    resources:
    - name: protocols
      path: /protocols/{{protocol_id}}
      inputParameters:
      - name: protocol_id
        in: path
      operations:
      - name: get-protocol
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-protocol-orchestrator.yml

Retrieves an adverse event case from the pharmacovigilance safety database by case ID, returning patient demographics, suspected drug, event terms, and seriousness classification.

naftiko: '0.5'
info:
  label: Adverse Event Report Lookup
  description: Retrieves an adverse event case from the pharmacovigilance safety database by case ID, returning patient demographics, suspected drug, event terms, and seriousness classification.
  tags:
  - pharmacovigilance
  - drug-safety
  - adverse-events
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: pharmacovigilance
    port: 8080
    tools:
    - name: get-adverse-event
      description: Look up an adverse event case by case number, log the inquiry in ServiceNow for audit trail, and notify the pharmacovigilance team via Slack.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: The safety database case number.
      - name: requester_name
        in: body
        type: string
        description: Name of the person requesting the case review.
      steps:
      - name: fetch-case
        type: call
        call: safety-db.get-case
        with:
          case_number: '{{case_number}}'
      - name: log-inquiry
        type: call
        call: servicenow.create-record
        with:
          table: u_pv_case_inquiries
          case_number: '{{case_number}}'
          requester: '{{requester_name}}'
          seriousness: '{{fetch-case.seriousness}}'
      - name: notify-pv
        type: call
        call: slack.post-message
        with:
          channel: pharmacovigilance
          text: 'AE case {{case_number}} reviewed by {{requester_name}}. Product: {{fetch-case.products[0].name}}. PT: {{fetch-case.events[0].meddra_pt}}. Seriousness: {{fetch-case.seriousness}}.'
  consumes:
  - type: http
    namespace: safety-db
    baseUri: https://astrazeneca-safety.oracle.com/argus/api/v1
    authentication:
      type: bearer
      token: $secrets.argus_token
    resources:
    - name: cases
      path: /cases/{{case_number}}
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → adverse-event-report-lookup.yml

Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.

naftiko: '0.5'
info:
  label: Disaster Recovery Readiness Pipeline
  description: Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.
  tags:
  - disaster-recovery
  - servicenow
  - confluence
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: disaster-recovery
    port: 8080
    tools:
    - name: disaster_recovery_readiness_pipeline
      description: Orchestrate disaster recovery readiness pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-pagerduty
        type: call
        call: pagerduty.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Disaster Recovery Readiness Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.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://astrazeneca.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: pagerduty-op
        method: POST
Open in Framework → View in Fleet → disaster-recovery-readiness-pipeline.yml

Queries Grafana for active alerts on a specific dashboard, returning alert names, states, and evaluation timestamps for infrastructure and application monitoring.

naftiko: '0.5'
info:
  label: Grafana Dashboard Alert Summary
  description: Queries Grafana for active alerts on a specific dashboard, returning alert names, states, and evaluation timestamps for infrastructure and application monitoring.
  tags:
  - it-operations
  - monitoring
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: dashboard-alerts
    port: 8080
    tools:
    - name: get-dashboard-alerts
      description: Retrieve active alerts for a Grafana dashboard, create a ServiceNow incident for critical alerts, and notify the SRE team via Microsoft Teams.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: The Grafana dashboard UID.
      - name: dashboard_name
        in: body
        type: string
        description: The human-readable dashboard name for notifications.
      steps:
      - name: fetch-alerts
        type: call
        call: grafana.get-alerts
        with:
          dashboard_uid: '{{dashboard_uid}}'
      - name: create-alert-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Grafana alerts: {{dashboard_name}} - {{fetch-alerts.totalCount}} active'
          category: monitoring
          assigned_group: SRE_Team
          description: Dashboard {{dashboard_name}} ({{dashboard_uid}}) has {{fetch-alerts.totalCount}} active alerts.
      - name: notify-sre
        type: call
        call: msteams.send-message
        with:
          channel_id: sre_alerts
          text: 'Grafana dashboard {{dashboard_name}}: {{fetch-alerts.totalCount}} active alerts. Incident: {{create-alert-incident.number}}.'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.astrazeneca.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: alerts
      path: /alerts?dashboardId={{dashboard_uid}}
      inputParameters:
      - name: dashboard_uid
        in: query
      operations:
      - name: get-alerts
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-alert-summary.yml

Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.

naftiko: '0.5'
info:
  label: SLA Compliance Monitoring Pipeline
  description: Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.
  tags:
  - operations
  - datadog
  - servicenow
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: sla_compliance_monitoring_pipeline
      description: Orchestrate sla compliance monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: SLA Compliance Monitoring Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
Open in Framework → View in Fleet → sla-compliance-monitoring-pipeline.yml

Searches the Elasticsearch cluster for clinical documents by keyword, returning document titles, types, study IDs, and relevance scores for clinical information retrieval.

naftiko: '0.5'
info:
  label: Elasticsearch Clinical Document Search
  description: Searches the Elasticsearch cluster for clinical documents by keyword, returning document titles, types, study IDs, and relevance scores for clinical information retrieval.
  tags:
  - search
  - clinical-trials
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: clinical-search
    port: 8080
    tools:
    - name: search-clinical-docs
      description: Search clinical documents in Elasticsearch, log the search for compliance audit in ServiceNow, and share results via Microsoft Teams.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search query string.
      - name: index
        in: body
        type: string
        description: The Elasticsearch index name (e.g., clinical-protocols, csr-documents).
      - name: requester_email
        in: body
        type: string
        description: Email of the person performing the search.
      steps:
      - name: execute-search
        type: call
        call: elasticsearch.search
        with:
          index: '{{index}}'
          query: '{{query}}'
      - name: log-search-audit
        type: call
        call: servicenow.create-record
        with:
          table: u_document_search_audit
          requester: '{{requester_email}}'
          index: '{{index}}'
          query: '{{query}}'
          results_count: '{{execute-search.hits.total.value}}'
      - name: share-results
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{requester_email}}'
          text: 'Clinical document search complete: {{execute-search.hits.total.value}} results found for ''{{query}}'' in {{index}}. Audit ref: {{log-search-audit.sys_id}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://elasticsearch.astrazeneca.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
        method: POST
Open in Framework → View in Fleet → elasticsearch-clinical-document-search.yml

Schedules equipment calibration, tracks completion, validates results, and creates maintenance records.

naftiko: '0.5'
info:
  label: Lab Equipment Calibration Pipeline
  description: Schedules equipment calibration, tracks completion, validates results, and creates maintenance records.
  tags:
  - quality
  - servicenow
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: astrazeneca_lab_equipment_calibration_pi
      description: Orchestrate lab equipment calibration 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: Lab Equipment Calibration Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.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://astrazeneca.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → lab-equipment-calibration-pipeline.yml

Analyzes adverse event reports, detects safety signals, creates investigation cases, and alerts pharmacovigilance.

naftiko: '0.5'
info:
  label: Drug Safety Signal Detection Pipeline
  description: Analyzes adverse event reports, detects safety signals, creates investigation cases, and alerts pharmacovigilance.
  tags:
  - safety
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: safety
    port: 8080
    tools:
    - name: drug_safety_signal_detection_pipeline
      description: Orchestrate drug safety signal detection 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-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Drug Safety Signal Detection Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.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://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → drug-safety-signal-detection-pipeline.yml

When a new GxP role assignment is made in Workday, looks up required training in the LMS, assigns courses to the employee, creates a compliance tracking record in ServiceNow, and notifies the employee via Microsoft Teams.

naftiko: '0.5'
info:
  label: Compliance Training Assignment Orchestrator
  description: When a new GxP role assignment is made in Workday, looks up required training in the LMS, assigns courses to the employee, creates a compliance tracking record in ServiceNow, and notifies the employee via Microsoft Teams.
  tags:
  - compliance
  - training
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: assign-gxp-training
      description: On GxP role change, assign required training, create compliance record, and notify the employee.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: new_role
        in: body
        type: string
        description: The new GxP role being assigned.
      - name: effective_date
        in: body
        type: string
        description: Role effective date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: get-required-training
        type: call
        call: lms.get-role-curriculum
        with:
          role: '{{new_role}}'
      - name: assign-courses
        type: call
        call: lms.assign-curriculum
        with:
          learner_email: '{{get-employee.work_email}}'
          curriculum_id: '{{get-required-training.curriculum_id}}'
          due_date: '{{effective_date}}'
      - name: create-compliance-record
        type: call
        call: servicenow.create-record
        with:
          table: u_gxp_training_compliance
          employee_name: '{{get-employee.full_name}}'
          role: '{{new_role}}'
          curriculum: '{{get-required-training.curriculum_name}}'
          due_date: '{{effective_date}}'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Hi {{get-employee.first_name}}, you have been assigned GxP training for your new role ({{new_role}}). Please complete {{get-required-training.curriculum_name}} by {{effective_date}}. Tracking: {{create-compliance-record.sys_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/astrazeneca
    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: lms
    baseUri: https://astrazeneca-lms.csod.com/services/api/x/v1
    authentication:
      type: bearer
      token: $secrets.lms_token
    resources:
    - name: curricula
      path: /curricula/by-role/{{role}}
      inputParameters:
      - name: role
        in: path
      operations:
      - name: get-role-curriculum
        method: GET
    - name: assignments
      path: /assignments
      operations:
      - name: assign-curriculum
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-training-assignment-orchestrator.yml

Ingests clinical trial data, validates against protocol, loads into analytics platform, and notifies researchers.

naftiko: '0.5'
info:
  label: Clinical Trial Data Pipeline
  description: Ingests clinical trial data, validates against protocol, loads into analytics platform, and notifies researchers.
  tags:
  - clinical
  - snowflake
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: clinical_trial_data_pipeline
      description: Orchestrate clinical trial data 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-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Clinical Trial Data Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.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: confluence
    baseUri: https://astrazeneca.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → clinical-trial-data-pipeline.yml

Retrieves metadata for a Tableau workbook used in clinical trial reporting, including workbook name, owner, views, last refresh time, and data source connections.

naftiko: '0.5'
info:
  label: Tableau Clinical Dashboard Workbook Info
  description: Retrieves metadata for a Tableau workbook used in clinical trial reporting, including workbook name, owner, views, last refresh time, and data source connections.
  tags:
  - analytics
  - clinical-trials
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: clinical-dashboards
    port: 8080
    tools:
    - name: get-workbook-info
      description: Look up a Tableau workbook by ID, log access in Snowflake for governance tracking, and notify the workbook owner via Slack if stale.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook LUID.
      - name: requester_name
        in: body
        type: string
        description: Name of the person requesting workbook info.
      steps:
      - name: fetch-workbook
        type: call
        call: tableau.get-workbook
        with:
          workbook_id: '{{workbook_id}}'
      - name: log-access
        type: call
        call: snowflake.insert-record
        with:
          database: ANALYTICS_GOVERNANCE
          schema: TABLEAU
          table: WORKBOOK_ACCESS_LOG
          data:
            workbook_id: '{{workbook_id}}'
            workbook_name: '{{fetch-workbook.workbook.name}}'
            requester: '{{requester_name}}'
            owner: '{{fetch-workbook.workbook.owner.name}}'
      - name: notify-owner
        type: call
        call: slack.post-message
        with:
          channel: analytics-governance
          text: 'Workbook {{fetch-workbook.workbook.name}} (owner: {{fetch-workbook.workbook.owner.name}}) accessed by {{requester_name}}. Last updated: {{fetch-workbook.workbook.updatedAt}}.'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.astrazeneca.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/$secrets.tableau_site_id/workbooks/{{workbook_id}}
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-clinical-dashboard-workbook-info.yml

Retrieves a sourcing event from SAP Ariba by event ID, returning event title, status, supplier count, and award date for procurement visibility.

naftiko: '0.5'
info:
  label: SAP Ariba Sourcing Event Status
  description: Retrieves a sourcing event from SAP Ariba by event ID, returning event title, status, supplier count, and award date for procurement visibility.
  tags:
  - procurement
  - sourcing
  - sap-ariba
capability:
  exposes:
  - type: mcp
    namespace: procurement-sourcing
    port: 8080
    tools:
    - name: get-sourcing-event
      description: Look up a SAP Ariba sourcing event. Returns title, status, number of participating suppliers, and award date.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The SAP Ariba sourcing event ID.
      call: ariba.get-event
      with:
        event_id: '{{event_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: status
        type: string
        mapping: $.status
      - name: supplier_count
        type: string
        mapping: $.participantCount
      - name: award_date
        type: string
        mapping: $.awardDate
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/sourcing-projects/v1/prod
    authentication:
      type: bearer
      token: $secrets.ariba_token
    inputParameters:
    - name: apiKey
      in: header
      value: $secrets.ariba_api_key
    resources:
    - name: events
      path: /events/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-event
        method: GET
Open in Framework → View in Fleet → sap-ariba-sourcing-event-status.yml

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

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

Tracks regulatory submission milestones, monitors agency responses, and notifies regulatory affairs.

naftiko: '0.5'
info:
  label: Regulatory Submission Tracker Pipeline
  description: Tracks regulatory submission milestones, monitors agency responses, and notifies regulatory affairs.
  tags:
  - regulatory
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: regulatory_submission_tracker_pipeline
      description: Orchestrate regulatory submission 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-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: Regulatory Submission Tracker Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.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://astrazeneca.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → regulatory-submission-tracker-pipeline.yml

Retrieves a manufacturing batch record from the MES system, including batch status, process parameters, in-process control results, and yield for pharmaceutical production monitoring.

naftiko: '0.5'
info:
  label: Manufacturing Execution Batch Record
  description: Retrieves a manufacturing batch record from the MES system, including batch status, process parameters, in-process control results, and yield for pharmaceutical production monitoring.
  tags:
  - manufacturing
  - production
  - sap
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-execution
    port: 8080
    tools:
    - name: get-batch-record
      description: Look up a manufacturing batch execution record from SAP MES, store yield data in Snowflake for trending, and alert the production team via Microsoft Teams if yield is below threshold.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The manufacturing batch number.
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      - name: yield_threshold
        in: body
        type: string
        description: Minimum acceptable yield percentage.
      steps:
      - name: fetch-batch
        type: call
        call: sap-mes.get-batch
        with:
          batch: '{{batch_number}}'
          plant: '{{plant_code}}'
      - name: store-yield-data
        type: call
        call: snowflake.insert-record
        with:
          database: MANUFACTURING
          schema: PRODUCTION
          table: BATCH_YIELD_TRENDING
          data:
            batch_number: '{{batch_number}}'
            plant_code: '{{plant_code}}'
            yield_pct: '{{fetch-batch.yield_percentage}}'
            ipc_status: '{{fetch-batch.ipc_overall_status}}'
            status: '{{fetch-batch.status}}'
      - name: alert-production
        type: call
        call: msteams.send-message
        with:
          channel_id: production_operations
          text: 'Batch {{batch_number}} at plant {{plant_code}}: Status={{fetch-batch.status}}, Yield={{fetch-batch.yield_percentage}}% (threshold: {{yield_threshold}}%), IPC={{fetch-batch.ipc_overall_status}}.'
  consumes:
  - type: http
    namespace: sap-mes
    baseUri: https://astrazeneca-mes.sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_mes_token
    resources:
    - name: batches
      path: /batches/{{batch}}?plant={{plant}}
      inputParameters:
      - name: batch
        in: path
      - name: plant
        in: query
      operations:
      - name: get-batch
        method: GET
Open in Framework → View in Fleet → manufacturing-execution-batch-record.yml

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

naftiko: '0.5'
info:
  label: Software License Optimization Pipeline
  description: Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.
  tags:
  - operations
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: software_license_optimization
      description: Orchestrate software license optimization pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Software License Optimization Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.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://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → software-license-optimization-pipeline.yml

Retrieves metadata for a GitHub repository by owner and repo name, returning description, default branch, open issues count, and last push date for R&D engineering teams.

naftiko: '0.5'
info:
  label: GitHub Repository Status
  description: Retrieves metadata for a GitHub repository by owner and repo name, returning description, default branch, open issues count, and last push date for R&D engineering teams.
  tags:
  - engineering
  - development
  - github
capability:
  exposes:
  - type: mcp
    namespace: dev-repos
    port: 8080
    tools:
    - name: get-repo-info
      description: Look up a GitHub repository. Returns description, default branch, open issues, and last push timestamp.
      inputParameters:
      - name: owner
        in: body
        type: string
        description: The GitHub organization or user.
      - name: repo
        in: body
        type: string
        description: The repository name.
      call: github.get-repo
      with:
        owner: '{{owner}}'
        repo: '{{repo}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.description
      - name: default_branch
        type: string
        mapping: $.default_branch
      - name: open_issues
        type: string
        mapping: $.open_issues_count
      - name: last_push
        type: string
        mapping: $.pushed_at
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{owner}}/{{repo}}
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-status.yml

Retrieves current monitoring alert status. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca Alert Status Check
  description: Retrieves current monitoring alert status. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: elasticsearc
    port: 8080
    tools:
    - name: get-alert_status_check
      description: Retrieves current monitoring alert status. Used by AstraZeneca teams.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The alert_id to look up.
      call: elasticsearch.get-alert_id
      with:
        alert_id: '{{alert_id}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://astrazeneca-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: astrazeneca_alert_status_check
        method: GET
Open in Framework → View in Fleet → astrazeneca-alert-status-check.yml

Processes clinical investigator payments by pulling visit data from Oracle Clinical, calculating payment amounts, creating payment requests in SAP, and notifying the finance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Investigator Payment Processing
  description: Processes clinical investigator payments by pulling visit data from Oracle Clinical, calculating payment amounts, creating payment requests in SAP, and notifying the finance team via Microsoft Teams.
  tags:
  - clinical-trials
  - finance
  - investigator-payments
  - oracle
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: investigator-payments
    port: 8080
    tools:
    - name: process-investigator-payment
      description: Calculate and process investigator site payment based on completed visits and milestones.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The study protocol number.
      - name: site_id
        in: body
        type: string
        description: The clinical site identifier.
      - name: payment_period
        in: body
        type: string
        description: The payment period (e.g., 2026-Q1).
      steps:
      - name: get-visit-data
        type: call
        call: oracle-clinical.get-site-visits
        with:
          study_id: '{{study_id}}'
          site_id: '{{site_id}}'
          period: '{{payment_period}}'
      - name: create-payment-request
        type: call
        call: sap.create-invoice
        with:
          vendor_id: '{{get-visit-data.site_vendor_id}}'
          amount: '{{get-visit-data.total_payable}}'
          currency: '{{get-visit-data.currency}}'
          reference: CLIN-{{study_id}}-{{site_id}}-{{payment_period}}
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical_finance
          text: 'Investigator payment processed: Study {{study_id}}, Site {{site_id}}, Period {{payment_period}}. Amount: {{get-visit-data.total_payable}} {{get-visit-data.currency}}. SAP Invoice: {{create-payment-request.invoice_number}}.'
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://astrazeneca-clinical.oracle.com/ocs/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_clinical_token
    resources:
    - name: site-visits
      path: /studies/{{study_id}}/sites/{{site_id}}/visits?period={{period}}
      inputParameters:
      - name: study_id
        in: path
      - name: site_id
        in: path
      - name: period
        in: query
      operations:
      - name: get-site-visits
        method: GET
  - type: http
    namespace: sap
    baseUri: https://astrazeneca-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: 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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → investigator-payment-processing.yml

Checks status of a recent deployment. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca Deployment Status Check
  description: Checks status of a recent deployment. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - github
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: get-deployment_status_check
      description: Checks status of a recent deployment. Used by AstraZeneca teams.
      inputParameters:
      - name: deployment_id
        in: body
        type: string
        description: The deployment_id to look up.
      call: github.get-deployment_id
      with:
        deployment_id: '{{deployment_id}}'
  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: astrazeneca_deployment_status_
        method: GET
Open in Framework → View in Fleet → astrazeneca-deployment-status-check.yml

Retrieves the latest Terraform plan output from an Azure DevOps pipeline run for a given infrastructure workspace, returning resource additions, changes, and destructions.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Plan Check
  description: Retrieves the latest Terraform plan output from an Azure DevOps pipeline run for a given infrastructure workspace, returning resource additions, changes, and destructions.
  tags:
  - devops
  - infrastructure
  - terraform
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: infra-terraform
    port: 8080
    tools:
    - name: get-terraform-plan
      description: Retrieve the latest Terraform plan summary from Azure DevOps for a workspace. Returns planned additions, changes, and deletions.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline ID for Terraform.
      call: azdo.get-latest-run
      with:
        project: '{{project_name}}'
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.id
      - name: state
        type: string
        mapping: $.state
      - name: result
        type: string
        mapping: $.result
      - name: created_date
        type: string
        mapping: $.createdDate
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/astrazeneca
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: pipeline-runs
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.1&$top=1
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-latest-run
        method: GET
Open in Framework → View in Fleet → terraform-infrastructure-plan-check.yml

When a data query is raised in Oracle Clinical, creates a Jira ticket for the clinical data manager, attaches the query details, and sends a Slack notification to the data management channel.

naftiko: '0.5'
info:
  label: Clinical Data Query Resolution
  description: When a data query is raised in Oracle Clinical, creates a Jira ticket for the clinical data manager, attaches the query details, and sends a Slack notification to the data management channel.
  tags:
  - clinical-trials
  - data-management
  - oracle
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-queries
    port: 8080
    tools:
    - name: escalate-data-query
      description: Escalate an Oracle Clinical data query to Jira for resolution tracking and notify the data management team via Slack.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The Oracle Clinical data query identifier.
      - name: study_id
        in: body
        type: string
        description: The study protocol number.
      - name: site_number
        in: body
        type: string
        description: The investigator site number.
      steps:
      - name: get-query-details
        type: call
        call: oracle-clinical.get-data-query
        with:
          query_id: '{{query_id}}'
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: CDM
          summary: Data Query {{query_id}} - Site {{site_number}} - {{get-query-details.field_name}}
          issue_type: Task
          description: 'Query raised on {{get-query-details.field_name}} for subject {{get-query-details.subject_id}} at site {{site_number}}. Details: {{get-query-details.query_text}}'
      - name: notify-data-managers
        type: call
        call: slack.post-message
        with:
          channel: clinical-data-mgmt
          text: 'Data query escalated for study {{study_id}}, site {{site_number}}: {{get-query-details.query_text}}. Jira: {{create-jira-ticket.key}}'
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://astrazeneca-clinical.oracle.com/ocs/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_clinical_token
    resources:
    - name: data-queries
      path: /queries/{{query_id}}
      inputParameters:
      - name: query_id
        in: path
      operations:
      - name: get-data-query
        method: GET
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → clinical-data-query-resolution.yml

Monitors regulatory intelligence feeds for new guidance documents from FDA, EMA, and other health authorities, stores findings in Snowflake, creates review tasks in Jira, and notifies the regulatory intelligence team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Intelligence Monitor
  description: Monitors regulatory intelligence feeds for new guidance documents from FDA, EMA, and other health authorities, stores findings in Snowflake, creates review tasks in Jira, and notifies the regulatory intelligence team via Microsoft Teams.
  tags:
  - regulatory
  - intelligence
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: reg-intelligence
    port: 8080
    tools:
    - name: process-reg-update
      description: 'Process a new regulatory intelligence update: store in warehouse, create review task, and notify the team.'
      inputParameters:
      - name: authority
        in: body
        type: string
        description: The health authority (e.g., FDA, EMA, MHRA).
      - name: document_title
        in: body
        type: string
        description: Title of the new guidance or regulation.
      - name: document_url
        in: body
        type: string
        description: URL to the published document.
      - name: therapeutic_area
        in: body
        type: string
        description: Relevant therapeutic area.
      steps:
      - name: store-intelligence
        type: call
        call: snowflake.insert-record
        with:
          database: REGULATORY
          schema: INTELLIGENCE
          table: GUIDANCE_UPDATES
          data:
            authority: '{{authority}}'
            title: '{{document_title}}'
            url: '{{document_url}}'
            therapeutic_area: '{{therapeutic_area}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: REGINTEL
          summary: 'Review: {{authority}} - {{document_title}}'
          issue_type: Task
          description: 'New guidance from {{authority}}: {{document_title}}. Link: {{document_url}}. Therapeutic area: {{therapeutic_area}}.'
      - name: notify-reg-intel
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_intelligence
          text: 'New regulatory update from {{authority}}: {{document_title}}. TA: {{therapeutic_area}}. Review task: {{create-review-task.key}}. Document: {{document_url}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-intelligence-monitor.yml

When a regulatory submission is finalized in Veeva Vault, uploads the eCTD package to the health authority gateway, logs the submission in ServiceNow, and notifies the regulatory affairs team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Submission Pipeline
  description: When a regulatory submission is finalized in Veeva Vault, uploads the eCTD package to the health authority gateway, logs the submission in ServiceNow, and notifies the regulatory affairs team via Microsoft Teams.
  tags:
  - regulatory
  - submissions
  - veeva
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: submit-ectd-package
      description: Given a Veeva Vault document ID, orchestrate eCTD submission to the health authority gateway with audit trail and team notification.
      inputParameters:
      - name: vault_document_id
        in: body
        type: string
        description: The Veeva Vault document ID for the finalized eCTD package.
      - name: health_authority
        in: body
        type: string
        description: Target health authority (e.g., FDA, EMA, PMDA).
      - name: submission_type
        in: body
        type: string
        description: The type of submission (e.g., NDA, BLA, MAA, supplement).
      steps:
      - name: get-document
        type: call
        call: veeva.get-document
        with:
          document_id: '{{vault_document_id}}'
      - name: upload-to-gateway
        type: call
        call: ectd-gateway.submit-package
        with:
          package_url: '{{get-document.download_url}}'
          authority: '{{health_authority}}'
          submission_type: '{{submission_type}}'
      - name: log-submission
        type: call
        call: servicenow.create-record
        with:
          table: u_regulatory_submissions
          short_description: '{{submission_type}} submitted to {{health_authority}}'
          document_id: '{{vault_document_id}}'
          gateway_tracking_id: '{{upload-to-gateway.tracking_id}}'
      - name: notify-reg-team
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_affairs
          text: 'Submission complete: {{submission_type}} to {{health_authority}}. Gateway tracking: {{upload-to-gateway.tracking_id}}. ServiceNow: {{log-submission.sys_id}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://astrazeneca.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: ectd-gateway
    baseUri: https://gateway.astrazeneca.com/regulatory/api/v1
    authentication:
      type: bearer
      token: $secrets.ectd_gateway_token
    resources:
    - name: submissions
      path: /submissions
      operations:
      - name: submit-package
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-pipeline.yml

Executes a Splunk search query for security events, returning event count, top source IPs, and severity distribution for the cybersecurity operations team.

naftiko: '0.5'
info:
  label: Splunk Security Event Query
  description: Executes a Splunk search query for security events, returning event count, top source IPs, and severity distribution for the cybersecurity operations team.
  tags:
  - security
  - monitoring
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: security-monitoring
    port: 8080
    tools:
    - name: search-security-events
      description: Execute a Splunk search for security events, log the search in ServiceNow for SOC tracking, and alert the cybersecurity team via Slack.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The Splunk SPL search query.
      - name: time_range
        in: body
        type: string
        description: Time range (e.g., -24h, -7d).
      - name: analyst_name
        in: body
        type: string
        description: Name of the SOC analyst running the search.
      steps:
      - name: execute-search
        type: call
        call: splunk.create-search
        with:
          search: '{{search_query}}'
          earliest_time: '{{time_range}}'
      - name: log-search
        type: call
        call: servicenow.create-record
        with:
          table: u_soc_search_log
          analyst: '{{analyst_name}}'
          search_id: '{{execute-search.sid}}'
          query: '{{search_query}}'
          time_range: '{{time_range}}'
      - name: alert-soc
        type: call
        call: slack.post-message
        with:
          channel: cybersecurity-ops
          text: 'Security search initiated by {{analyst_name}}. Splunk SID: {{execute-search.sid}}. Time range: {{time_range}}. Audit: {{log-search.sys_id}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.astrazeneca.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
Open in Framework → View in Fleet → splunk-security-event-query.yml

Retrieves a clinical document from Box by file ID, returning file name, size, shared link, last modified date, and parent folder path.

naftiko: '0.5'
info:
  label: Box Clinical Document Retrieval
  description: Retrieves a clinical document from Box by file ID, returning file name, size, shared link, last modified date, and parent folder path.
  tags:
  - document-management
  - clinical-trials
  - box
capability:
  exposes:
  - type: mcp
    namespace: clinical-docs-box
    port: 8080
    tools:
    - name: get-box-file
      description: Look up a Box file by ID. Returns file name, size, shared link, modified date, and folder path.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Box file ID.
      call: box.get-file
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: size
        type: string
        mapping: $.size
      - name: shared_link
        type: string
        mapping: $.shared_link.url
      - name: modified_at
        type: string
        mapping: $.modified_at
      - name: folder_path
        type: string
        mapping: $.path_collection.entries
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → box-clinical-document-retrieval.yml

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

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Pipeline
  description: Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.
  tags:
  - procurement
  - servicenow
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: vendor_risk_assessment_pipeline
      description: Orchestrate vendor risk assessment pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Vendor Risk Assessment Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.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://astrazeneca.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-pipeline.yml

Searches Confluence for a knowledge base article by title or keyword, returning the page title, space, last modified date, and content excerpt for R&D knowledge sharing.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Article Retrieval
  description: Searches Confluence for a knowledge base article by title or keyword, returning the page title, space, last modified date, and content excerpt for R&D knowledge sharing.
  tags:
  - knowledge-management
  - research
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: search-articles
      description: Search AstraZeneca Confluence for knowledge base articles by keyword. Returns matching page titles, spaces, and excerpts.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search keyword or phrase.
      call: confluence.search-content
      with:
        cql: type=page AND text~"{{search_query}}"
      outputParameters:
      - name: results
        type: string
        mapping: $.results
      - name: total_size
        type: string
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://astrazeneca.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /content/search?cql={{cql}}
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-base-article-retrieval.yml

Analyzes recruitment metrics, optimizes site selection, adjusts outreach, and reports to study teams.

naftiko: '0.5'
info:
  label: Patient Recruitment Optimization Pipeline
  description: Analyzes recruitment metrics, optimizes site selection, adjusts outreach, and reports to study teams.
  tags:
  - clinical
  - snowflake
  - salesforce
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: astrazeneca_patient_recruitment_optimiza
      description: Orchestrate patient recruitment optimization 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-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Patient Recruitment Optimization Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.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://astrazeneca.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
Open in Framework → View in Fleet → patient-recruitment-optimization-pipeline.yml

Checks for potential drug-drug interactions by querying an internal drug interaction database, cross-references with the safety database for related adverse events, and alerts the pharmacovigilance team via Microsoft Teams if high-risk interactions are found.

naftiko: '0.5'
info:
  label: Drug Interaction Check Pipeline
  description: Checks for potential drug-drug interactions by querying an internal drug interaction database, cross-references with the safety database for related adverse events, and alerts the pharmacovigilance team via Microsoft Teams if high-risk interactions are found.
  tags:
  - pharmacovigilance
  - drug-safety
  - drug-interactions
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: drug-interaction-check
    port: 8080
    tools:
    - name: check-interactions
      description: Check drug-drug interactions, cross-reference with safety data, and alert PV team on high-risk findings.
      inputParameters:
      - name: drug_a
        in: body
        type: string
        description: First drug name or active ingredient.
      - name: drug_b
        in: body
        type: string
        description: Second drug name or active ingredient.
      steps:
      - name: query-interactions
        type: call
        call: ddi-db.check-interaction
        with:
          drug1: '{{drug_a}}'
          drug2: '{{drug_b}}'
      - name: get-safety-cases
        type: call
        call: safety-db.search-cases
        with:
          drugs: '{{drug_a}},{{drug_b}}'
          interaction_flag: 'true'
      - name: alert-pv-team
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacovigilance
          text: 'Drug interaction check: {{drug_a}} + {{drug_b}}. Severity: {{query-interactions.severity}}. Mechanism: {{query-interactions.mechanism}}. Related safety cases: {{get-safety-cases.case_count}}.'
  consumes:
  - type: http
    namespace: ddi-db
    baseUri: https://ddi.astrazeneca.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ddi_db_token
    resources:
    - name: interactions
      path: /interactions/check
      operations:
      - name: check-interaction
        method: POST
  - type: http
    namespace: safety-db
    baseUri: https://astrazeneca-safety.oracle.com/argus/api/v1
    authentication:
      type: bearer
      token: $secrets.argus_token
    resources:
    - name: cases-search
      path: /cases/search
      operations:
      - name: search-cases
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → drug-interaction-check-pipeline.yml

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

naftiko: '0.5'
info:
  label: API Deprecation Notice Pipeline
  description: Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.
  tags:
  - engineering
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: api_deprecation_notice_pipeline
      description: Orchestrate api deprecation notice pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: API Deprecation Notice Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → api-deprecation-notice-pipeline.yml

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-okta
        type: call
        call: okta.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-okta.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: okta
    baseUri: https://astrazeneca.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://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → access-review-certification-pipeline.yml

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://astrazeneca.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://astrazeneca.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: salesforce-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → customer-360-data-sync-pipeline.yml

Orchestrates clinical site activation by verifying site readiness in Oracle Clinical, creating a SharePoint site binder, provisioning site access in Azure Active Directory, and notifying the clinical operations team.

naftiko: '0.5'
info:
  label: Clinical Site Activation Orchestrator
  description: Orchestrates clinical site activation by verifying site readiness in Oracle Clinical, creating a SharePoint site binder, provisioning site access in Azure Active Directory, and notifying the clinical operations team.
  tags:
  - clinical-trials
  - site-management
  - oracle
  - sharepoint
  - azure-active-directory
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-site-activation
    port: 8080
    tools:
    - name: activate-site
      description: 'Orchestrate site activation: verify readiness, create document binder, provision access, and notify operations.'
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The clinical site identifier.
      - name: study_id
        in: body
        type: string
        description: The study protocol number.
      - name: principal_investigator
        in: body
        type: string
        description: Name of the principal investigator.
      steps:
      - name: check-readiness
        type: call
        call: oracle-clinical.get-site-status
        with:
          site_id: '{{site_id}}'
          study_id: '{{study_id}}'
      - name: create-site-binder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: clinical_site_binders
          folder_path: '{{study_id}}/Site_{{site_id}}_{{principal_investigator}}'
      - name: provision-site-access
        type: call
        call: azure-ad.create-group
        with:
          display_name: CLIN-{{study_id}}-SITE-{{site_id}}
          description: Access group for site {{site_id}} on study {{study_id}}
      - name: notify-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical_operations
          text: 'Site {{site_id}} activated for study {{study_id}} (PI: {{principal_investigator}}). Readiness: {{check-readiness.status}}. Binder: {{create-site-binder.url}}. AD Group: {{provision-site-access.group_id}}'
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://astrazeneca-clinical.oracle.com/ocs/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_clinical_token
    resources:
    - name: sites
      path: /studies/{{study_id}}/sites/{{site_id}}
      inputParameters:
      - name: study_id
        in: path
      - name: site_id
        in: path
      operations:
      - name: get-site-status
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: groups
      path: /groups
      operations:
      - name: create-group
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-site-activation-orchestrator.yml

Retrieves a document from knowledge management. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca Document Retrieval
  description: Retrieves a document from knowledge management. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: confluence
    port: 8080
    tools:
    - name: get-document_retrieval
      description: Retrieves a document from knowledge management. Used by AstraZeneca teams.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The document_id to look up.
      call: confluence.get-document_id
      with:
        document_id: '{{document_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://astrazeneca.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: astrazeneca_document_retrieval
        method: GET
Open in Framework → View in Fleet → astrazeneca-document-retrieval.yml

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

naftiko: '0.5'
info:
  label: Data Quality Monitoring Pipeline
  description: Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.
  tags:
  - data-quality
  - snowflake
  - jira
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: data_quality_monitoring_pipeline
      description: Orchestrate data quality monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-grafana
        type: call
        call: grafana.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Data Quality Monitoring Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.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://astrazeneca.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://astrazeneca-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
Open in Framework → View in Fleet → data-quality-monitoring-pipeline.yml

Retrieves sprint details from a Jira board, returning sprint name, committed story points, completed story points, and velocity for engineering project management.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Report
  description: Retrieves sprint details from a Jira board, returning sprint name, committed story points, completed story points, and velocity for engineering project management.
  tags:
  - engineering
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: eng-project-mgmt
    port: 8080
    tools:
    - name: get-sprint-velocity
      description: Look up sprint velocity for a Jira board. Returns sprint name, committed points, completed points, and velocity percentage.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID.
      - name: sprint_id
        in: body
        type: string
        description: The sprint ID.
      call: jira.get-sprint
      with:
        board_id: '{{board_id}}'
        sprint_id: '{{sprint_id}}'
      outputParameters:
      - name: sprint_name
        type: string
        mapping: $.sprint.name
      - name: start_date
        type: string
        mapping: $.sprint.startDate
      - name: end_date
        type: string
        mapping: $.sprint.endDate
      - name: state
        type: string
        mapping: $.sprint.state
  consumes:
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.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/{{sprint_id}}
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint
        method: GET
Open in Framework → View in Fleet → jira-sprint-velocity-report.yml

Ingests biomarker assay results from a lab information system, validates against expected ranges, stores in the Snowflake biomarker warehouse, logs anomalies in Jira, and notifies the translational science team via Slack.

naftiko: '0.5'
info:
  label: Biomarker Data Ingestion Pipeline
  description: Ingests biomarker assay results from a lab information system, validates against expected ranges, stores in the Snowflake biomarker warehouse, logs anomalies in Jira, and notifies the translational science team via Slack.
  tags:
  - research
  - biomarkers
  - translational-science
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: biomarker-ingestion
    port: 8080
    tools:
    - name: ingest-biomarker-data
      description: Ingest and validate biomarker assay results, store in warehouse, and flag anomalies.
      inputParameters:
      - name: assay_run_id
        in: body
        type: string
        description: The lab assay run identifier.
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: biomarker_panel
        in: body
        type: string
        description: The biomarker panel name.
      steps:
      - name: get-assay-results
        type: call
        call: lims.get-assay-run
        with:
          run_id: '{{assay_run_id}}'
      - name: store-results
        type: call
        call: snowflake.insert-record
        with:
          database: BIOMARKERS
          schema: ASSAY_DATA
          table: RESULTS
          data:
            assay_run_id: '{{assay_run_id}}'
            study_id: '{{study_id}}'
            panel: '{{biomarker_panel}}'
            sample_count: '{{get-assay-results.sample_count}}'
            pass_rate: '{{get-assay-results.pass_rate}}'
      - name: flag-anomalies
        type: call
        call: jira.create-issue
        with:
          project_key: BIOM
          summary: 'Biomarker QC Review: {{biomarker_panel}} run {{assay_run_id}} ({{get-assay-results.pass_rate}}% pass rate)'
          issue_type: Task
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: translational-science
          text: 'Biomarker data ingested: {{biomarker_panel}} for study {{study_id}}. Run {{assay_run_id}}: {{get-assay-results.sample_count}} samples, {{get-assay-results.pass_rate}}% pass rate. Review: {{flag-anomalies.key}}'
  consumes:
  - type: http
    namespace: lims
    baseUri: https://lims.astrazeneca.com/api/v2
    authentication:
      type: bearer
      token: $secrets.lims_token
    resources:
    - name: assay-runs
      path: /assay-runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-assay-run
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → biomarker-data-ingestion-pipeline.yml

Retrieves code repository information. Used by AstraZeneca teams.

naftiko: '0.5'
info:
  label: AstraZeneca Repository Info Lookup
  description: Retrieves code repository information. Used by AstraZeneca teams.
  tags:
  - pharmaceutical
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: pagerduty
    port: 8080
    tools:
    - name: get-repository_info_lookup
      description: Retrieves code repository information. Used by AstraZeneca teams.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repo_name to look up.
      call: pagerduty.get-repo_name
      with:
        repo_name: '{{repo_name}}'
  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: astrazeneca_repository_info_lo
        method: GET
Open in Framework → View in Fleet → astrazeneca-repository-info-lookup.yml

Sets up patient randomization for a clinical trial by configuring the randomization schema in Oracle Clinical, creating stratification rules, provisioning an emergency unblinding endpoint, and documenting the setup in Confluence.

naftiko: '0.5'
info:
  label: Clinical Trial Randomization Setup
  description: Sets up patient randomization for a clinical trial by configuring the randomization schema in Oracle Clinical, creating stratification rules, provisioning an emergency unblinding endpoint, and documenting the setup in Confluence.
  tags:
  - clinical-trials
  - randomization
  - oracle
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: trial-randomization
    port: 8080
    tools:
    - name: setup-randomization
      description: Configure clinical trial randomization schema with stratification rules and emergency unblinding, then document in Confluence.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The study protocol number.
      - name: randomization_ratio
        in: body
        type: string
        description: Treatment arm ratio (e.g., 1:1, 2:1).
      - name: stratification_factors
        in: body
        type: string
        description: Comma-separated stratification factors.
      - name: block_size
        in: body
        type: string
        description: Randomization block size.
      steps:
      - name: create-schema
        type: call
        call: oracle-clinical.create-randomization
        with:
          study_id: '{{study_id}}'
          ratio: '{{randomization_ratio}}'
          strat_factors: '{{stratification_factors}}'
          block_size: '{{block_size}}'
      - name: provision-unblinding
        type: call
        call: oracle-clinical.create-unblinding-endpoint
        with:
          study_id: '{{study_id}}'
          schema_id: '{{create-schema.schema_id}}'
      - name: document-setup
        type: call
        call: confluence.create-page
        with:
          space_key: CLIN
          title: Randomization Setup - {{study_id}}
          body: 'Study: {{study_id}}

            Ratio: {{randomization_ratio}}

            Stratification: {{stratification_factors}}

            Block Size: {{block_size}}

            Schema ID: {{create-schema.schema_id}}

            Unblinding Endpoint: {{provision-unblinding.endpoint_url}}'
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://astrazeneca-clinical.oracle.com/ocs/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_clinical_token
    resources:
    - name: randomization
      path: /studies/{{study_id}}/randomization
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: create-randomization
        method: POST
    - name: unblinding
      path: /studies/{{study_id}}/unblinding
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: create-unblinding-endpoint
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://astrazeneca.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → clinical-trial-randomization-setup.yml

When a label update is approved, retrieves the updated labeling document from Veeva Vault, submits the supplement to the regulatory gateway, updates the product master in SAP, and notifies the regulatory and commercial teams via Slack.

naftiko: '0.5'
info:
  label: Drug Label Update Orchestrator
  description: When a label update is approved, retrieves the updated labeling document from Veeva Vault, submits the supplement to the regulatory gateway, updates the product master in SAP, and notifies the regulatory and commercial teams via Slack.
  tags:
  - regulatory
  - labeling
  - veeva
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: label-updates
    port: 8080
    tools:
    - name: process-label-update
      description: 'Orchestrate a drug label update: retrieve approved label, submit regulatory supplement, update SAP product master, and notify teams.'
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault document ID for the approved label.
      - name: product_code
        in: body
        type: string
        description: The SAP material number for the drug product.
      - name: market
        in: body
        type: string
        description: The target market (e.g., US, EU, JP).
      steps:
      - name: get-label-doc
        type: call
        call: veeva.get-document
        with:
          document_id: '{{document_id}}'
      - name: submit-supplement
        type: call
        call: ectd-gateway.submit-package
        with:
          package_url: '{{get-label-doc.download_url}}'
          authority: '{{market}}'
          submission_type: labeling-supplement
      - name: update-product-master
        type: call
        call: sap.update-material
        with:
          material_number: '{{product_code}}'
          label_version: '{{get-label-doc.version}}'
          label_effective_date: '{{get-label-doc.effective_date}}'
      - name: notify-teams
        type: call
        call: slack.post-message
        with:
          channel: regulatory-commercial
          text: 'Label update processed for {{product_code}} in {{market}}. Document: {{document_id}} v{{get-label-doc.version}}. Gateway tracking: {{submit-supplement.tracking_id}}. SAP updated.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://astrazeneca.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: ectd-gateway
    baseUri: https://gateway.astrazeneca.com/regulatory/api/v1
    authentication:
      type: bearer
      token: $secrets.ectd_gateway_token
    resources:
    - name: submissions
      path: /submissions
      operations:
      - name: submit-package
        method: POST
  - type: http
    namespace: sap
    baseUri: https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Product('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: update-material
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → drug-label-update-orchestrator.yml

Checks the status of a deployment on Azure Kubernetes Service, returning replica count, available replicas, pod health, and image version for DevOps teams.

naftiko: '0.5'
info:
  label: Azure Kubernetes Deployment Status
  description: Checks the status of a deployment on Azure Kubernetes Service, returning replica count, available replicas, pod health, and image version for DevOps teams.
  tags:
  - devops
  - infrastructure
  - azure-kubernetes-service
capability:
  exposes:
  - type: mcp
    namespace: k8s-deployments
    port: 8080
    tools:
    - name: get-deployment-status
      description: Check an AKS deployment status, log health metrics in Datadog, and notify the platform engineering team via Slack if replicas are degraded.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: The AKS cluster name.
      - name: namespace
        in: body
        type: string
        description: The Kubernetes namespace.
      - name: deployment_name
        in: body
        type: string
        description: The deployment name.
      steps:
      - name: fetch-deployment
        type: call
        call: aks.get-deployment
        with:
          cluster_name: '{{cluster_name}}'
          namespace: '{{namespace}}'
          deployment_name: '{{deployment_name}}'
      - name: log-health
        type: call
        call: datadog.post-event
        with:
          title: 'AKS Deployment Check: {{deployment_name}}'
          text: 'Cluster: {{cluster_name}}, Namespace: {{namespace}}. Replicas: {{fetch-deployment.status.availableReplicas}}/{{fetch-deployment.spec.replicas}}. Image: {{fetch-deployment.spec.template.spec.containers[0].image}}'
          tags: cluster:{{cluster_name}},namespace:{{namespace}}
      - name: notify-platform-eng
        type: call
        call: slack.post-message
        with:
          channel: platform-engineering
          text: 'Deployment {{deployment_name}} on {{cluster_name}}/{{namespace}}: {{fetch-deployment.status.availableReplicas}}/{{fetch-deployment.spec.replicas}} replicas. Image: {{fetch-deployment.spec.template.spec.containers[0].image}}'
  consumes:
  - type: http
    namespace: aks
    baseUri: https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/rg-astrazeneca-aks/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: deployments
      path: /apis/apps/v1/namespaces/{{namespace}}/deployments/{{deployment_name}}
      inputParameters:
      - name: namespace
        in: path
      - name: deployment_name
        in: path
      operations:
      - name: get-deployment
        method: GET
Open in Framework → View in Fleet → azure-kubernetes-deployment-status.yml

Queries IoT temperature sensor data for a drug shipment, checks for excursions against product thresholds, logs deviations in ServiceNow, and alerts the supply chain quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Cold Chain Temperature Monitoring
  description: Queries IoT temperature sensor data for a drug shipment, checks for excursions against product thresholds, logs deviations in ServiceNow, and alerts the supply chain quality team via Microsoft Teams.
  tags:
  - supply-chain
  - cold-chain
  - quality
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cold-chain-monitoring
    port: 8080
    tools:
    - name: check-temperature-excursion
      description: Check a drug shipment for cold chain temperature excursions and trigger deviation workflow if thresholds exceeded.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The shipment tracking identifier.
      - name: product_sku
        in: body
        type: string
        description: The drug product SKU.
      - name: temp_threshold_high
        in: body
        type: string
        description: Maximum acceptable temperature in Celsius.
      - name: temp_threshold_low
        in: body
        type: string
        description: Minimum acceptable temperature in Celsius.
      steps:
      - name: get-sensor-data
        type: call
        call: iot-platform.get-readings
        with:
          device_group: '{{shipment_id}}'
          metric: temperature
      - name: log-excursion
        type: call
        call: servicenow.create-record
        with:
          table: u_cold_chain_excursions
          shipment_id: '{{shipment_id}}'
          product_sku: '{{product_sku}}'
          max_temp_recorded: '{{get-sensor-data.max_value}}'
          min_temp_recorded: '{{get-sensor-data.min_value}}'
          threshold_high: '{{temp_threshold_high}}'
          threshold_low: '{{temp_threshold_low}}'
      - name: alert-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: supply_chain_quality
          text: 'Cold chain alert for shipment {{shipment_id}} ({{product_sku}}). Temp range: {{get-sensor-data.min_value}}C - {{get-sensor-data.max_value}}C. Thresholds: {{temp_threshold_low}}C - {{temp_threshold_high}}C. Incident: {{log-excursion.sys_id}}'
  consumes:
  - type: http
    namespace: iot-platform
    baseUri: https://astrazeneca-iot.azure-devices.net/api/v1
    authentication:
      type: bearer
      token: $secrets.iot_platform_token
    resources:
    - name: readings
      path: /device-groups/{{device_group}}/readings?metric={{metric}}
      inputParameters:
      - name: device_group
        in: path
      - name: metric
        in: query
      operations:
      - name: get-readings
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cold-chain-temperature-monitoring.yml

Executes a SQL query against the Snowflake clinical analytics warehouse and returns results for use in reporting and data science workflows.

naftiko: '0.5'
info:
  label: Snowflake Clinical Analytics Query
  description: Executes a SQL query against the Snowflake clinical analytics warehouse and returns results for use in reporting and data science workflows.
  tags:
  - analytics
  - data-warehouse
  - snowflake
  - clinical-trials
capability:
  exposes:
  - type: mcp
    namespace: clinical-analytics
    port: 8080
    tools:
    - name: run-analytics-query
      description: Execute a SQL query against the Snowflake clinical data warehouse, log the query execution in ServiceNow for audit, and post results summary to the analytics Slack channel.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: The SQL statement to execute.
      - name: warehouse
        in: body
        type: string
        description: The Snowflake warehouse to use (e.g., CLINICAL_WH).
      - name: database
        in: body
        type: string
        description: The target Snowflake database.
      - name: requester
        in: body
        type: string
        description: Name of the analyst running the query.
      steps:
      - name: execute-query
        type: call
        call: snowflake.execute-statement
        with:
          statement: '{{sql_statement}}'
          warehouse: '{{warehouse}}'
          database: '{{database}}'
      - name: log-query
        type: call
        call: servicenow.create-record
        with:
          table: u_data_query_audit
          database: '{{database}}'
          warehouse: '{{warehouse}}'
          requester: '{{requester}}'
          row_count: '{{execute-query.resultSetMetaData.numRows}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: clinical-analytics
          text: 'Query executed by {{requester}} on {{database}}: {{execute-query.resultSetMetaData.numRows}} rows returned. Audit: {{log-query.sys_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-analytics-query.yml

Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.

naftiko: '0.5'
info:
  label: Knowledge Base Freshness Pipeline
  description: Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.
  tags:
  - knowledge
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: knowledge_base_freshness_pipeline
      description: Orchestrate knowledge base freshness pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-confluence
        type: call
        call: confluence.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-confluence.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Knowledge Base Freshness Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://astrazeneca.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://astrazeneca.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → knowledge-base-freshness-pipeline.yml

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-workday
        type: call
        call: workday.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-workday.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: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://astrazeneca.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → performance-review-cycle-pipeline.yml

On batch testing completion, retrieves QC results from SAP QM, generates a certificate of analysis in Veeva Vault, updates inventory status in SAP, and notifies the supply chain team via Slack.

naftiko: '0.5'
info:
  label: Drug Product Batch Release Orchestrator
  description: On batch testing completion, retrieves QC results from SAP QM, generates a certificate of analysis in Veeva Vault, updates inventory status in SAP, and notifies the supply chain team via Slack.
  tags:
  - manufacturing
  - quality
  - batch-release
  - sap
  - veeva
  - slack
capability:
  exposes:
  - type: mcp
    namespace: batch-release
    port: 8080
    tools:
    - name: release-batch
      description: 'Orchestrate batch release: pull QC results, generate CoA, update inventory, and notify supply chain.'
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The manufacturing batch number.
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the drug product.
      - name: plant_code
        in: body
        type: string
        description: The SAP manufacturing plant code.
      steps:
      - name: get-qc-results
        type: call
        call: sap-qm.get-inspection-results
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
          plant: '{{plant_code}}'
      - name: create-coa
        type: call
        call: veeva.create-document
        with:
          name: CoA_{{batch_number}}_{{material_number}}
          type: Certificate of Analysis
          lifecycle: General Lifecycle
          properties:
            batch_number: '{{batch_number}}'
            test_results: '{{get-qc-results.summary}}'
            release_date: '{{get-qc-results.completion_date}}'
      - name: update-inventory
        type: call
        call: sap.update-batch-status
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
          plant: '{{plant_code}}'
          status: released
      - name: notify-supply-chain
        type: call
        call: slack.post-message
        with:
          channel: supply-chain-ops
          text: 'Batch {{batch_number}} ({{material_number}}) released at plant {{plant_code}}. CoA: {{create-coa.document_id}}. QC status: {{get-qc-results.overall_status}}.'
  consumes:
  - type: http
    namespace: sap-qm
    baseUri: https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspection-results
      path: /InspectionResultsSet(Batch='{{batch}}',Material='{{material}}',Plant='{{plant}}')
      inputParameters:
      - name: batch
        in: path
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-inspection-results
        method: GET
  - type: http
    namespace: veeva
    baseUri: https://astrazeneca.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: sap
    baseUri: https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /Batch(Batch='{{batch}}',Material='{{material}}',Plant='{{plant}}')
      inputParameters:
      - name: batch
        in: path
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: update-batch-status
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → drug-product-batch-release-orchestrator.yml

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

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

Generates an Individual Case Safety Report (ICSR) by pulling adverse event data from the safety database, formatting it as an E2B R3 XML, uploading to the health authority gateway, and logging completion in ServiceNow.

naftiko: '0.5'
info:
  label: Clinical Safety Report Generation
  description: Generates an Individual Case Safety Report (ICSR) by pulling adverse event data from the safety database, formatting it as an E2B R3 XML, uploading to the health authority gateway, and logging completion in ServiceNow.
  tags:
  - pharmacovigilance
  - drug-safety
  - regulatory
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pv-reporting
    port: 8080
    tools:
    - name: generate-icsr
      description: Generate and submit an ICSR (E2B R3) to the health authority gateway with audit logging.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: The safety database case number.
      - name: target_authority
        in: body
        type: string
        description: Target health authority (e.g., FDA, EMA).
      steps:
      - name: get-case-data
        type: call
        call: safety-db.get-case
        with:
          case_number: '{{case_number}}'
      - name: generate-e2b
        type: call
        call: safety-db.export-e2b
        with:
          case_number: '{{case_number}}'
          format: E2B_R3
      - name: submit-to-gateway
        type: call
        call: ectd-gateway.submit-icsr
        with:
          e2b_xml_url: '{{generate-e2b.download_url}}'
          authority: '{{target_authority}}'
      - name: log-submission
        type: call
        call: servicenow.create-record
        with:
          table: u_icsr_submissions
          case_number: '{{case_number}}'
          authority: '{{target_authority}}'
          gateway_ack: '{{submit-to-gateway.acknowledgment_id}}'
          status: submitted
  consumes:
  - type: http
    namespace: safety-db
    baseUri: https://astrazeneca-safety.oracle.com/argus/api/v1
    authentication:
      type: bearer
      token: $secrets.argus_token
    resources:
    - name: cases
      path: /cases/{{case_number}}
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: get-case
        method: GET
    - name: exports
      path: /cases/{{case_number}}/export
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: export-e2b
        method: POST
  - type: http
    namespace: ectd-gateway
    baseUri: https://gateway.astrazeneca.com/regulatory/api/v1
    authentication:
      type: bearer
      token: $secrets.ectd_gateway_token
    resources:
    - name: icsr-submissions
      path: /icsr
      operations:
      - name: submit-icsr
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → clinical-safety-report-generation.yml

Queries SAP S/4HANA for a drug product shipment by delivery number, returning origin warehouse, destination site, shipment status, and estimated arrival.

naftiko: '0.5'
info:
  label: Drug Supply Chain Shipment Tracker
  description: Queries SAP S/4HANA for a drug product shipment by delivery number, returning origin warehouse, destination site, shipment status, and estimated arrival.
  tags:
  - supply-chain
  - logistics
  - sap
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-tracking
    port: 8080
    tools:
    - name: get-shipment-status
      description: Look up a drug product shipment by SAP delivery number, log the tracking event in Snowflake, and notify the logistics team via Microsoft Teams.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP outbound delivery number.
      - name: requester_email
        in: body
        type: string
        description: Email of the person requesting the shipment status.
      steps:
      - name: fetch-delivery
        type: call
        call: sap.get-delivery
        with:
          delivery_number: '{{delivery_number}}'
      - name: log-tracking
        type: call
        call: snowflake.insert-record
        with:
          database: SUPPLY_CHAIN
          schema: LOGISTICS
          table: SHIPMENT_TRACKING
          data:
            delivery_number: '{{delivery_number}}'
            status: '{{fetch-delivery.OverallGoodsMovementStatus}}'
            destination: '{{fetch-delivery.ShipToParty.Name}}'
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{requester_email}}'
          text: 'Shipment {{delivery_number}} status: {{fetch-delivery.OverallGoodsMovementStatus}}. Destination: {{fetch-delivery.ShipToParty.Name}}. ETA: {{fetch-delivery.PlannedGoodsIssueDate}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://astrazeneca-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '200'
    resources:
    - name: deliveries
      path: /A_OutbDeliveryHeader('{{delivery_number}}')
      inputParameters:
      - name: delivery_number
        in: path
      operations:
      - name: get-delivery
        method: GET
Open in Framework → View in Fleet → drug-supply-chain-shipment-tracker.yml

Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.

naftiko: '0.5'
info:
  label: Training Compliance Tracker Pipeline
  description: Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.
  tags:
  - compliance
  - workday
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: training_compliance_tracker_pipeline
      description: Orchestrate training compliance tracker pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-workday
        type: call
        call: workday.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-workday.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: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/astrazeneca
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → training-compliance-tracker-pipeline.yml

Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.

naftiko: '0.5'
info:
  label: Third-Party Integration Health Pipeline
  description: Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.
  tags:
  - integrations
  - datadog
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: integrations
    port: 8080
    tools:
    - name: third_party_integration_health_pipeline
      description: Orchestrate third-party integration health pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-datadog
        type: call
        call: datadog.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Third-Party Integration Health Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
      header: DD-API-KEY
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: datadog-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → third-party-integration-health-pipeline.yml

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://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → cost-center-budget-tracking-pipeline.yml

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://astrazeneca-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://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: powerbi-op
        method: POST
Open in Framework → View in Fleet → capacity-planning-forecast-pipeline.yml

Triggers a genomics data processing pipeline on AWS: uploads raw sequencing data to S3, launches a SageMaker processing job for variant calling, stores results in Snowflake, and notifies the bioinformatics team via Slack.

naftiko: '0.5'
info:
  label: Genomics Data Processing Pipeline
  description: 'Triggers a genomics data processing pipeline on AWS: uploads raw sequencing data to S3, launches a SageMaker processing job for variant calling, stores results in Snowflake, and notifies the bioinformatics team via Slack.'
  tags:
  - research
  - genomics
  - amazon-s3
  - amazon-sagemaker
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: genomics-pipeline
    port: 8080
    tools:
    - name: process-sequencing-data
      description: 'Orchestrate genomics data processing: upload to S3, run variant calling on SageMaker, store results, and notify team.'
      inputParameters:
      - name: sample_id
        in: body
        type: string
        description: The sequencing sample identifier.
      - name: study_id
        in: body
        type: string
        description: The genomics study identifier.
      - name: fastq_path
        in: body
        type: string
        description: Local path to the FASTQ file for upload.
      steps:
      - name: upload-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: az-genomics-raw
          key: '{{study_id}}/{{sample_id}}/raw.fastq.gz'
          source: '{{fastq_path}}'
      - name: launch-processing
        type: call
        call: sagemaker.create-processing-job
        with:
          job_name: variant-calling-{{sample_id}}
          input_s3_uri: s3://az-genomics-raw/{{study_id}}/{{sample_id}}/raw.fastq.gz
          output_s3_uri: s3://az-genomics-results/{{study_id}}/{{sample_id}}/
          processing_image: genomics-variant-caller:latest
      - name: store-metadata
        type: call
        call: snowflake.insert-record
        with:
          database: GENOMICS
          schema: PIPELINE_RUNS
          table: PROCESSING_JOBS
          data:
            sample_id: '{{sample_id}}'
            study_id: '{{study_id}}'
            job_name: '{{launch-processing.job_name}}'
            status: '{{launch-processing.status}}'
      - name: notify-bioinfo
        type: call
        call: slack.post-message
        with:
          channel: bioinformatics
          text: 'Genomics pipeline launched: sample {{sample_id}} (study {{study_id}}). SageMaker job: {{launch-processing.job_name}}. Status: {{launch-processing.status}}'
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_session_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: sagemaker
    baseUri: https://api.sagemaker.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_session_token
    resources:
    - name: processing-jobs
      path: /processing-jobs
      operations:
      - name: create-processing-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://astrazeneca.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → genomics-data-processing-pipeline.yml

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

naftiko: '0.5'
info:
  label: Infrastructure Drift Detection Pipeline
  description: Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.
  tags:
  - devops
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: infrastructure_drift_detection
      description: Orchestrate infrastructure drift detection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-github
        type: call
        call: github.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-github.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Infrastructure Drift Detection Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: github-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://astrazeneca.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → infrastructure-drift-detection-pipeline.yml

Triggers a vendor risk assessment by pulling vendor details from SAP Ariba, running a compliance check via a third-party risk service, logging findings in ServiceNow, and notifying the procurement team via Slack.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Orchestrator
  description: Triggers a vendor risk assessment by pulling vendor details from SAP Ariba, running a compliance check via a third-party risk service, logging findings in ServiceNow, and notifying the procurement team via Slack.
  tags:
  - procurement
  - vendor-management
  - compliance
  - sap-ariba
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: 'Run a vendor risk assessment: pull vendor profile, check compliance, log findings, and notify procurement.'
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP Ariba supplier ID.
      - name: assessment_type
        in: body
        type: string
        description: Assessment type (e.g., gxp-audit, financial-health, cyber-risk).
      steps:
      - name: get-vendor-profile
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{vendor_id}}'
      - name: run-compliance-check
        type: call
        call: risk-service.check-compliance
        with:
          company_name: '{{get-vendor-profile.company_name}}'
          duns_number: '{{get-vendor-profile.duns}}'
          assessment_type: '{{assessment_type}}'
      - name: log-findings
        type: call
        call: servicenow.create-record
        with:
          table: u_vendor_risk_assessments
          vendor_name: '{{get-vendor-profile.company_name}}'
          risk_score: '{{run-compliance-check.risk_score}}'
          risk_level: '{{run-compliance-check.risk_level}}'
          findings: '{{run-compliance-check.findings_summary}}'
      - name: notify-procurement
        type: call
        call: slack.post-message
        with:
          channel: procurement-risk
          text: 'Vendor risk assessment complete: {{get-vendor-profile.company_name}}. Type: {{assessment_type}}. Risk score: {{run-compliance-check.risk_score}} ({{run-compliance-check.risk_level}}). ServiceNow: {{log-findings.sys_id}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1/prod
    authentication:
      type: bearer
      token: $secrets.ariba_token
    inputParameters:
    - name: apiKey
      in: header
      value: $secrets.ariba_api_key
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: risk-service
    baseUri: https://risk-platform.astrazeneca.com/api/v1
    authentication:
      type: bearer
      token: $secrets.risk_platform_token
    resources:
    - name: compliance
      path: /compliance/check
      operations:
      - name: check-compliance
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://astrazeneca.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: table
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-orchestrator.yml

Queries the Databricks model registry for a machine learning model by name, returning latest version, stage, metrics, and deployment status for R&D AI/ML pipelines.

naftiko: '0.5'
info:
  label: Databricks ML Model Registry Lookup
  description: Queries the Databricks model registry for a machine learning model by name, returning latest version, stage, metrics, and deployment status for R&D AI/ML pipelines.
  tags:
  - research
  - machine-learning
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: ml-model-registry
    port: 8080
    tools:
    - name: get-model-info
      description: Look up a registered ML model in Databricks, log the model status in Snowflake for tracking, and notify the data science team via Slack.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The registered model name in Databricks.
      - name: project_code
        in: body
        type: string
        description: The R&D project code associated with this model.
      steps:
      - name: fetch-model
        type: call
        call: databricks.get-model
        with:
          model_name: '{{model_name}}'
      - name: log-model-status
        type: call
        call: snowflake.insert-record
        with:
          database: ML_REGISTRY
          schema: MODEL_TRACKING
          table: MODEL_STATUS_LOG
          data:
            model_name: '{{model_name}}'
            version: '{{fetch-model.latest_versions[0].version}}'
            stage: '{{fetch-model.latest_versions[0].current_stage}}'
            project_code: '{{project_code}}'
      - name: notify-data-science
        type: call
        call: slack.post-message
        with:
          channel: data-science
          text: 'Model {{model_name}} (project {{project_code}}): v{{fetch-model.latest_versions[0].version}}, stage={{fetch-model.latest_versions[0].current_stage}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://astrazeneca.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: models
      path: /mlflow/registered-models/get?name={{model_name}}
      inputParameters:
      - name: model_name
        in: query
      operations:
      - name: get-model
        method: GET
Open in Framework → View in Fleet → databricks-ml-model-registry-lookup.yml

Retrieves a healthcare professional account from Salesforce by account ID, returning name, specialty, institution, territory, and engagement tier.

naftiko: '0.5'
info:
  label: Salesforce HCP Account Lookup
  description: Retrieves a healthcare professional account from Salesforce by account ID, returning name, specialty, institution, territory, and engagement tier.
  tags:
  - commercial
  - hcp-engagement
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: commercial-hcp
    port: 8080
    tools:
    - name: get-hcp-account
      description: Look up a healthcare professional account in Salesforce. Returns name, specialty, affiliated institution, territory, and tier.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the HCP.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: hcp_name
        type: string
        mapping: $.Name
      - name: specialty
        type: string
        mapping: $.Specialty__c
      - name: institution
        type: string
        mapping: $.Institution__c
      - name: territory
        type: string
        mapping: $.Territory__c
      - name: engagement_tier
        type: string
        mapping: $.Engagement_Tier__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://astrazeneca.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-hcp-account-lookup.yml

When a new hospital sales opportunity is identified, creates the opportunity in Salesforce, generates a proposal document in SharePoint, and notifies the regional sales manager.

naftiko: '0.5'
info:
  label: Hospital Sales Opportunity Pipeline
  description: When a new hospital sales opportunity is identified, creates the opportunity in Salesforce, generates a proposal document in SharePoint, and notifies the regional sales manager.
  tags:
  - sales
  - healthcare
  - salesforce
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sales-pipeline
    port: 8080
    tools:
    - name: create-hospital-opportunity
      description: Create a sales opportunity for a hospital account and notify the team.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce hospital account ID.
      - name: product_line
        in: body
        type: string
        description: Product line.
      - name: estimated_value
        in: body
        type: number
        description: Estimated deal value.
      - name: sales_rep_email
        in: body
        type: string
        description: Sales representative email.
      steps:
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          account_id: '{{account_id}}'
          name: '{{product_line}} - Hospital Deal'
          amount: '{{estimated_value}}'
          stage: Prospecting
      - name: create-proposal
        type: call
        call: sharepoint.upload-file
        with:
          site_id: sales_proposals
          folder_path: Proposals/{{create-opportunity.id}}
          file_name: proposal_template.docx
      - name: notify-rep
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{sales_rep_email}}'
          text: 'New opportunity created: {{product_line}} for ${{estimated_value}}. Salesforce ID: {{create-opportunity.id}}. Proposal template: {{create-proposal.url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bd.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chat/messages
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hospital-sales-opportunity-pipeline.yml

Checks the approval status of an expense report in SAP Concur by report ID.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Status
  description: Checks the approval status of an expense report in SAP Concur by report ID.
  tags:
  - medical-devices
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: concur
    port: 8080
    tools:
    - name: get-expense-status
      description: Check expense report status.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Expense report ID.
      call: concur.get-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: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-status.yml

Manages packaging validation by recording test results in Google Sheets, creating validation tasks in Jira, refreshing the Power BI quality dashboard, and notifying packaging engineering via Microsoft Teams.

naftiko: '0.5'
info:
  label: Packaging Validation Pipeline
  description: Manages packaging validation by recording test results in Google Sheets, creating validation tasks in Jira, refreshing the Power BI quality dashboard, and notifying packaging engineering via Microsoft Teams.
  tags:
  - medical-devices
  - google-sheets
  - jira
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pkg-validation
    port: 8080
    tools:
    - name: validate-packaging
      description: Orchestrate packaging validation testing.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: test_type
        in: body
        type: string
        description: Seal strength, burst, or transit.
      - name: result
        in: body
        type: string
        description: Pass or fail.
      steps:
      - name: record-results
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_packaging_validation
          data: '{{product_code}},{{test_type}},{{result}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PKG
          summary: 'Packaging {{test_type}}: {{product_code}} - {{result}}'
          issue_type: Task
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: bd_quality_metrics
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: packaging_engineering
          text: 'Packaging validation {{test_type}} for {{product_code}}: {{result}}. Task: {{create-task.issue_key}}.'
  consumes:
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bd.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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → packaging-validation-pipeline.yml

Retrieves a Grafana dashboard link for real-time manufacturing monitoring.

naftiko: '0.5'
info:
  label: Grafana Manufacturing Dashboard
  description: Retrieves a Grafana dashboard link for real-time manufacturing monitoring.
  tags:
  - monitoring
  - grafana
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: get-dashboard
      description: Retrieve a Grafana dashboard by UID.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: Dashboard UID.
      call: grafana.get-dashboard
      with:
        uid: '{{dashboard_uid}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.dashboard.title
      - name: url
        type: string
        mapping: $.meta.url
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.bd.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dashboard
        method: GET
Open in Framework → View in Fleet → grafana-manufacturing-dashboard.yml

Searches Confluence for medical device procedures and standards.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Search
  description: Searches Confluence for medical device procedures and standards.
  tags:
  - collaboration
  - confluence
  - knowledge-management
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: search-procedures
      description: Search Confluence for procedures and standards.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search query.
      call: confluence.search
      with:
        cql: text ~ "{{query}}" and space in (SOP, QMS)
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: total
        type: number
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bd.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-base-search.yml

Checks employee training compliance by pulling records from Workday, flagging overdue training in Jira, and notifying managers via Microsoft Teams and Microsoft Outlook.

naftiko: '0.5'
info:
  label: Training Compliance Pipeline
  description: Checks employee training compliance by pulling records from Workday, flagging overdue training in Jira, and notifying managers via Microsoft Teams and Microsoft Outlook.
  tags:
  - medical-devices
  - workday
  - jira
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: training-compliance
    port: 8080
    tools:
    - name: check-training-compliance
      description: Orchestrate training compliance check.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name.
      steps:
      - name: get-training-status
        type: call
        call: workday.get-training-records
        with:
          department: '{{department}}'
      - name: create-overdue-tasks
        type: call
        call: jira.create-issue
        with:
          project: TRAIN
          summary: 'Overdue training: {{department}} - {{get-training-status.overdue_count}} employees'
          issue_type: Task
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: training
          text: 'Training compliance: {{department}} - {{get-training-status.overdue_count}} overdue. Task: {{create-overdue-tasks.issue_key}}.'
      - name: email-managers
        type: call
        call: outlook.send-email
        with:
          to: '{{department}}-managers@bd.com'
          subject: 'Training Compliance Alert: {{department}}'
          body: '{{get-training-status.overdue_count}} employees have overdue training. Please ensure completion by end of month.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bd
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /workers/trainingRecords
      operations:
      - name: get-training-records
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → training-compliance-pipeline.yml

Retrieves a Tableau dashboard URL for manufacturing analytics review.

naftiko: '0.5'
info:
  label: Tableau Manufacturing Analytics Dashboard
  description: Retrieves a Tableau dashboard URL for manufacturing analytics review.
  tags:
  - analytics
  - tableau
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: mfg-analytics
    port: 8080
    tools:
    - name: get-dashboard
      description: Retrieve a Tableau dashboard for manufacturing.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: Workbook name.
      call: tableau.get-workbook
      with:
        workbook_name: '{{workbook_name}}'
      outputParameters:
      - name: url
        type: string
        mapping: $.workbook.contentUrl
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.bd.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}
      inputParameters:
      - name: workbook_name
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-manufacturing-analytics-dashboard.yml

Sends an email via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Microsoft Outlook Email Sender
  description: Sends an email via Microsoft Outlook.
  tags:
  - collaboration
  - microsoft-outlook
  - email
capability:
  exposes:
  - type: mcp
    namespace: email
    port: 8080
    tools:
    - name: send-email
      description: Send an email via Outlook.
      inputParameters:
      - name: to
        in: body
        type: string
        description: Recipient.
      - name: subject
        in: body
        type: string
        description: Subject.
      - name: body
        in: body
        type: string
        description: Body.
      call: outlook.send-email
      with:
        to: '{{to}}'
        subject: '{{subject}}'
        body: '{{body}}'
  consumes:
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → microsoft-outlook-email-sender.yml

Manages equipment validation by creating a protocol in Jira, scheduling calibration in SAP, uploading validation documents to SharePoint, and notifying the validation team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Equipment Validation Protocol Pipeline
  description: Manages equipment validation by creating a protocol in Jira, scheduling calibration in SAP, uploading validation documents to SharePoint, and notifying the validation team via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: equip-validation
    port: 8080
    tools:
    - name: validate-equipment
      description: Orchestrate equipment validation protocol execution.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: Equipment ID.
      - name: protocol_type
        in: body
        type: string
        description: Validation protocol type (IQ/OQ/PQ).
      steps:
      - name: create-protocol
        type: call
        call: jira.create-issue
        with:
          project: VAL
          summary: '{{protocol_type}} Validation: {{equipment_id}}'
          issue_type: Task
      - name: schedule-calibration
        type: call
        call: sap.create-maintenance-order
        with:
          equipment_id: '{{equipment_id}}'
          order_type: calibration
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: validation
          text: 'Equipment validation initiated: {{equipment_id}} ({{protocol_type}}). Protocol: {{create-protocol.issue_key}}. Calibration: {{schedule-calibration.order_number}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: maintenance
      path: /API_MAINTORDER_SRV/MaintenanceOrder
      operations:
      - name: create-maintenance-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → equipment-validation-protocol-pipeline.yml

Manages IT system changes for validated computer systems by creating change requests in ServiceNow, approval tasks in Jira, and notifying the IT validation team via Microsoft Teams.

naftiko: '0.5'
info:
  label: IT System Change Control Pipeline
  description: Manages IT system changes for validated computer systems by creating change requests in ServiceNow, approval tasks in Jira, and notifying the IT validation team via Microsoft Teams.
  tags:
  - medical-devices
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-change
    port: 8080
    tools:
    - name: submit-change-request
      description: Orchestrate IT system change control for validated systems.
      inputParameters:
      - name: system_name
        in: body
        type: string
        description: System name.
      - name: change_description
        in: body
        type: string
        description: Change description.
      - name: risk_level
        in: body
        type: string
        description: Risk level.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Change: {{system_name}} - {{change_description}}'
          risk: '{{risk_level}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project: ITVAL
          summary: 'Change approval: {{system_name}}'
          issue_type: Approval
      - name: notify-validation
        type: call
        call: msteams.send-message
        with:
          channel_id: it_validation
          text: 'System change: {{system_name}}. Change: {{create-change.change_number}}. Approval: {{create-approval.issue_key}}. Risk: {{risk_level}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bd.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: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-system-change-control-pipeline.yml

When a supply chain disruption is detected, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and logs the event in Google Sheets.

naftiko: '0.5'
info:
  label: Supply Chain Disruption Alert Pipeline
  description: When a supply chain disruption is detected, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and logs the event in Google Sheets.
  tags:
  - supply-chain
  - medical-devices
  - servicenow
  - microsoft-teams
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-alerts
    port: 8080
    tools:
    - name: handle-disruption
      description: Process a supply chain disruption alert.
      inputParameters:
      - name: supplier_name
        in: body
        type: string
        description: Affected supplier.
      - name: material
        in: body
        type: string
        description: Affected material.
      - name: impact_level
        in: body
        type: string
        description: Impact level.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supply disruption: {{material}} from {{supplier_name}}'
          category: supply_chain
          urgency: '{{impact_level}}'
      - name: log-event
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: bd_supply_chain
          range: Disruptions!A:D
          values:
          - '{{supplier_name}}'
          - '{{material}}'
          - '{{impact_level}}'
          - '{{create-incident.number}}'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supply_chain
          text: 'Supply disruption: {{material}} from {{supplier_name}} ({{impact_level}}). Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bd.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-disruption-alert-pipeline.yml

Triages customer complaints by creating a Salesforce case, routing to the appropriate team in Jira, logging in Google Sheets, and notifying customer service leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Customer Complaint Triage Pipeline
  description: Triages customer complaints by creating a Salesforce case, routing to the appropriate team in Jira, logging in Google Sheets, and notifying customer service leadership via Microsoft Teams.
  tags:
  - medical-devices
  - salesforce
  - jira
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: complaint-triage
    port: 8080
    tools:
    - name: triage-complaint
      description: Orchestrate customer complaint triage.
      inputParameters:
      - name: customer_name
        in: body
        type: string
        description: Customer name.
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: complaint_text
        in: body
        type: string
        description: Complaint description.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'Complaint: {{product_code}} - {{customer_name}}'
          description: '{{complaint_text}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: QC
          summary: 'Customer complaint: {{product_code}}'
          description: '{{complaint_text}}'
          issue_type: Bug
      - name: log-complaint
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_complaints
          data: '{{customer_name}},{{product_code}},{{create-case.case_number}},{{create-task.issue_key}}'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: customer_service
          text: 'Complaint: {{product_code}} from {{customer_name}}. Case: {{create-case.case_number}}. QC: {{create-task.issue_key}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bd.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://bd.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: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-triage-pipeline.yml

Processes a field corrective action by creating a ServiceNow case, alerting regulatory affairs via Microsoft Teams, notifying affected hospitals via Microsoft Outlook, and logging in Google Sheets.

naftiko: '0.5'
info:
  label: Field Corrective Action Pipeline
  description: Processes a field corrective action by creating a ServiceNow case, alerting regulatory affairs via Microsoft Teams, notifying affected hospitals via Microsoft Outlook, and logging in Google Sheets.
  tags:
  - medical-devices
  - servicenow
  - microsoft-teams
  - microsoft-outlook
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: fca
    port: 8080
    tools:
    - name: initiate-field-correction
      description: Orchestrate field corrective action.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: lot_numbers
        in: body
        type: string
        description: Affected lot numbers.
      - name: issue_description
        in: body
        type: string
        description: Issue description.
      steps:
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Field Corrective Action: {{product_code}}'
          description: '{{issue_description}}. Affected lots: {{lot_numbers}}.'
          urgency: '1'
      - name: alert-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_affairs
          text: 'FIELD CORRECTIVE ACTION: {{product_code}}. Lots: {{lot_numbers}}. Case: {{create-case.incident_number}}. FDA notification may be required.'
      - name: notify-hospitals
        type: call
        call: outlook.send-email
        with:
          to: customer-notifications@bd.com
          subject: 'Urgent Field Corrective Action: {{product_code}}'
          body: '{{issue_description}}. Affected lots: {{lot_numbers}}. Please quarantine affected inventory.'
      - name: log-fca
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_fca_log
          data: '{{product_code}},{{lot_numbers}},{{create-case.incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bd.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → field-corrective-action-pipeline.yml

When a product quality complaint is received, creates a CAPA record in the quality management system, opens a ServiceNow investigation ticket, notifies the quality team in Microsoft Teams, and creates a Jira tracking issue.

naftiko: '0.5'
info:
  label: Quality Complaint Investigation Pipeline
  description: When a product quality complaint is received, creates a CAPA record in the quality management system, opens a ServiceNow investigation ticket, notifies the quality team in Microsoft Teams, and creates a Jira tracking issue.
  tags:
  - quality
  - medical-devices
  - servicenow
  - microsoft-teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: quality-complaints
    port: 8080
    tools:
    - name: investigate-complaint
      description: Process a product quality complaint through investigation and tracking systems.
      inputParameters:
      - name: complaint_id
        in: body
        type: string
        description: Complaint reference number.
      - name: product_id
        in: body
        type: string
        description: Product ID.
      - name: description
        in: body
        type: string
        description: Complaint description.
      - name: severity
        in: body
        type: string
        description: Severity level such as critical, major, or minor.
      steps:
      - name: create-capa
        type: call
        call: qms.create-capa
        with:
          complaint_id: '{{complaint_id}}'
          product_id: '{{product_id}}'
          description: '{{description}}'
          severity: '{{severity}}'
      - name: create-investigation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Quality complaint: {{complaint_id}} - Product {{product_id}}'
          category: quality
          urgency: '{{severity}}'
          description: '{{description}} | CAPA: {{create-capa.capa_number}}'
      - name: create-tracker
        type: call
        call: jira.create-issue
        with:
          project: QUALITY
          issue_type: Bug
          summary: Investigate complaint {{complaint_id}} for product {{product_id}}
          description: 'CAPA: {{create-capa.capa_number}}. ServiceNow: {{create-investigation.number}}.'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_team
          text: 'Quality complaint {{complaint_id}} ({{severity}}): Product {{product_id}}. CAPA: {{create-capa.capa_number}}. Investigation: {{create-investigation.number}}.'
  consumes:
  - type: http
    namespace: qms
    baseUri: https://qms.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qms_token
    resources:
    - name: capas
      path: /capas
      operations:
      - name: create-capa
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bd.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bd.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-complaint-investigation-pipeline.yml

Retrieves a regulatory or quality document from Box cloud storage by file ID.

naftiko: '0.5'
info:
  label: Box Document Retrieval
  description: Retrieves a regulatory or quality document from Box cloud storage by file ID.
  tags:
  - medical-devices
  - box
capability:
  exposes:
  - type: mcp
    namespace: box
    port: 8080
    tools:
    - name: get-document
      description: Retrieve a document from Box.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Box file ID.
      call: box.get-file
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: download_url
        type: string
        mapping: $.shared_link.download_url
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → box-document-retrieval.yml

Retrieves production line data from the MES, calculates OEE metrics, and posts a daily summary to the manufacturing team.

naftiko: '0.5'
info:
  label: Production Line OEE Calculator
  description: Retrieves production line data from the MES, calculates OEE metrics, and posts a daily summary to the manufacturing team.
  tags:
  - manufacturing
  - analytics
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: oee
    port: 8080
    tools:
    - name: calculate-oee
      description: Compute OEE for a production line and report to the team.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: Production line ID.
      - name: date
        in: body
        type: string
        description: Date.
      steps:
      - name: get-production-data
        type: call
        call: mes.get-line-metrics
        with:
          line_id: '{{line_id}}'
          date: '{{date}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing_ops
          text: 'Line {{line_id}} OEE for {{date}}: {{get-production-data.oee_pct}}% (Availability: {{get-production-data.availability_pct}}%, Performance: {{get-production-data.performance_pct}}%, Quality: {{get-production-data.quality_pct}}%).'
  consumes:
  - type: http
    namespace: mes
    baseUri: https://mes.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.mes_token
    resources:
    - name: line-metrics
      path: /lines/{{line_id}}/metrics/{{date}}
      inputParameters:
      - name: line_id
        in: path
      - name: date
        in: path
      operations:
      - name: get-line-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → production-line-oee-calculator.yml

Creates an Azure AD security group for a new project team.

naftiko: '0.5'
info:
  label: Azure Active Directory Group Provisioner
  description: Creates an Azure AD security group for a new project team.
  tags:
  - identity
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: identity-mgmt
    port: 8080
    tools:
    - name: create-project-group
      description: Create an Azure AD group for a project team.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: Project name.
      - name: owner_email
        in: body
        type: string
        description: Group owner email.
      steps:
      - name: create-group
        type: call
        call: azuread.create-group
        with:
          display_name: BD-{{project_name}}
          owner: '{{owner_email}}'
      - name: notify-owner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{owner_email}}'
          text: 'Azure AD group created: BD-{{project_name}}. Group ID: {{create-group.id}}.'
  consumes:
  - 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: create-group
        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}}/chat/messages
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-active-directory-group-provisioner.yml

Processes warehouse cycle counts by pulling SAP inventory data, comparing physical counts, logging variances in Google Sheets, and notifying warehouse management via Microsoft Teams.

naftiko: '0.5'
info:
  label: Warehouse Inventory Cycle Count Pipeline
  description: Processes warehouse cycle counts by pulling SAP inventory data, comparing physical counts, logging variances in Google Sheets, and notifying warehouse management via Microsoft Teams.
  tags:
  - medical-devices
  - sap
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cycle-count
    port: 8080
    tools:
    - name: process-cycle-count
      description: Orchestrate warehouse cycle count reconciliation.
      inputParameters:
      - name: warehouse_id
        in: body
        type: string
        description: Warehouse ID.
      - name: zone
        in: body
        type: string
        description: Warehouse zone.
      steps:
      - name: get-sap-inventory
        type: call
        call: sap.get-inventory
        with:
          warehouse_id: '{{warehouse_id}}'
          zone: '{{zone}}'
      - name: log-variances
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_cycle_counts
          data: '{{warehouse_id}},{{zone}},{{get-sap-inventory.item_count}}'
      - name: notify-warehouse
        type: call
        call: msteams.send-message
        with:
          channel_id: warehouse_ops
          text: 'Cycle count complete: Warehouse {{warehouse_id}} Zone {{zone}}. Items counted: {{get-sap-inventory.item_count}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: inventory
      path: /API_MATERIAL_STOCK_SRV/A_MatlStkInAcctMod
      operations:
      - name: get-inventory
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → warehouse-inventory-cycle-count-pipeline.yml

Qualifies shipping lanes for temperature-sensitive devices by analyzing temperature data from Snowflake, logging results in Google Sheets, creating approval tasks in Jira, and notifying supply chain via Microsoft Teams.

naftiko: '0.5'
info:
  label: Shipping Lane Qualification Pipeline
  description: Qualifies shipping lanes for temperature-sensitive devices by analyzing temperature data from Snowflake, logging results in Google Sheets, creating approval tasks in Jira, and notifying supply chain via Microsoft Teams.
  tags:
  - medical-devices
  - snowflake
  - google-sheets
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lane-qual
    port: 8080
    tools:
    - name: qualify-shipping-lane
      description: Orchestrate shipping lane temperature qualification.
      inputParameters:
      - name: lane_id
        in: body
        type: string
        description: Shipping lane ID.
      - name: product_code
        in: body
        type: string
        description: Product code.
      steps:
      - name: analyze-temp-data
        type: call
        call: snowflake.get-lane-temps
        with:
          lane_id: '{{lane_id}}'
      - name: log-results
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_lane_qual
          data: '{{lane_id}},{{product_code}},{{analyze-temp-data.min_temp}},{{analyze-temp-data.max_temp}},{{analyze-temp-data.pass_fail}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project: SC
          summary: 'Lane qualification: {{lane_id}} for {{product_code}} - {{analyze-temp-data.pass_fail}}'
          issue_type: Task
      - name: notify-supply-chain
        type: call
        call: msteams.send-message
        with:
          channel_id: supply_chain
          text: 'Lane {{lane_id}} for {{product_code}}: {{analyze-temp-data.pass_fail}}. Temp range: {{analyze-temp-data.min_temp}}-{{analyze-temp-data.max_temp}}C.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-lane-temps
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → shipping-lane-qualification-pipeline.yml

Retrieves the latest build status for an Azure DevOps pipeline.

naftiko: '0.5'
info:
  label: Azure DevOps Pipeline Status
  description: Retrieves the latest build status for an Azure DevOps pipeline.
  tags:
  - devops
  - ci-cd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: cicd
    port: 8080
    tools:
    - name: get-build-status
      description: Check the latest Azure DevOps build status.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline ID.
      call: azdo.get-latest-build
      with:
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: build_number
        type: string
        mapping: $.value[0].buildNumber
      - name: result
        type: string
        mapping: $.value[0].result
      - name: finish_time
        type: string
        mapping: $.value[0].finishTime
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/bd/MedTech/_apis/build
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: builds
      path: /builds?definitions={{pipeline_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: path
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-pipeline-status.yml

Searches Splunk for security events in BD systems.

naftiko: '0.5'
info:
  label: Splunk Security Event Search
  description: Searches Splunk for security events in BD systems.
  tags:
  - security
  - monitoring
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: security-logs
    port: 8080
    tools:
    - name: search-security-events
      description: Search Splunk for security events.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Splunk search query.
      - name: time_range
        in: body
        type: string
        description: Time range.
      call: splunk.search
      with:
        search: '{{query}}'
        earliest_time: '{{time_range}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: count
        type: number
        mapping: $.result_count
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.bd.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs/export
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → splunk-security-event-search.yml

Retrieves a hospital or healthcare provider account profile from Salesforce including contract status and device install base.

naftiko: '0.5'
info:
  label: Salesforce Customer Account Lookup
  description: Retrieves a hospital or healthcare provider account profile from Salesforce including contract status and device install base.
  tags:
  - crm
  - salesforce
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-account
      description: Look up a healthcare customer account in Salesforce.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: contract_status
        type: string
        mapping: $.Contract_Status__c
      - name: install_base_count
        type: number
        mapping: $.Install_Base_Count__c
      - name: annual_revenue
        type: number
        mapping: $.AnnualRevenue
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bd.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-customer-account-lookup.yml

Registers unique device identifiers with the FDA GUDID database, updates SAP material master, logs in Google Sheets, and notifies regulatory via Microsoft Teams.

naftiko: '0.5'
info:
  label: Medical Device UDI Registration Pipeline
  description: Registers unique device identifiers with the FDA GUDID database, updates SAP material master, logs in Google Sheets, and notifies regulatory via Microsoft Teams.
  tags:
  - medical-devices
  - sap
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: udi-reg
    port: 8080
    tools:
    - name: register-udi
      description: Orchestrate UDI registration with FDA.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: di_number
        in: body
        type: string
        description: Device identifier.
      steps:
      - name: update-sap
        type: call
        call: sap.update-material-udi
        with:
          product_code: '{{product_code}}'
          udi: '{{di_number}}'
      - name: log-registration
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_udi_registry
          data: '{{product_code}},{{di_number}},registered'
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_affairs
          text: 'UDI registered: {{product_code}} - DI: {{di_number}}. SAP updated.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: materials
      path: /API_MATERIAL_SRV/Material('{{product_code}}')
      inputParameters:
      - name: product_code
        in: path
      operations:
      - name: update-material-udi
        method: PATCH
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-device-udi-registration-pipeline.yml

Manages contract manufacturer quality by pulling quality metrics from Snowflake, comparing against specs in SAP, logging in Google Sheets, and alerting supply chain via Microsoft Teams.

naftiko: '0.5'
info:
  label: Contract Manufacturing Quality Pipeline
  description: Manages contract manufacturer quality by pulling quality metrics from Snowflake, comparing against specs in SAP, logging in Google Sheets, and alerting supply chain via Microsoft Teams.
  tags:
  - medical-devices
  - snowflake
  - sap
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cmo-quality
    port: 8080
    tools:
    - name: review-cmo-quality
      description: Orchestrate contract manufacturer quality review.
      inputParameters:
      - name: cmo_id
        in: body
        type: string
        description: Contract manufacturer ID.
      - name: period
        in: body
        type: string
        description: Review period.
      steps:
      - name: get-quality-data
        type: call
        call: snowflake.get-cmo-metrics
        with:
          cmo_id: '{{cmo_id}}'
          period: '{{period}}'
      - name: log-review
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_cmo_quality
          data: '{{cmo_id}},{{period}},{{get-quality-data.defect_rate}},{{get-quality-data.on_time_pct}}'
      - name: notify-supply-chain
        type: call
        call: msteams.send-message
        with:
          channel_id: supply_chain
          text: 'CMO quality review: {{cmo_id}} ({{period}}). Defect rate: {{get-quality-data.defect_rate}}%. On-time: {{get-quality-data.on_time_pct}}%.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-cmo-metrics
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → contract-manufacturing-quality-pipeline.yml

Creates a Jira issue. Reusable building block for task creation.

naftiko: '0.5'
info:
  label: Jira Issue Creator
  description: Creates a Jira issue. Reusable building block for task creation.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: task-mgmt
    port: 8080
    tools:
    - name: create-issue
      description: Create a new Jira issue.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Project key.
      - name: issue_type
        in: body
        type: string
        description: Issue type.
      - name: summary
        in: body
        type: string
        description: Summary.
      call: jira.create-issue
      with:
        project: '{{project}}'
        issue_type: '{{issue_type}}'
        summary: '{{summary}}'
      outputParameters:
      - name: issue_key
        type: string
        mapping: $.key
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → jira-issue-creator.yml

Monitors cold chain shipments by checking IoT sensor data via Datadog, alerting logistics if temperatures exceed limits via Microsoft Teams, creating incidents in ServiceNow, and logging in Google Sheets.

naftiko: '0.5'
info:
  label: Cold Chain Monitoring Pipeline
  description: Monitors cold chain shipments by checking IoT sensor data via Datadog, alerting logistics if temperatures exceed limits via Microsoft Teams, creating incidents in ServiceNow, and logging in Google Sheets.
  tags:
  - medical-devices
  - datadog
  - microsoft-teams
  - servicenow
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: cold-chain
    port: 8080
    tools:
    - name: check-cold-chain
      description: Orchestrate cold chain monitoring check.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: Shipment ID.
      steps:
      - name: get-temp-data
        type: call
        call: datadog.get-metrics
        with:
          query: shipment.temperature{shipment_id:{{shipment_id}}}
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cold chain excursion: Shipment {{shipment_id}}'
          description: 'Temperature: {{get-temp-data.current_temp}}. Limit exceeded.'
          urgency: '1'
      - name: alert-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: logistics
          text: 'COLD CHAIN ALERT: Shipment {{shipment_id}}. Temp: {{get-temp-data.current_temp}}. Incident: {{create-incident.incident_number}}.'
      - name: log-excursion
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_cold_chain
          data: '{{shipment_id}},{{get-temp-data.current_temp}},{{create-incident.incident_number}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bd.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → cold-chain-monitoring-pipeline.yml

When lab equipment calibration is due, creates a ServiceNow work order, logs the schedule in the asset management system, and notifies the lab team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Lab Equipment Calibration Scheduler
  description: When lab equipment calibration is due, creates a ServiceNow work order, logs the schedule in the asset management system, and notifies the lab team via Microsoft Teams.
  tags:
  - manufacturing
  - quality
  - calibration
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: calibration
    port: 8080
    tools:
    - name: schedule-calibration
      description: Schedule lab equipment calibration and notify the team.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: Equipment ID.
      - name: calibration_type
        in: body
        type: string
        description: Calibration type.
      - name: due_date
        in: body
        type: string
        description: Due date.
      - name: lab_id
        in: body
        type: string
        description: Lab identifier.
      steps:
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          short_description: 'Calibration: {{equipment_id}} - {{calibration_type}}'
          category: calibration
          due_date: '{{due_date}}'
      - name: log-asset
        type: call
        call: asset-mgmt.log-calibration
        with:
          equipment_id: '{{equipment_id}}'
          type: '{{calibration_type}}'
          work_order: '{{create-work-order.number}}'
      - name: notify-lab
        type: call
        call: msteams.send-message
        with:
          channel_id: lab_{{lab_id}}
          text: 'Calibration due for {{equipment_id}}: {{calibration_type}} by {{due_date}}. Work order: {{create-work-order.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bd.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: asset-mgmt
    baseUri: https://assets.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.asset_mgmt_token
    resources:
    - name: calibration-log
      path: /equipment/{{equipment_id}}/calibration
      inputParameters:
      - name: equipment_id
        in: path
      operations:
      - name: log-calibration
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → lab-equipment-calibration-scheduler.yml

Executes a SQL query against the BD Snowflake data warehouse and returns results.

naftiko: '0.5'
info:
  label: Snowflake Data Query
  description: Executes a SQL query against the BD Snowflake data warehouse and returns results.
  tags:
  - data-engineering
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data-warehouse
    port: 8080
    tools:
    - name: query-data
      description: Execute a SQL query against Snowflake.
      inputParameters:
      - name: sql
        in: body
        type: string
        description: SQL query to execute.
      - name: warehouse
        in: body
        type: string
        description: Snowflake warehouse name.
      call: snowflake.execute-query
      with:
        statement: '{{sql}}'
        warehouse: '{{warehouse}}'
      outputParameters:
      - name: rows
        type: array
        mapping: $.data
      - name: row_count
        type: number
        mapping: $.resultSetMetaData.numRows
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-data-query.yml

Responds to production line downtime by creating a ServiceNow incident, alerting manufacturing ops via Microsoft Teams, scheduling maintenance in SAP, and logging in Google Sheets.

naftiko: '0.5'
info:
  label: Production Line Downtime Response Pipeline
  description: Responds to production line downtime by creating a ServiceNow incident, alerting manufacturing ops via Microsoft Teams, scheduling maintenance in SAP, and logging in Google Sheets.
  tags:
  - medical-devices
  - servicenow
  - microsoft-teams
  - sap
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: downtime
    port: 8080
    tools:
    - name: handle-downtime
      description: Orchestrate production line downtime response.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: Production line ID.
      - name: reason
        in: body
        type: string
        description: Downtime reason.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Production line {{line_id}} down
          description: '{{reason}}'
          urgency: '1'
      - name: alert-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing
          text: 'LINE DOWN: {{line_id}}. Reason: {{reason}}. Incident: {{create-incident.incident_number}}.'
      - name: schedule-maintenance
        type: call
        call: sap.create-maintenance-order
        with:
          equipment_id: '{{line_id}}'
          description: '{{reason}}'
          priority: emergency
      - name: log-downtime
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_downtime_log
          data: '{{line_id}},{{reason}},{{create-incident.incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bd.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: maintenance
      path: /API_MAINTORDER_SRV/MaintenanceOrder
      operations:
      - name: create-maintenance-order
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → production-line-downtime-response-pipeline.yml

When a sterilization cycle is completed, records the results in the MES, triggers a validation check in the QMS, and notifies the sterilization team.

naftiko: '0.5'
info:
  label: Device Sterilization Validation Pipeline
  description: When a sterilization cycle is completed, records the results in the MES, triggers a validation check in the QMS, and notifies the sterilization team.
  tags:
  - manufacturing
  - quality
  - sterilization
  - medical-devices
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sterilization
    port: 8080
    tools:
    - name: validate-sterilization
      description: Record and validate a sterilization cycle.
      inputParameters:
      - name: cycle_id
        in: body
        type: string
        description: Sterilization cycle ID.
      - name: batch_id
        in: body
        type: string
        description: Product batch ID.
      - name: method
        in: body
        type: string
        description: Sterilization method such as EtO, gamma, or steam.
      steps:
      - name: record-cycle
        type: call
        call: mes.record-sterilization
        with:
          cycle_id: '{{cycle_id}}'
          batch_id: '{{batch_id}}'
          method: '{{method}}'
      - name: validate
        type: call
        call: qms.validate-sterilization
        with:
          cycle_id: '{{cycle_id}}'
          parameters: '{{record-cycle.cycle_parameters}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: sterilization_ops
          text: 'Sterilization cycle {{cycle_id}} ({{method}}) for batch {{batch_id}}: Validation {{validate.result}}.'
  consumes:
  - type: http
    namespace: mes
    baseUri: https://mes.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.mes_token
    resources:
    - name: sterilization
      path: /sterilization/cycles/{{cycle_id}}
      inputParameters:
      - name: cycle_id
        in: path
      operations:
      - name: record-sterilization
        method: POST
  - type: http
    namespace: qms
    baseUri: https://qms.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qms_token
    resources:
    - name: validations
      path: /sterilization-validations
      operations:
      - name: validate-sterilization
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → device-sterilization-validation-pipeline.yml

Manages sterility assurance reviews by pulling test data from Snowflake, creating review tasks in Jira, logging results in Google Sheets, and notifying the QA team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Sterility Assurance Review Pipeline
  description: Manages sterility assurance reviews by pulling test data from Snowflake, creating review tasks in Jira, logging results in Google Sheets, and notifying the QA team via Microsoft Teams.
  tags:
  - medical-devices
  - snowflake
  - jira
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sterility
    port: 8080
    tools:
    - name: review-sterility
      description: Orchestrate sterility assurance review.
      inputParameters:
      - name: lot_number
        in: body
        type: string
        description: Lot number.
      - name: sterilization_method
        in: body
        type: string
        description: Sterilization method (EO, gamma, steam).
      steps:
      - name: get-test-data
        type: call
        call: snowflake.get-sterility-results
        with:
          lot_number: '{{lot_number}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: QA
          summary: 'Sterility review: Lot {{lot_number}} ({{sterilization_method}})'
          issue_type: Task
      - name: log-results
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_sterility_log
          data: '{{lot_number}},{{sterilization_method}},{{get-test-data.result}}'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_assurance
          text: 'Sterility review: Lot {{lot_number}} ({{sterilization_method}}): {{get-test-data.result}}. Review: {{create-review.issue_key}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-sterility-results
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bd.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: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sterility-assurance-review-pipeline.yml

Triggers a Power BI dataset refresh for the BD manufacturing operations dashboard and notifies the operations team.

naftiko: '0.5'
info:
  label: Power BI Manufacturing Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the BD manufacturing operations dashboard and notifies the operations team.
  tags:
  - analytics
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-mfg-dashboard
      description: Trigger a Power BI refresh and notify the operations team.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      steps:
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing_analytics
          text: Manufacturing Power BI dashboard refreshed for dataset {{dataset_id}}.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-manufacturing-dashboard-refresh.yml

Processes a Corrective and Preventive Action by creating the CAPA in Jira, logging in Google Sheets, uploading investigation documents to SharePoint, and alerting the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: CAPA Corrective Action Pipeline
  description: Processes a Corrective and Preventive Action by creating the CAPA in Jira, logging in Google Sheets, uploading investigation documents to SharePoint, and alerting the quality team via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - google-sheets
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: capa
    port: 8080
    tools:
    - name: initiate-capa
      description: Orchestrate CAPA initiation and tracking.
      inputParameters:
      - name: description
        in: body
        type: string
        description: CAPA description.
      - name: source
        in: body
        type: string
        description: Source of nonconformance.
      - name: severity
        in: body
        type: string
        description: Severity level.
      steps:
      - name: create-capa
        type: call
        call: jira.create-issue
        with:
          project: CAPA
          summary: 'CAPA: {{description}}'
          issue_type: Bug
          priority: '{{severity}}'
      - name: log-capa
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_capa_log
          data: '{{create-capa.issue_key}},{{source}},{{severity}},open'
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality
          text: 'CAPA {{create-capa.issue_key}} initiated: {{description}}. Source: {{source}}. Severity: {{severity}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → capa-corrective-action-pipeline.yml

Generates vendor scorecards by pulling quality data from Snowflake, delivery metrics from SAP, compiling in Google Sheets, and distributing via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Vendor Score Card Pipeline
  description: Generates vendor scorecards by pulling quality data from Snowflake, delivery metrics from SAP, compiling in Google Sheets, and distributing via Microsoft Outlook.
  tags:
  - medical-devices
  - snowflake
  - sap
  - google-sheets
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: vendor-scorecard
    port: 8080
    tools:
    - name: generate-scorecard
      description: Orchestrate vendor scorecard generation.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: Vendor ID.
      - name: period
        in: body
        type: string
        description: Review period.
      steps:
      - name: get-quality-data
        type: call
        call: snowflake.get-vendor-quality
        with:
          vendor_id: '{{vendor_id}}'
          period: '{{period}}'
      - name: get-delivery-data
        type: call
        call: sap.get-vendor-delivery
        with:
          vendor_id: '{{vendor_id}}'
          period: '{{period}}'
      - name: compile-scorecard
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_vendor_scorecards
          data: '{{vendor_id}},{{period}},{{get-quality-data.score}},{{get-delivery-data.on_time_pct}}'
      - name: distribute
        type: call
        call: outlook.send-email
        with:
          to: supplier-quality@bd.com
          subject: 'Vendor Scorecard: {{vendor_id}} - {{period}}'
          body: 'Quality score: {{get-quality-data.score}}. On-time delivery: {{get-delivery-data.on_time_pct}}%.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-vendor-quality
        method: POST
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: vendors
      path: /API_PURCHASEORDER_SRV/PurchaseOrder
      operations:
      - name: get-vendor-delivery
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → vendor-score-card-pipeline.yml

Checks the status of a Cisco network device in BD facilities.

naftiko: '0.5'
info:
  label: Cisco Network Device Status
  description: Checks the status of a Cisco network device in BD facilities.
  tags:
  - infrastructure
  - networking
  - cisco
capability:
  exposes:
  - type: mcp
    namespace: network
    port: 8080
    tools:
    - name: check-device
      description: Check a Cisco device status.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Device ID.
      call: cisco.get-device
      with:
        device_id: '{{device_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.device.reachabilityStatus
      - name: hostname
        type: string
        mapping: $.device.hostname
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://dnac.bd.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_dnac_token
    resources:
    - name: devices
      path: /network-device/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → cisco-network-device-status.yml

When clinical trial data is collected, syncs results to the Snowflake data warehouse, triggers an Azure Data Factory pipeline for ETL processing, and notifies the clinical team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Data Sync Pipeline
  description: When clinical trial data is collected, syncs results to the Snowflake data warehouse, triggers an Azure Data Factory pipeline for ETL processing, and notifies the clinical team in Microsoft Teams.
  tags:
  - clinical-trials
  - data-engineering
  - snowflake
  - azure-data-factory
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-data
    port: 8080
    tools:
    - name: sync-trial-data
      description: Sync clinical trial data to the analytics platform and notify the clinical team.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: Clinical trial identifier.
      - name: data_batch_id
        in: body
        type: string
        description: Data batch identifier.
      - name: record_count
        in: body
        type: number
        description: Number of records in the batch.
      steps:
      - name: load-to-snowflake
        type: call
        call: snowflake.load-data
        with:
          database: clinical_trials
          schema: trial_{{trial_id}}
          batch_id: '{{data_batch_id}}'
      - name: trigger-etl
        type: call
        call: adf.trigger-pipeline
        with:
          pipeline_name: clinical_trial_etl
          parameters:
            trial_id: '{{trial_id}}'
            batch_id: '{{data_batch_id}}'
      - name: notify-clinical
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical_trials
          text: 'Trial {{trial_id}} data batch {{data_batch_id}} loaded: {{record_count}} records. ETL pipeline triggered.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: data-loading
      path: /statements
      operations:
      - name: load-data
        method: POST
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/bd-data/providers/Microsoft.DataFactory/factories/bd-adf
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: pipelines
      path: /pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01
      inputParameters:
      - name: pipeline_name
        in: path
      operations:
      - name: trigger-pipeline
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-data-sync-pipeline.yml

When a manufacturing batch is completed, records the batch data in the MES, triggers a quality check in the QMS, uploads the batch record to SharePoint, and notifies the manufacturing team.

naftiko: '0.5'
info:
  label: Manufacturing Batch Record Pipeline
  description: When a manufacturing batch is completed, records the batch data in the MES, triggers a quality check in the QMS, uploads the batch record to SharePoint, and notifies the manufacturing team.
  tags:
  - manufacturing
  - quality
  - medical-devices
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: batch-records
    port: 8080
    tools:
    - name: complete-batch
      description: Process a completed manufacturing batch across MES, QMS, and documentation systems.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: Manufacturing batch ID.
      - name: product_id
        in: body
        type: string
        description: Product ID.
      - name: quantity_produced
        in: body
        type: number
        description: Units produced.
      - name: line_id
        in: body
        type: string
        description: Production line ID.
      steps:
      - name: record-batch
        type: call
        call: mes.complete-batch
        with:
          batch_id: '{{batch_id}}'
          product_id: '{{product_id}}'
          quantity: '{{quantity_produced}}'
          line_id: '{{line_id}}'
      - name: trigger-qc
        type: call
        call: qms.create-qc-check
        with:
          batch_id: '{{batch_id}}'
          product_id: '{{product_id}}'
          sample_size: '{{record-batch.recommended_sample_size}}'
      - name: upload-record
        type: call
        call: sharepoint.upload-file
        with:
          site_id: manufacturing
          folder_path: BatchRecords/{{product_id}}/{{batch_id}}
          file_name: batch_record_{{batch_id}}.pdf
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing_ops
          text: 'Batch {{batch_id}} completed: {{quantity_produced}} units of {{product_id}} on line {{line_id}}. QC check initiated.'
  consumes:
  - type: http
    namespace: mes
    baseUri: https://mes.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.mes_token
    resources:
    - name: batches
      path: /batches/{{batch_id}}/complete
      inputParameters:
      - name: batch_id
        in: path
      operations:
      - name: complete-batch
        method: POST
  - type: http
    namespace: qms
    baseUri: https://qms.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qms_token
    resources:
    - name: qc-checks
      path: /qc-checks
      operations:
      - name: create-qc-check
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-batch-record-pipeline.yml

Queries Dynatrace for application performance metrics of BD manufacturing systems.

naftiko: '0.5'
info:
  label: Dynatrace Application Performance Monitor
  description: Queries Dynatrace for application performance metrics of BD manufacturing systems.
  tags:
  - monitoring
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-app-metrics
      description: Retrieve application metrics from Dynatrace.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Dynatrace entity ID.
      call: dynatrace.get-metrics
      with:
        entity_id: '{{entity_id}}'
      outputParameters:
      - name: response_time
        type: number
        mapping: $.dataPoints[0].values[0]
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://bd.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query?entitySelector=entityId({{entity_id}})
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-application-performance-monitor.yml

Creates a procurement requisition in SAP Ariba for medical device components.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Requisition
  description: Creates a procurement requisition in SAP Ariba for medical device components.
  tags:
  - procurement
  - sap-ariba
  - medical-devices
capability:
  exposes:
  - type: mcp
    namespace: procurement-ariba
    port: 8080
    tools:
    - name: create-requisition
      description: Create a procurement requisition in SAP Ariba.
      inputParameters:
      - name: material_description
        in: body
        type: string
        description: Material description.
      - name: quantity
        in: body
        type: number
        description: Quantity.
      - name: cost_center
        in: body
        type: string
        description: Cost center.
      call: ariba.create-requisition
      with:
        description: '{{material_description}}'
        quantity: '{{quantity}}'
        cost_center: '{{cost_center}}'
      outputParameters:
      - name: requisition_id
        type: string
        mapping: $.requisition.id
      - name: status
        type: string
        mapping: $.requisition.status
  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
Open in Framework → View in Fleet → sap-ariba-supplier-requisition.yml

Sends a message to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Notifier
  description: Sends a message to a Microsoft Teams channel.
  tags:
  - collaboration
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: teams-messaging
    port: 8080
    tools:
    - name: send-channel-message
      description: Post a message to a Teams channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: Channel ID.
      - name: text
        in: body
        type: string
        description: Message.
      call: msteams.send-message
      with:
        channel_id: '{{channel_id}}'
        text: '{{text}}'
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-notifier.yml

Retrieves a file from Amazon S3, such as clinical data exports or regulatory submission documents.

naftiko: '0.5'
info:
  label: Amazon S3 File Retrieval
  description: Retrieves a file from Amazon S3, such as clinical data exports or regulatory submission documents.
  tags:
  - medical-devices
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: s3
    port: 8080
    tools:
    - name: get-file
      description: Retrieve a file from Amazon S3.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: S3 bucket.
      - name: key
        in: body
        type: string
        description: Object key.
      call: s3.get-object
      with:
        bucket: '{{bucket}}'
        key: '{{key}}'
      outputParameters:
      - name: content_type
        type: string
        mapping: $.ContentType
      - name: size
        type: number
        mapping: $.ContentLength
  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: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: get-object
        method: GET
Open in Framework → View in Fleet → amazon-s3-file-retrieval.yml

When New Relic fires an alert, creates a ServiceNow incident and notifies the SRE team.

naftiko: '0.5'
info:
  label: New Relic Alert Handler
  description: When New Relic fires an alert, creates a ServiceNow incident and notifies the SRE team.
  tags:
  - monitoring
  - new-relic
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: alerting
    port: 8080
    tools:
    - name: handle-alert
      description: Process a New Relic alert through incident management.
      inputParameters:
      - name: condition_name
        in: body
        type: string
        description: Alert condition.
      - name: severity
        in: body
        type: string
        description: Severity.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Alert: {{condition_name}}'
          urgency: '{{severity}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: sre_alerts
          text: 'Alert: {{condition_name}} ({{severity}}). Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bd.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-relic-alert-handler.yml

Processes engineering change orders by creating the ECO in Jira, updating the BOM in SAP, uploading revised drawings to SharePoint, and notifying the engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Engineering Change Order Pipeline
  description: Processes engineering change orders by creating the ECO in Jira, updating the BOM in SAP, uploading revised drawings to SharePoint, and notifying the engineering team via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: eco
    port: 8080
    tools:
    - name: process-eco
      description: Orchestrate engineering change order processing.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: change_description
        in: body
        type: string
        description: Change description.
      - name: impact_level
        in: body
        type: string
        description: Impact level.
      steps:
      - name: create-eco
        type: call
        call: jira.create-issue
        with:
          project: ECO
          summary: 'ECO: {{product_code}} - {{change_description}}'
          issue_type: Task
          priority: '{{impact_level}}'
      - name: update-bom
        type: call
        call: sap.update-bom
        with:
          product_code: '{{product_code}}'
          eco_ref: '{{create-eco.issue_key}}'
      - name: notify-engineering
        type: call
        call: msteams.send-message
        with:
          channel_id: engineering
          text: 'ECO {{create-eco.issue_key}}: {{product_code}} - {{change_description}}. Impact: {{impact_level}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: bom
      path: /API_BOM_SRV/BillOfMaterial
      operations:
      - name: update-bom
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → engineering-change-order-pipeline.yml

Manages product labeling reviews by creating review tasks in Jira, uploading proofs to SharePoint, and notifying regulatory and marketing teams via Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Labeling Review Pipeline
  description: Manages product labeling reviews by creating review tasks in Jira, uploading proofs to SharePoint, and notifying regulatory and marketing teams via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: labeling-review
    port: 8080
    tools:
    - name: submit-labeling-review
      description: Orchestrate product labeling review.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: label_type
        in: body
        type: string
        description: Label type (primary, secondary, IFU).
      steps:
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: LABEL
          summary: 'Label review: {{product_code}} - {{label_type}}'
          issue_type: Task
      - name: notify-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: labeling
          text: 'Label review initiated: {{product_code}} ({{label_type}}). Review: {{create-review.issue_key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-labeling-review-pipeline.yml

Updates product risk management files by creating Jira tasks for risk assessment reviews, logging updates in Google Sheets, and notifying the risk management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Risk Management Update Pipeline
  description: Updates product risk management files by creating Jira tasks for risk assessment reviews, logging updates in Google Sheets, and notifying the risk management team via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-mgmt
    port: 8080
    tools:
    - name: update-risk-file
      description: Orchestrate risk management file update.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: risk_type
        in: body
        type: string
        description: Risk type (FMEA, FTA, hazard analysis).
      - name: trigger
        in: body
        type: string
        description: Trigger for review.
      steps:
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: RISK
          summary: 'Risk review: {{product_code}} - {{risk_type}}'
          description: 'Trigger: {{trigger}}'
          issue_type: Task
      - name: log-update
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_risk_management
          data: '{{product_code}},{{risk_type}},{{trigger}},{{create-review-task.issue_key}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: risk_management
          text: 'Risk review: {{product_code}} {{risk_type}} triggered by {{trigger}}. Task: {{create-review-task.issue_key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → risk-management-update-pipeline.yml

Generates production schedules by pulling demand from Salesforce, checking material availability in SAP, publishing the schedule in Google Sheets, and notifying manufacturing via Microsoft Teams.

naftiko: '0.5'
info:
  label: Production Scheduling Pipeline
  description: Generates production schedules by pulling demand from Salesforce, checking material availability in SAP, publishing the schedule in Google Sheets, and notifying manufacturing via Microsoft Teams.
  tags:
  - medical-devices
  - salesforce
  - sap
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: prod-schedule
    port: 8080
    tools:
    - name: generate-schedule
      description: Orchestrate production scheduling.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: week
        in: body
        type: string
        description: Production week.
      steps:
      - name: get-demand
        type: call
        call: salesforce.get-forecast
        with:
          product_code: '{{product_code}}'
      - name: check-materials
        type: call
        call: sap.check-availability
        with:
          product_code: '{{product_code}}'
      - name: publish-schedule
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_production_schedule
          data: '{{product_code}},{{week}},{{get-demand.quantity}},{{check-materials.status}}'
      - name: notify-mfg
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing
          text: 'Production schedule: {{product_code}} week {{week}}. Demand: {{get-demand.quantity}}. Materials: {{check-materials.status}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bd.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: forecasts
      path: /sobjects/ForecastingItem
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: availability
      path: /API_MATERIAL_STOCK_SRV/A_MatlStkInAcctMod
      operations:
      - name: check-availability
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → production-scheduling-pipeline.yml

Creates a scheduled Zoom meeting for cross-functional team meetings and quality review sessions.

naftiko: '0.5'
info:
  label: Zoom Meeting Scheduler
  description: Creates a scheduled Zoom meeting for cross-functional team meetings and quality review sessions.
  tags:
  - medical-devices
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom
    port: 8080
    tools:
    - name: create-meeting
      description: Schedule a Zoom meeting.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: Meeting topic.
      - name: start_time
        in: body
        type: string
        description: Start time in ISO 8601.
      call: zoom.create-meeting
      with:
        topic: '{{topic}}'
        start_time: '{{start_time}}'
      outputParameters:
      - name: meeting_id
        type: string
        mapping: $.id
      - 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_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
Open in Framework → View in Fleet → zoom-meeting-scheduler.yml

When an employee submits a travel expense in SAP Concur, validates against department budget and notifies the manager.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Processor
  description: When an employee submits a travel expense in SAP Concur, validates against department budget and notifies the manager.
  tags:
  - finance
  - travel
  - sap-concur
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: travel-expenses
    port: 8080
    tools:
    - name: process-expense
      description: Validate and route a travel expense report.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Concur report ID.
      - name: manager_email
        in: body
        type: string
        description: Manager email.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_email}}'
          text: 'Expense report {{report_id}} submitted: ${{get-report.total_amount}} from {{get-report.employee_name}}. Please review.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chat/messages
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-expense-processor.yml

Processes Medical Device Report submissions by compiling data from Salesforce complaints, creating the MDR in Jira, alerting regulatory via Microsoft Teams, and logging in Google Sheets.

naftiko: '0.5'
info:
  label: MDR Report Submission Pipeline
  description: Processes Medical Device Report submissions by compiling data from Salesforce complaints, creating the MDR in Jira, alerting regulatory via Microsoft Teams, and logging in Google Sheets.
  tags:
  - medical-devices
  - salesforce
  - jira
  - microsoft-teams
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: mdr
    port: 8080
    tools:
    - name: submit-mdr
      description: Orchestrate MDR report submission.
      inputParameters:
      - name: complaint_id
        in: body
        type: string
        description: Salesforce complaint ID.
      - name: event_type
        in: body
        type: string
        description: Death, serious injury, or malfunction.
      steps:
      - name: get-complaint
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{complaint_id}}'
      - name: create-mdr
        type: call
        call: jira.create-issue
        with:
          project: MDR
          summary: 'MDR: {{event_type}} - Case {{complaint_id}}'
          issue_type: Bug
          priority: Critical
      - name: alert-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_affairs
          text: 'MDR REQUIRED: {{event_type}}. Complaint: {{complaint_id}}. MDR: {{create-mdr.issue_key}}. 30-day deadline.'
      - name: log-mdr
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_mdr_log
          data: '{{complaint_id}},{{event_type}},{{create-mdr.issue_key}},pending'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bd.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → mdr-report-submission-pipeline.yml

Handles cleanroom environmental excursions by logging the event in ServiceNow, creating a CAPA task in Jira, alerting manufacturing via Microsoft Teams, and recording in Google Sheets.

naftiko: '0.5'
info:
  label: Cleanroom Environmental Excursion Pipeline
  description: Handles cleanroom environmental excursions by logging the event in ServiceNow, creating a CAPA task in Jira, alerting manufacturing via Microsoft Teams, and recording in Google Sheets.
  tags:
  - medical-devices
  - servicenow
  - jira
  - microsoft-teams
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: cleanroom-excursion
    port: 8080
    tools:
    - name: report-excursion
      description: Orchestrate cleanroom environmental excursion response.
      inputParameters:
      - name: room_id
        in: body
        type: string
        description: Cleanroom ID.
      - name: parameter
        in: body
        type: string
        description: Parameter out of spec (temp, humidity, particles).
      - name: value
        in: body
        type: string
        description: Recorded value.
      steps:
      - name: log-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cleanroom excursion: {{room_id}} - {{parameter}}'
          description: '{{parameter}} reading of {{value}} exceeds limits in {{room_id}}.'
          urgency: '1'
      - name: create-capa
        type: call
        call: jira.create-issue
        with:
          project: CAPA
          summary: 'Cleanroom excursion: {{room_id}} {{parameter}}={{value}}'
          issue_type: Bug
      - name: alert-mfg
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing
          text: 'CLEANROOM EXCURSION: {{room_id}} {{parameter}}={{value}}. Incident: {{log-incident.incident_number}}. CAPA: {{create-capa.issue_key}}.'
      - name: record
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_env_monitoring
          data: '{{room_id}},{{parameter}},{{value}},{{log-incident.incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bd.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: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → cleanroom-environmental-excursion-pipeline.yml

Retrieves cleanroom environmental monitoring data from facility sensors including temperature, humidity, and particle counts.

naftiko: '0.5'
info:
  label: Environmental Monitoring Data Collector
  description: Retrieves cleanroom environmental monitoring data from facility sensors including temperature, humidity, and particle counts.
  tags:
  - manufacturing
  - quality
  - environmental-monitoring
capability:
  exposes:
  - type: mcp
    namespace: env-monitoring
    port: 8080
    tools:
    - name: get-cleanroom-data
      description: Retrieve cleanroom environmental conditions.
      inputParameters:
      - name: room_id
        in: body
        type: string
        description: Cleanroom identifier.
      - name: date
        in: body
        type: string
        description: Date for data retrieval.
      call: env-sensors.get-readings
      with:
        room_id: '{{room_id}}'
        date: '{{date}}'
      outputParameters:
      - name: temperature
        type: number
        mapping: $.readings.temperature_avg
      - name: humidity
        type: number
        mapping: $.readings.humidity_avg
      - name: particle_count
        type: number
        mapping: $.readings.particle_count_avg
      - name: compliance_status
        type: string
        mapping: $.readings.compliance
  consumes:
  - type: http
    namespace: env-sensors
    baseUri: https://envmon.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.envmon_token
    resources:
    - name: readings
      path: /rooms/{{room_id}}/readings/{{date}}
      inputParameters:
      - name: room_id
        in: path
      - name: date
        in: path
      operations:
      - name: get-readings
        method: GET
Open in Framework → View in Fleet → environmental-monitoring-data-collector.yml

When an adverse event is reported, creates a CAPA in the QMS, files an FDA MedWatch report, uploads documentation to SharePoint, and alerts the regulatory team.

naftiko: '0.5'
info:
  label: FDA Adverse Event Reporter
  description: When an adverse event is reported, creates a CAPA in the QMS, files an FDA MedWatch report, uploads documentation to SharePoint, and alerts the regulatory team.
  tags:
  - regulatory
  - medical-devices
  - quality
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: adverse-events
    port: 8080
    tools:
    - name: report-adverse-event
      description: Process an adverse event report through regulatory and quality systems.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: Adverse event ID.
      - name: product_id
        in: body
        type: string
        description: Product ID.
      - name: description
        in: body
        type: string
        description: Event description.
      - name: patient_outcome
        in: body
        type: string
        description: Patient outcome.
      steps:
      - name: create-capa
        type: call
        call: qms.create-capa
        with:
          event_id: '{{event_id}}'
          product_id: '{{product_id}}'
          description: '{{description}}'
          severity: critical
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory_affairs
          folder_path: AdverseEvents/{{product_id}}
          file_name: ae_report_{{event_id}}.pdf
      - name: alert-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_urgent
          text: 'ADVERSE EVENT: {{event_id}} for product {{product_id}}. Outcome: {{patient_outcome}}. CAPA: {{create-capa.capa_number}}.'
  consumes:
  - type: http
    namespace: qms
    baseUri: https://qms.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qms_token
    resources:
    - name: capas
      path: /capas
      operations:
      - name: create-capa
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fda-adverse-event-reporter.yml

Generates a Qlik Sense report for manufacturing KPIs and emails it to the operations director.

naftiko: '0.5'
info:
  label: Qlik Sense Dashboard Report Generator
  description: Generates a Qlik Sense report for manufacturing KPIs and emails it to the operations director.
  tags:
  - analytics
  - manufacturing
  - qlik-sense
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: mfg-reporting
    port: 8080
    tools:
    - name: generate-mfg-report
      description: Generate and email a manufacturing KPI report from Qlik Sense.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: Qlik Sense app ID.
      - name: report_period
        in: body
        type: string
        description: Report period.
      - name: director_email
        in: body
        type: string
        description: Operations director email.
      steps:
      - name: generate-report
        type: call
        call: qliksense.generate-report
        with:
          app_id: '{{app_id}}'
          period: '{{report_period}}'
      - name: email-report
        type: call
        call: outlook.send-email
        with:
          to: '{{director_email}}'
          subject: Manufacturing KPI Report - {{report_period}}
          body: 'OEE: {{generate-report.oee_pct}}%. Yield: {{generate-report.yield_pct}}%. Scrap rate: {{generate-report.scrap_rate_pct}}%. Report: {{generate-report.download_url}}.'
  consumes:
  - type: http
    namespace: qliksense
    baseUri: https://qlik.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qliksense_token
    resources:
    - name: reports
      path: /apps/{{app_id}}/reports
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: generate-report
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → qlik-sense-dashboard-report-generator.yml

Retrieves the latest run status for a Terraform Cloud workspace used by BD infrastructure teams.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Status
  description: Retrieves the latest run status for a Terraform Cloud workspace used by BD infrastructure teams.
  tags:
  - devops
  - infrastructure
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: iac
    port: 8080
    tools:
    - name: get-workspace-status
      description: Check the latest Terraform run status.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Workspace ID.
      call: terraform.get-latest-run
      with:
        workspace_id: '{{workspace_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.attributes.status
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /workspaces/{{workspace_id}}/runs?page[size]=1
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: get-latest-run
        method: GET
Open in Framework → View in Fleet → terraform-cloud-workspace-status.yml

Retrieves employee compensation details from Workday by employee ID.

naftiko: '0.5'
info:
  label: Workday Compensation Lookup
  description: Retrieves employee compensation details from Workday by employee ID.
  tags:
  - medical-devices
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: get-compensation
      description: Look up employee compensation in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Employee ID.
      call: workday.get-comp
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: base_salary
        type: number
        mapping: $.data.base_pay
      - name: currency
        type: string
        mapping: $.data.currency
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bd
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /workers/{{employee_id}}/compensation
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-comp
        method: GET
Open in Framework → View in Fleet → workday-compensation-lookup.yml

Schedules supplier quality audits by looking up the supplier in SAP Ariba, creating an audit task in Jira, scheduling via Zoom, and notifying the supplier quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Audit Scheduling Pipeline
  description: Schedules supplier quality audits by looking up the supplier in SAP Ariba, creating an audit task in Jira, scheduling via Zoom, and notifying the supplier quality team via Microsoft Teams.
  tags:
  - medical-devices
  - sap-ariba
  - jira
  - zoom
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-audit
    port: 8080
    tools:
    - name: schedule-audit
      description: Orchestrate supplier audit scheduling.
      inputParameters:
      - name: supplier_name
        in: body
        type: string
        description: Supplier name.
      - name: audit_type
        in: body
        type: string
        description: Audit type.
      - name: audit_date
        in: body
        type: string
        description: Planned audit date.
      steps:
      - name: create-audit-task
        type: call
        call: jira.create-issue
        with:
          project: SQA
          summary: '{{audit_type}} Audit: {{supplier_name}}'
          issue_type: Task
      - name: schedule-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: 'Supplier Audit: {{supplier_name}} - {{audit_type}}'
          start_time: '{{audit_date}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supplier_quality
          text: 'Supplier audit scheduled: {{supplier_name}} ({{audit_type}}) on {{audit_date}}. Task: {{create-audit-task.issue_key}}. Zoom: {{schedule-meeting.join_url}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: 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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-audit-scheduling-pipeline.yml

When new product training content is finalized, uploads it to SharePoint, creates a Pluralsight channel entry reference, and notifies the training team.

naftiko: '0.5'
info:
  label: Product Training Content Publisher
  description: When new product training content is finalized, uploads it to SharePoint, creates a Pluralsight channel entry reference, and notifies the training team.
  tags:
  - training
  - medical-devices
  - sharepoint
  - pluralsight
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: training-content
    port: 8080
    tools:
    - name: publish-training
      description: Distribute new product training content across learning platforms.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: Product ID.
      - name: course_title
        in: body
        type: string
        description: Training course title.
      - name: content_type
        in: body
        type: string
        description: Content type such as video, document, or lab_exercise.
      steps:
      - name: upload-content
        type: call
        call: sharepoint.upload-file
        with:
          site_id: training
          folder_path: Products/{{product_id}}
          file_name: '{{course_title}}.pdf'
      - name: notify-training
        type: call
        call: msteams.send-message
        with:
          channel_id: training_team
          text: 'New training content published: {{course_title}} for product {{product_id}} ({{content_type}}). Available at: {{upload-content.url}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-training-content-publisher.yml

Logs HIPAA compliance audit events, uploads audit evidence to SharePoint, and creates a Jira tracking issue for the compliance team.

naftiko: '0.5'
info:
  label: HIPAA Compliance Audit Logger
  description: Logs HIPAA compliance audit events, uploads audit evidence to SharePoint, and creates a Jira tracking issue for the compliance team.
  tags:
  - compliance
  - hipaa
  - healthcare
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: hipaa-compliance
    port: 8080
    tools:
    - name: log-compliance-event
      description: Record a HIPAA compliance audit event and route for review.
      inputParameters:
      - name: event_type
        in: body
        type: string
        description: Audit event type.
      - name: department
        in: body
        type: string
        description: Department.
      - name: findings
        in: body
        type: string
        description: Audit findings summary.
      steps:
      - name: upload-evidence
        type: call
        call: sharepoint.upload-file
        with:
          site_id: compliance
          folder_path: HIPAA/{{department}}
          file_name: audit_{{event_type}}.pdf
      - name: create-tracker
        type: call
        call: jira.create-issue
        with:
          project: COMPLIANCE
          issue_type: Task
          summary: 'HIPAA audit: {{event_type}} - {{department}}'
          description: 'Findings: {{findings}}. Evidence: {{upload-evidence.url}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://bd.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → hipaa-compliance-audit-logger.yml

Conducts hospital account reviews by pulling account data from Salesforce, analyzing usage in Snowflake, and distributing the review via Microsoft Outlook and Microsoft Teams.

naftiko: '0.5'
info:
  label: Hospital Account Review Pipeline
  description: Conducts hospital account reviews by pulling account data from Salesforce, analyzing usage in Snowflake, and distributing the review via Microsoft Outlook and Microsoft Teams.
  tags:
  - medical-devices
  - salesforce
  - snowflake
  - microsoft-outlook
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: account-review
    port: 8080
    tools:
    - name: review-hospital-account
      description: Orchestrate hospital account review.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-usage
        type: call
        call: snowflake.get-account-usage
        with:
          account_id: '{{account_id}}'
      - name: send-review
        type: call
        call: outlook.send-email
        with:
          to: '{{get-account.owner_email}}'
          subject: 'Account Review: {{get-account.name}}'
          body: 'Revenue: ${{get-usage.revenue}}. Volume: {{get-usage.units}}. Growth: {{get-usage.growth_pct}}%.'
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: sales
          text: 'Account review: {{get-account.name}}. Revenue: ${{get-usage.revenue}}. Growth: {{get-usage.growth_pct}}%.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bd.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
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-account-usage
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hospital-account-review-pipeline.yml

Retrieves a document from Google Drive by file ID for regulatory or clinical documentation.

naftiko: '0.5'
info:
  label: Google Drive Document Retrieval
  description: Retrieves a document from Google Drive by file ID for regulatory or clinical documentation.
  tags:
  - medical-devices
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: gdrive
    port: 8080
    tools:
    - name: get-document
      description: Retrieve a Google Drive document.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Google Drive file ID.
      call: gdrive.get-file
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: mime_type
        type: string
        mapping: $.mimeType
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → google-drive-document-retrieval.yml

Compiles annual product review data by querying Snowflake for yearly quality metrics, creating review tasks in Jira, and distributing the report via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Annual Product Review Pipeline
  description: Compiles annual product review data by querying Snowflake for yearly quality metrics, creating review tasks in Jira, and distributing the report via Microsoft Outlook.
  tags:
  - medical-devices
  - snowflake
  - jira
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: apr
    port: 8080
    tools:
    - name: generate-annual-review
      description: Orchestrate annual product review.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: year
        in: body
        type: string
        description: Review year.
      steps:
      - name: get-annual-data
        type: call
        call: snowflake.get-annual-metrics
        with:
          product_code: '{{product_code}}'
          year: '{{year}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: QA
          summary: 'Annual Product Review: {{product_code}} - {{year}}'
          issue_type: Epic
      - name: distribute
        type: call
        call: outlook.send-email
        with:
          to: quality-leadership@bd.com
          subject: 'Annual Product Review: {{product_code}} - {{year}}'
          body: 'Complaints: {{get-annual-data.complaint_count}}. CAPAs: {{get-annual-data.capa_count}}. Lots produced: {{get-annual-data.lot_count}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-annual-metrics
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bd.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → annual-product-review-pipeline.yml

Checks the status of a GitHub Actions CI/CD workflow run for medical device software repositories.

naftiko: '0.5'
info:
  label: GitHub Actions Build Status
  description: Checks the status of a GitHub Actions CI/CD workflow run for medical device software repositories.
  tags:
  - medical-devices
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: get-build-status
      description: Check GitHub Actions workflow status.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository name.
      - name: run_id
        in: body
        type: string
        description: Workflow run ID.
      call: github.get-run
      with:
        repo: '{{repo}}'
        run_id: '{{run_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: conclusion
        type: string
        mapping: $.conclusion
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: runs
      path: /repos/bd/{{repo}}/actions/runs/{{run_id}}
      inputParameters:
      - name: repo
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → github-actions-build-status.yml

Orchestrates regulatory submissions by compiling documents from SharePoint, creating a submission record in Jira, notifying regulatory affairs via Microsoft Teams, and sending confirmation via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Regulatory Submission Orchestrator
  description: Orchestrates regulatory submissions by compiling documents from SharePoint, creating a submission record in Jira, notifying regulatory affairs via Microsoft Teams, and sending confirmation via Microsoft Outlook.
  tags:
  - medical-devices
  - sharepoint
  - jira
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: reg-submit
    port: 8080
    tools:
    - name: submit-regulatory-package
      description: Orchestrate regulatory submission package preparation.
      inputParameters:
      - name: submission_type
        in: body
        type: string
        description: 510(k), PMA, or De Novo.
      - name: product_code
        in: body
        type: string
        description: Product code.
      steps:
      - name: create-record
        type: call
        call: jira.create-issue
        with:
          project: REG
          summary: '{{submission_type}} Submission: {{product_code}}'
          issue_type: Epic
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_affairs
          text: 'Regulatory submission initiated: {{submission_type}} for {{product_code}}. Tracking: {{create-record.issue_key}}.'
      - name: confirm-stakeholders
        type: call
        call: outlook.send-email
        with:
          to: regulatory-team@bd.com
          subject: '{{submission_type}} Submission Initiated: {{product_code}}'
          body: 'Submission tracking: {{create-record.issue_key}}. Please ensure all documents are uploaded to SharePoint.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → regulatory-submission-orchestrator.yml

Manages employee safety training by assigning courses in Workday, creating tracking tasks in Jira, and notifying EHS via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Safety Training Pipeline
  description: Manages employee safety training by assigning courses in Workday, creating tracking tasks in Jira, and notifying EHS via Microsoft Teams.
  tags:
  - medical-devices
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: safety-training
    port: 8080
    tools:
    - name: assign-safety-training
      description: Orchestrate safety training assignment.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Employee ID.
      - name: course_name
        in: body
        type: string
        description: Safety course name.
      steps:
      - name: assign-course
        type: call
        call: workday.assign-training
        with:
          employee_id: '{{employee_id}}'
          course: '{{course_name}}'
      - name: create-tracking
        type: call
        call: jira.create-issue
        with:
          project: EHS
          summary: 'Safety training: {{employee_id}} - {{course_name}}'
          issue_type: Task
      - name: notify-ehs
        type: call
        call: msteams.send-message
        with:
          channel_id: ehs
          text: 'Safety training assigned: {{employee_id}} - {{course_name}}. Tracking: {{create-tracking.issue_key}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bd
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /workers/{{employee_id}}/training
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: assign-training
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-safety-training-pipeline.yml

Looks up goods receipt status in SAP for inbound materials and components.

naftiko: '0.5'
info:
  label: SAP Goods Receipt Lookup
  description: Looks up goods receipt status in SAP for inbound materials and components.
  tags:
  - medical-devices
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sap
    port: 8080
    tools:
    - name: get-goods-receipt
      description: Look up goods receipt in SAP.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: Purchase order number.
      call: sap.get-gr
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: receipt_date
        type: string
        mapping: $.d.PostingDate
      - name: quantity
        type: number
        mapping: $.d.Quantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: goods-receipts
      path: /API_GOODS_RECEIPT_SRV/GoodsReceipt(PurchaseOrder='{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-gr
        method: GET
Open in Framework → View in Fleet → sap-goods-receipt-lookup.yml

Queries Datadog for health status of BD IT services.

naftiko: '0.5'
info:
  label: Datadog Service Health Monitor
  description: Queries Datadog for health status of BD IT services.
  tags:
  - monitoring
  - devops
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: service-health
    port: 8080
    tools:
    - name: get-service-health
      description: Check service health in Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Service name.
      call: datadog.get-service-status
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.overall_state
      - name: uptime_pct
        type: number
        mapping: $.uptime_percentage
  consumes:
  - 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: monitors
      path: /monitor/search?query=service:{{service_name}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-status
        method: GET
Open in Framework → View in Fleet → datadog-service-health-monitor.yml

Triggers a Power Automate flow for automated medical device business processes.

naftiko: '0.5'
info:
  label: Microsoft Power Automate Flow Trigger
  description: Triggers a Power Automate flow for automated medical device business processes.
  tags:
  - automation
  - microsoft-power-automate
capability:
  exposes:
  - type: mcp
    namespace: workflow-automation
    port: 8080
    tools:
    - name: trigger-flow
      description: Trigger a Power Automate flow.
      inputParameters:
      - name: flow_id
        in: body
        type: string
        description: Flow ID.
      - name: payload
        in: body
        type: object
        description: Input payload.
      call: power-automate.trigger-flow
      with:
        flow_id: '{{flow_id}}'
        body: '{{payload}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: power-automate
    baseUri: https://api.flow.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.power_automate_token
    resources:
    - name: flows
      path: /flows/{{flow_id}}/triggers/manual/run
      inputParameters:
      - name: flow_id
        in: path
      operations:
      - name: trigger-flow
        method: POST
Open in Framework → View in Fleet → microsoft-power-automate-flow-trigger.yml

Tracks patent filings by creating records in Jira, logging in Google Sheets, notifying legal via Microsoft Outlook, and alerting R&D via Microsoft Teams.

naftiko: '0.5'
info:
  label: Patent Filing Tracking Pipeline
  description: Tracks patent filings by creating records in Jira, logging in Google Sheets, notifying legal via Microsoft Outlook, and alerting R&D via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - google-sheets
  - microsoft-outlook
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: patent
    port: 8080
    tools:
    - name: track-patent-filing
      description: Orchestrate patent filing tracking.
      inputParameters:
      - name: invention_title
        in: body
        type: string
        description: Invention title.
      - name: inventors
        in: body
        type: string
        description: Inventor names.
      - name: filing_type
        in: body
        type: string
        description: Provisional or non-provisional.
      steps:
      - name: create-record
        type: call
        call: jira.create-issue
        with:
          project: IP
          summary: 'Patent: {{invention_title}} ({{filing_type}})'
          issue_type: Task
      - name: log-filing
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_patents
          data: '{{invention_title}},{{inventors}},{{filing_type}},{{create-record.issue_key}}'
      - name: notify-legal
        type: call
        call: outlook.send-email
        with:
          to: ip-legal@bd.com
          subject: 'Patent Filing: {{invention_title}}'
          body: 'Inventors: {{inventors}}. Type: {{filing_type}}. Tracking: {{create-record.issue_key}}.'
      - name: notify-rd
        type: call
        call: msteams.send-message
        with:
          channel_id: research_development
          text: 'Patent filing: {{invention_title}} by {{inventors}}. Type: {{filing_type}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patent-filing-tracking-pipeline.yml

Manages manufacturing process validation by creating protocols in Jira, recording results in Google Sheets, refreshing the Power BI validation dashboard, and notifying the validation team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Process Validation Protocol Pipeline
  description: Manages manufacturing process validation by creating protocols in Jira, recording results in Google Sheets, refreshing the Power BI validation dashboard, and notifying the validation team via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - google-sheets
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: process-val
    port: 8080
    tools:
    - name: execute-process-validation
      description: Orchestrate process validation protocol.
      inputParameters:
      - name: process_name
        in: body
        type: string
        description: Manufacturing process name.
      - name: protocol_type
        in: body
        type: string
        description: IQ, OQ, or PQ.
      - name: result
        in: body
        type: string
        description: Pass or fail.
      steps:
      - name: update-protocol
        type: call
        call: jira.create-issue
        with:
          project: VAL
          summary: 'Process {{protocol_type}}: {{process_name}} - {{result}}'
          issue_type: Task
      - name: record-results
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_process_validation
          data: '{{process_name}},{{protocol_type}},{{result}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: bd_validation_tracker
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: validation
          text: 'Process validation {{protocol_type}} for {{process_name}}: {{result}}. Task: {{update-protocol.issue_key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        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_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → process-validation-protocol-pipeline.yml

Generates monthly management review data by querying Snowflake for quality KPIs, refreshing Power BI dashboards, compiling reports in SharePoint, and distributing via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Monthly Management Review Pipeline
  description: Generates monthly management review data by querying Snowflake for quality KPIs, refreshing Power BI dashboards, compiling reports in SharePoint, and distributing via Microsoft Outlook.
  tags:
  - medical-devices
  - snowflake
  - power-bi
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: mgmt-review
    port: 8080
    tools:
    - name: generate-review-package
      description: Orchestrate monthly management review preparation.
      inputParameters:
      - name: month
        in: body
        type: string
        description: Review month.
      steps:
      - name: get-kpis
        type: call
        call: snowflake.get-quality-kpis
        with:
          month: '{{month}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: bd_quality_review
      - name: distribute-report
        type: call
        call: outlook.send-email
        with:
          to: leadership@bd.com
          subject: Monthly Management Review Data - {{month}}
          body: 'CAPA count: {{get-kpis.capa_count}}. Complaints: {{get-kpis.complaint_count}}. OEE: {{get-kpis.oee}}%. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-quality-kpis
        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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → monthly-management-review-pipeline.yml

Manages biocompatibility testing by creating test protocols in Jira, logging results in Google Sheets, uploading reports to SharePoint, and notifying the biocompatibility team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Biocompatibility Testing Pipeline
  description: Manages biocompatibility testing by creating test protocols in Jira, logging results in Google Sheets, uploading reports to SharePoint, and notifying the biocompatibility team via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - google-sheets
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: biocompat
    port: 8080
    tools:
    - name: process-biocompat-test
      description: Orchestrate biocompatibility testing workflow.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: test_type
        in: body
        type: string
        description: ISO 10993 test type.
      - name: result
        in: body
        type: string
        description: Pass or fail.
      steps:
      - name: log-results
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_biocompat
          data: '{{product_code}},{{test_type}},{{result}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: BIOCOMP
          summary: 'Biocompatibility {{test_type}}: {{product_code}} - {{result}}'
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: biocompatibility
          text: 'Biocompatibility {{test_type}} for {{product_code}}: {{result}}. Task: {{create-task.issue_key}}.'
  consumes:
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → biocompatibility-testing-pipeline.yml

Looks up a user in Azure Active Directory by UPN, returning profile and department details.

naftiko: '0.5'
info:
  label: Azure Active Directory User Lookup
  description: Looks up a user in Azure Active Directory by UPN, returning profile and department details.
  tags:
  - medical-devices
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: aad
    port: 8080
    tools:
    - name: lookup-user
      description: Look up user in Azure AD.
      inputParameters:
      - name: upn
        in: body
        type: string
        description: User principal name.
      call: aad.get-user
      with:
        upn: '{{upn}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.displayName
      - name: department
        type: string
        mapping: $.department
  consumes:
  - type: http
    namespace: aad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → azure-active-directory-user-lookup.yml

When a device recall is issued, creates an urgent ServiceNow incident, sends a Salesforce notification to affected hospital accounts, alerts the regulatory team in Microsoft Teams, and uploads the recall notice to SharePoint.

naftiko: '0.5'
info:
  label: Medical Device Recall Notification Pipeline
  description: When a device recall is issued, creates an urgent ServiceNow incident, sends a Salesforce notification to affected hospital accounts, alerts the regulatory team in Microsoft Teams, and uploads the recall notice to SharePoint.
  tags:
  - regulatory
  - medical-devices
  - recall
  - servicenow
  - salesforce
  - microsoft-teams
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: device-recall
    port: 8080
    tools:
    - name: initiate-recall
      description: Execute a medical device recall notification across all systems.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: Product ID being recalled.
      - name: recall_class
        in: body
        type: string
        description: FDA recall class such as I, II, or III.
      - name: reason
        in: body
        type: string
        description: Recall reason.
      - name: lot_numbers
        in: body
        type: array
        description: Affected lot numbers.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'RECALL: Product {{product_id}} - Class {{recall_class}}'
          category: recall
          urgency: '1'
          description: '{{reason}} | Lots: {{lot_numbers}}'
      - name: notify-accounts
        type: call
        call: salesforce.create-mass-notification
        with:
          product_id: '{{product_id}}'
          notification_type: recall
          message: 'Recall notice for product {{product_id}}: {{reason}}. Affected lots: {{lot_numbers}}.'
      - name: upload-notice
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory_affairs
          folder_path: Recalls/{{product_id}}
          file_name: recall_notice_{{product_id}}.pdf
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_urgent
          text: 'URGENT RECALL: Product {{product_id}}, Class {{recall_class}}. Reason: {{reason}}. {{notify-accounts.accounts_notified}} accounts notified. Incident: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bd.service-now.com/api/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://bd.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: notifications
      path: /sobjects/Recall_Notification__c
      operations:
      - name: create-mass-notification
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-device-recall-notification-pipeline.yml

Manages design control document reviews by uploading documents to SharePoint, creating review tasks in Jira, and notifying the design team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Design Control Document Review Pipeline
  description: Manages design control document reviews by uploading documents to SharePoint, creating review tasks in Jira, and notifying the design team via Microsoft Teams.
  tags:
  - medical-devices
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: design-review
    port: 8080
    tools:
    - name: submit-design-document
      description: Orchestrate design control document review.
      inputParameters:
      - name: document_title
        in: body
        type: string
        description: Document title.
      - name: document_type
        in: body
        type: string
        description: DHF, DMR, or DHR.
      - name: product_code
        in: body
        type: string
        description: Product code.
      steps:
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: DESIGN
          summary: 'Review {{document_type}}: {{document_title}}'
          issue_type: Task
      - name: notify-design-team
        type: call
        call: msteams.send-message
        with:
          channel_id: design_engineering
          text: 'Design document review: {{document_title}} ({{document_type}}) for {{product_code}}. Review task: {{create-review-task.issue_key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → design-control-document-review-pipeline.yml

Orchestrates a new medical device product launch by creating the product in SAP, registering with the FDA reporting system, training sales via Salesforce, and notifying stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: New Product Launch Orchestrator
  description: Orchestrates a new medical device product launch by creating the product in SAP, registering with the FDA reporting system, training sales via Salesforce, and notifying stakeholders via Microsoft Teams.
  tags:
  - medical-devices
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: launch-product
      description: Orchestrate new medical device product launch.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Product name.
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: fda_class
        in: body
        type: string
        description: FDA device class.
      steps:
      - name: create-sap-product
        type: call
        call: sap.create-material
        with:
          material_name: '{{product_name}}'
          material_code: '{{product_code}}'
      - name: update-salesforce
        type: call
        call: salesforce.create-product
        with:
          name: '{{product_name}}'
          product_code: '{{product_code}}'
          family: Medical Devices
      - name: create-training
        type: call
        call: salesforce.create-campaign
        with:
          name: 'Launch Training: {{product_name}}'
          type: Product Launch
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          channel_id: product_launches
          text: 'New product launched: {{product_name}} ({{product_code}}). FDA Class: {{fda_class}}. SAP material created. Sales training campaign initiated.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: materials
      path: /API_MATERIAL_SRV/Material
      operations:
      - name: create-material
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://bd.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: products
      path: /sobjects/Product2
      operations:
      - name: create-product
        method: POST
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-product-launch-orchestrator.yml

Schedules a supplier quality audit, creates the audit record in the QMS, generates an audit plan document in SharePoint, and notifies the supplier quality team.

naftiko: '0.5'
info:
  label: Supplier Quality Audit Pipeline
  description: Schedules a supplier quality audit, creates the audit record in the QMS, generates an audit plan document in SharePoint, and notifies the supplier quality team.
  tags:
  - quality
  - procurement
  - medical-devices
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-audits
    port: 8080
    tools:
    - name: schedule-supplier-audit
      description: Create and distribute a supplier quality audit plan.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: Vendor ID.
      - name: vendor_name
        in: body
        type: string
        description: Vendor name.
      - name: audit_date
        in: body
        type: string
        description: Planned audit date.
      - name: audit_type
        in: body
        type: string
        description: Audit type such as initial, periodic, or for_cause.
      steps:
      - name: create-audit
        type: call
        call: qms.create-audit
        with:
          vendor_id: '{{vendor_id}}'
          type: '{{audit_type}}'
          scheduled_date: '{{audit_date}}'
      - name: upload-plan
        type: call
        call: sharepoint.upload-file
        with:
          site_id: supplier_quality
          folder_path: Audits/{{vendor_name}}
          file_name: audit_plan_{{audit_date}}.pdf
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supplier_quality
          text: 'Supplier audit scheduled: {{vendor_name}} ({{audit_type}}) on {{audit_date}}. Audit ID: {{create-audit.audit_id}}.'
  consumes:
  - type: http
    namespace: qms
    baseUri: https://qms.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qms_token
    resources:
    - name: audits
      path: /audits
      operations:
      - name: create-audit
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-quality-audit-pipeline.yml

Retrieves a secret from Azure Key Vault for use in automated workflows.

naftiko: '0.5'
info:
  label: Azure Key Vault Secret Retriever
  description: Retrieves a secret from Azure Key Vault for use in automated workflows.
  tags:
  - security
  - azure-key-vault
capability:
  exposes:
  - type: mcp
    namespace: secrets
    port: 8080
    tools:
    - name: get-secret
      description: Retrieve a secret from Azure Key Vault.
      inputParameters:
      - name: secret_name
        in: body
        type: string
        description: Secret name.
      call: keyvault.get-secret
      with:
        secret_name: '{{secret_name}}'
      outputParameters:
      - name: value
        type: string
        mapping: $.value
  consumes:
  - type: http
    namespace: keyvault
    baseUri: https://bd-vault.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}?api-version=7.4
      inputParameters:
      - name: secret_name
        in: path
      operations:
      - name: get-secret
        method: GET
Open in Framework → View in Fleet → azure-key-vault-secret-retriever.yml

When a BD medical device is installed at a hospital, records the installation in Salesforce, creates a ServiceNow configuration item, and notifies the field service team.

naftiko: '0.5'
info:
  label: Device Installation Tracker
  description: When a BD medical device is installed at a hospital, records the installation in Salesforce, creates a ServiceNow configuration item, and notifies the field service team.
  tags:
  - medical-devices
  - field-service
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: device-install
    port: 8080
    tools:
    - name: record-installation
      description: Record a device installation across CRM, CMDB, and field service systems.
      inputParameters:
      - name: device_serial
        in: body
        type: string
        description: Device serial number.
      - name: hospital_account_id
        in: body
        type: string
        description: Salesforce hospital account ID.
      - name: install_date
        in: body
        type: string
        description: Installation date.
      steps:
      - name: create-asset
        type: call
        call: salesforce.create-asset
        with:
          serial_number: '{{device_serial}}'
          account_id: '{{hospital_account_id}}'
          install_date: '{{install_date}}'
      - name: create-ci
        type: call
        call: servicenow.create-ci
        with:
          name: '{{device_serial}}'
          serial_number: '{{device_serial}}'
          install_date: '{{install_date}}'
      - name: notify-field
        type: call
        call: msteams.send-message
        with:
          channel_id: field_service
          text: 'Device {{device_serial}} installed at account {{hospital_account_id}} on {{install_date}}. Asset: {{create-asset.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bd.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: assets
      path: /sobjects/Asset
      operations:
      - name: create-asset
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bd.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: create-ci
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → device-installation-tracker.yml

Processes manufacturing deviations by creating investigation records in Jira, logging in Google Sheets, uploading investigation reports to SharePoint, and notifying QA via Microsoft Teams.

naftiko: '0.5'
info:
  label: Deviation Investigation Pipeline
  description: Processes manufacturing deviations by creating investigation records in Jira, logging in Google Sheets, uploading investigation reports to SharePoint, and notifying QA via Microsoft Teams.
  tags:
  - medical-devices
  - jira
  - google-sheets
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: deviation
    port: 8080
    tools:
    - name: report-deviation
      description: Orchestrate manufacturing deviation investigation.
      inputParameters:
      - name: deviation_type
        in: body
        type: string
        description: Deviation type.
      - name: description
        in: body
        type: string
        description: Deviation description.
      - name: line_id
        in: body
        type: string
        description: Production line ID.
      steps:
      - name: create-investigation
        type: call
        call: jira.create-issue
        with:
          project: DEV
          summary: 'Deviation: {{deviation_type}} on {{line_id}}'
          description: '{{description}}'
          issue_type: Bug
      - name: log-deviation
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_deviations
          data: '{{create-investigation.issue_key}},{{deviation_type}},{{line_id}}'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_assurance
          text: 'Deviation: {{deviation_type}} on line {{line_id}}. Investigation: {{create-investigation.issue_key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.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: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → deviation-investigation-pipeline.yml

Retrieves a document from a SharePoint site.

naftiko: '0.5'
info:
  label: SharePoint Document Retrieval
  description: Retrieves a document from a SharePoint site.
  tags:
  - collaboration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: documents
    port: 8080
    tools:
    - name: get-document
      description: Retrieve a document from SharePoint.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Site ID.
      - name: file_path
        in: body
        type: string
        description: File path.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        file_path: '{{file_path}}'
      outputParameters:
      - name: download_url
        type: string
        mapping: $.@microsoft.graph.downloadUrl
      - name: last_modified
        type: string
        mapping: $.lastModifiedDateTime
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-document-retrieval.yml

Triggers a reload of a Qlik Sense manufacturing analytics dashboard to refresh with latest production data.

naftiko: '0.5'
info:
  label: Qlik Sense Manufacturing Dashboard Reload
  description: Triggers a reload of a Qlik Sense manufacturing analytics dashboard to refresh with latest production data.
  tags:
  - medical-devices
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: qlik
    port: 8080
    tools:
    - name: reload-dashboard
      description: Trigger a Qlik Sense dashboard reload.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: Qlik Sense app ID.
      call: qlik.reload-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: reload_id
        type: string
        mapping: $.id
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://qlik.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: reloads
      path: /reloads
      operations:
      - name: reload-app
        method: POST
Open in Framework → View in Fleet → qlik-sense-manufacturing-dashboard-reload.yml

Retrieves the current location, quantity, and expiration date for a medical device lot in the warehouse management system.

naftiko: '0.5'
info:
  label: Inventory Lot Tracking Lookup
  description: Retrieves the current location, quantity, and expiration date for a medical device lot in the warehouse management system.
  tags:
  - inventory
  - manufacturing
  - medical-devices
  - wms
capability:
  exposes:
  - type: mcp
    namespace: lot-tracking
    port: 8080
    tools:
    - name: get-lot-details
      description: Look up lot details including location, quantity, and expiration.
      inputParameters:
      - name: lot_number
        in: body
        type: string
        description: Lot number.
      call: wms.get-lot
      with:
        lot_number: '{{lot_number}}'
      outputParameters:
      - name: location
        type: string
        mapping: $.lot.warehouse_location
      - name: quantity
        type: number
        mapping: $.lot.quantity_on_hand
      - name: expiration_date
        type: string
        mapping: $.lot.expiration_date
      - name: status
        type: string
        mapping: $.lot.quality_status
  consumes:
  - type: http
    namespace: wms
    baseUri: https://wms.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.wms_token
    resources:
    - name: lots
      path: /lots/{{lot_number}}
      inputParameters:
      - name: lot_number
        in: path
      operations:
      - name: get-lot
        method: GET
Open in Framework → View in Fleet → inventory-lot-tracking-lookup.yml

Processes incoming raw material inspections by checking specs in SAP, recording results in Google Sheets, creating disposition tasks in Jira, and notifying QC via Microsoft Teams.

naftiko: '0.5'
info:
  label: Raw Material Incoming Inspection Pipeline
  description: Processes incoming raw material inspections by checking specs in SAP, recording results in Google Sheets, creating disposition tasks in Jira, and notifying QC via Microsoft Teams.
  tags:
  - medical-devices
  - sap
  - google-sheets
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incoming-inspect
    port: 8080
    tools:
    - name: inspect-incoming-material
      description: Orchestrate incoming raw material inspection.
      inputParameters:
      - name: material_code
        in: body
        type: string
        description: Material code.
      - name: lot_number
        in: body
        type: string
        description: Supplier lot number.
      - name: result
        in: body
        type: string
        description: Pass or fail.
      steps:
      - name: check-specs
        type: call
        call: sap.get-material-spec
        with:
          material_code: '{{material_code}}'
      - name: record-results
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_incoming_inspection
          data: '{{material_code}},{{lot_number}},{{result}}'
      - name: create-disposition
        type: call
        call: jira.create-issue
        with:
          project: QC
          summary: 'Incoming inspection: {{material_code}} Lot {{lot_number}} - {{result}}'
          issue_type: Task
      - name: notify-qc
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_control
          text: 'Incoming inspection: {{material_code}} Lot {{lot_number}}: {{result}}. Disposition: {{create-disposition.issue_key}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: materials
      path: /API_MATERIAL_SRV/Material('{{material_code}}')
      inputParameters:
      - name: material_code
        in: path
      operations:
      - name: get-material-spec
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bd.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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → raw-material-incoming-inspection-pipeline.yml

Retrieves calendar events from Microsoft Outlook for scheduling quality reviews and regulatory meetings.

naftiko: '0.5'
info:
  label: Microsoft Outlook Calendar Events
  description: Retrieves calendar events from Microsoft Outlook for scheduling quality reviews and regulatory meetings.
  tags:
  - medical-devices
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: outlook
    port: 8080
    tools:
    - name: get-calendar-events
      description: Retrieve Outlook calendar events.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: end_date
        in: body
        type: string
        description: End date.
      call: outlook.list-events
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: events
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: calendar
      path: /me/calendarView
      operations:
      - name: list-events
        method: GET
Open in Framework → View in Fleet → microsoft-outlook-calendar-events.yml

Appends a row to a Google Sheets spreadsheet.

naftiko: '0.5'
info:
  label: Google Sheets Logger
  description: Appends a row to a Google Sheets spreadsheet.
  tags:
  - productivity
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: sheets-logger
    port: 8080
    tools:
    - name: append-row
      description: Append a row to Google Sheets.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: Spreadsheet ID.
      - name: range
        in: body
        type: string
        description: Range.
      - name: values
        in: body
        type: array
        description: Values.
      call: gsheets.append-row
      with:
        spreadsheet_id: '{{spreadsheet_id}}'
        range: '{{range}}'
        values: '{{values}}'
  consumes:
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → google-sheets-logger.yml

Manages lot release testing by verifying test results in Snowflake, updating batch status in SAP, logging the release in Google Sheets, and notifying QA via Microsoft Teams.

naftiko: '0.5'
info:
  label: Lot Release Testing Pipeline
  description: Manages lot release testing by verifying test results in Snowflake, updating batch status in SAP, logging the release in Google Sheets, and notifying QA via Microsoft Teams.
  tags:
  - medical-devices
  - snowflake
  - sap
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lot-release
    port: 8080
    tools:
    - name: process-lot-release
      description: Orchestrate lot release testing and approval.
      inputParameters:
      - name: lot_number
        in: body
        type: string
        description: Lot number.
      - name: product_code
        in: body
        type: string
        description: Product code.
      steps:
      - name: verify-tests
        type: call
        call: snowflake.get-lot-results
        with:
          lot_number: '{{lot_number}}'
      - name: update-sap
        type: call
        call: sap.release-batch
        with:
          lot_number: '{{lot_number}}'
          product_code: '{{product_code}}'
          status: '{{verify-tests.pass_fail}}'
      - name: log-release
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bd_lot_releases
          data: '{{lot_number}},{{product_code}},{{verify-tests.pass_fail}}'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_assurance
          text: 'Lot {{lot_number}} ({{product_code}}): {{verify-tests.pass_fail}}. Tests: {{verify-tests.test_count}} complete.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bd.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-lot-results
        method: POST
  - type: http
    namespace: sap
    baseUri: https://sap.bd.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: batches
      path: /API_BATCH_SRV/Batch
      operations:
      - name: release-batch
        method: PATCH
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → lot-release-testing-pipeline.yml

Queries SolarWinds for network device status and uptime across BD facilities.

naftiko: '0.5'
info:
  label: SolarWinds Network Device Monitor
  description: Queries SolarWinds for network device status and uptime across BD facilities.
  tags:
  - monitoring
  - networking
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: network-monitoring
    port: 8080
    tools:
    - name: get-node-status
      description: Retrieve network node status from SolarWinds.
      inputParameters:
      - name: node_id
        in: body
        type: string
        description: SolarWinds node ID.
      call: solarwinds.get-node
      with:
        node_id: '{{node_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: response_time
        type: number
        mapping: $.ResponseTime
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.bd.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query?query=SELECT+*+FROM+Orion.Nodes+WHERE+NodeID={{node_id}}
      inputParameters:
      - name: node_id
        in: path
      operations:
      - name: get-node
        method: GET
Open in Framework → View in Fleet → solarwinds-network-device-monitor.yml

When a new medical device is ready for market, creates the regulatory submission in the compliance system, uploads documentation to SharePoint, notifies the regulatory affairs team in Microsoft Teams, and creates a Jira tracking issue for the submission lifecycle.

naftiko: '0.5'
info:
  label: Medical Device Product Registration Orchestrator
  description: When a new medical device is ready for market, creates the regulatory submission in the compliance system, uploads documentation to SharePoint, notifies the regulatory affairs team in Microsoft Teams, and creates a Jira tracking issue for the submission lifecycle.
  tags:
  - regulatory
  - medical-devices
  - compliance
  - sharepoint
  - microsoft-teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: initiate-device-registration
      description: Orchestrate a medical device regulatory submission across compliance, documentation, and tracking systems.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Internal device product ID.
      - name: device_name
        in: body
        type: string
        description: Device commercial name.
      - name: submission_type
        in: body
        type: string
        description: Type such as 510k, PMA, or CE_Mark.
      - name: target_market
        in: body
        type: string
        description: Target market region such as US, EU, or APAC.
      steps:
      - name: create-submission
        type: call
        call: regulatory.create-submission
        with:
          device_id: '{{device_id}}'
          submission_type: '{{submission_type}}'
          market: '{{target_market}}'
      - name: upload-docs
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory_affairs
          folder_path: Submissions/{{device_id}}/{{submission_type}}
          file_name: submission_package_{{device_id}}.pdf
      - name: create-tracker
        type: call
        call: jira.create-issue
        with:
          project: REG
          issue_type: Epic
          summary: '{{submission_type}} submission: {{device_name}} for {{target_market}}'
          description: 'Submission ID: {{create-submission.submission_id}}. Documentation: {{upload-docs.url}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_affairs
          text: 'New {{submission_type}} submission initiated for {{device_name}} ({{target_market}}). Tracking: {{create-tracker.key}}. Submission ID: {{create-submission.submission_id}}.'
  consumes:
  - type: http
    namespace: regulatory
    baseUri: https://regulatory.bd.com/api/v1
    authentication:
      type: bearer
      token: $secrets.regulatory_token
    resources:
    - name: submissions
      path: /submissions
      operations:
      - name: create-submission
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://bd.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-device-product-registration-orchestrator.yml

Checks the health status of a Cisco network device in the manufacturing facility network.

naftiko: '0.5'
info:
  label: Cisco Network Device Health
  description: Checks the health status of a Cisco network device in the manufacturing facility network.
  tags:
  - medical-devices
  - cisco
capability:
  exposes:
  - type: mcp
    namespace: cisco
    port: 8080
    tools:
    - name: get-device-health
      description: Check Cisco network device health.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Device ID.
      call: cisco.get-device
      with:
        device_id: '{{device_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.response.reachabilityStatus
      - name: uptime
        type: string
        mapping: $.response.upTime
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://cisco-dnac.bd.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_token
    resources:
    - name: devices
      path: /network-device/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → cisco-network-device-health.yml

Creates a Zendesk support ticket for field service on installed medical devices at customer sites.

naftiko: '0.5'
info:
  label: Zendesk Field Service Ticket Creator
  description: Creates a Zendesk support ticket for field service on installed medical devices at customer sites.
  tags:
  - customer-service
  - zendesk
  - medical-devices
capability:
  exposes:
  - type: mcp
    namespace: field-service
    port: 8080
    tools:
    - name: create-service-ticket
      description: Create a field service ticket for a medical device issue.
      inputParameters:
      - name: hospital_name
        in: body
        type: string
        description: Hospital name.
      - name: device_serial
        in: body
        type: string
        description: Device serial number.
      - name: issue_description
        in: body
        type: string
        description: Issue description.
      - name: priority
        in: body
        type: string
        description: Priority level.
      call: zendesk.create-ticket
      with:
        subject: 'Field service: {{device_serial}} at {{hospital_name}}'
        description: '{{issue_description}}'
        priority: '{{priority}}'
        tags:
        - field_service
        - medical_device
      outputParameters:
      - name: ticket_id
        type: string
        mapping: $.ticket.id
      - name: ticket_url
        type: string
        mapping: $.ticket.url
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://bd.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets
      operations:
      - name: create-ticket
        method: POST
Open in Framework → View in Fleet → zendesk-field-service-ticket-creator.yml

Retrieves the status, assignee, and due date of a Jira issue.

naftiko: '0.5'
info:
  label: Jira Issue Status Lookup
  description: Retrieves the status, assignee, and due date of a Jira issue.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: project-tracking
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: 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: due_date
        type: string
        mapping: $.fields.duedate
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bd.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-status-lookup.yml

Queries Datadog for average API response latency over a specified time range for Boston Scientific integration endpoints.

naftiko: '0.5'
info:
  label: Datadog API Latency Check
  description: Queries Datadog for average API response latency over a specified time range for Boston Scientific integration endpoints.
  tags:
  - engineering
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: api-monitoring
    port: 8080
    tools:
    - name: check-api-latency
      description: Query Datadog for API latency metrics by service name.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The API service name in Datadog.
      - name: time_range
        in: body
        type: string
        description: Time window (e.g., 1h, 24h).
      call: datadog.query-metrics
      with:
        query: avg:trace.http.request.duration{service:{{service_name}}}
        from: now-{{time_range}}
        to: now
      outputParameters:
      - name: avg_latency_ms
        type: number
        mapping: $.series[0].pointlist[-1][1]
      - name: max_latency_ms
        type: number
        mapping: $.series[0].pointlist[-1][2]
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-api-latency-check.yml

Exports clinical data from Databricks, archives it to Amazon S3, and logs the archive record in ServiceNow for regulatory compliance.

naftiko: '0.5'
info:
  label: Clinical Data Export and Archive Pipeline
  description: Exports clinical data from Databricks, archives it to Amazon S3, and logs the archive record in ServiceNow for regulatory compliance.
  tags:
  - clinical
  - data-archival
  - databricks
  - amazon-s3
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: clinical-archive
    port: 8080
    tools:
    - name: export-and-archive-clinical-data
      description: Export clinical data from Databricks, archive to S3, and log in ServiceNow.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: export_date
        in: body
        type: string
        description: Export date in YYYY-MM-DD.
      steps:
      - name: export-data
        type: call
        call: databricks.run-job
        with:
          job_id: clinical_data_export
          study_id: '{{study_id}}'
          export_date: '{{export_date}}'
      - name: archive-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: bsci-clinical-archive
          key: '{{study_id}}/{{export_date}}/clinical_export.parquet'
      - name: log-archive
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_data_archive
          short_description: Clinical data archive — {{study_id}} — {{export_date}}
          description: 'Study: {{study_id}}. Export date: {{export_date}}. S3 path: s3://bsci-clinical-archive/{{study_id}}/{{export_date}}/. Job: {{export-data.run_id}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://bsci.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: s3
    baseUri: https://bsci-clinical-archive.s3.amazonaws.com
    authentication:
      type: apiKey
      key: $secrets.aws_access_key
    resources:
    - name: objects
      path: /{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → clinical-data-export-and-archive-pipeline.yml

Queries Workday learning records for an employee, cross-references required training for their role from ServiceNow, identifies gaps, and alerts the employee and their manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Training Compliance Checker
  description: Queries Workday learning records for an employee, cross-references required training for their role from ServiceNow, identifies gaps, and alerts the employee and their manager via Microsoft Teams.
  tags:
  - compliance
  - training
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: training-compliance
    port: 8080
    tools:
    - name: check-training-compliance
      description: Given an employee ID and role, verify training completeness against required curricula and notify on gaps.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: role_code
        in: body
        type: string
        description: The role code for required training lookup.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: get-completed-training
        type: call
        call: workday.get-learning
        with:
          worker_id: '{{employee_id}}'
      - name: get-required-training
        type: call
        call: servicenow.get-required-training
        with:
          role_code: '{{role_code}}'
      - name: notify-gaps
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Training compliance check: {{get-completed-training.completed_count}} of {{get-required-training.total_required}} required courses completed for role {{role_code}}. Please review outstanding items.'
  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
    - name: learning
      path: /workers/{{worker_id}}/learningEnrollments
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-learning
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: training-requirements
      path: /table/x_bsci_training_req
      inputParameters:
      - name: role_code
        in: query
        parameterName: sysparm_query
      operations:
      - name: get-required-training
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → training-compliance-checker.yml

Retrieves a SAP S/4HANA production order status for a medical device manufacturing batch, returning order status, planned vs actual quantities, and scheduled completion date.

naftiko: '0.5'
info:
  label: SAP Production Order Status
  description: Retrieves a SAP S/4HANA production order status for a medical device manufacturing batch, returning order status, planned vs actual quantities, and scheduled completion date.
  tags:
  - manufacturing
  - production
  - sap
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: production
    port: 8080
    tools:
    - name: get-production-order
      description: Look up a SAP production order by number. Returns order status, material, planned quantity, actual quantity, and dates.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP production order number.
      call: sap.get-production-order
      with:
        order_number: '{{order_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OrderStatus
      - name: material
        type: string
        mapping: $.d.Material
      - name: planned_qty
        type: number
        mapping: $.d.PlannedTotalQuantity
      - name: actual_qty
        type: number
        mapping: $.d.ActualQuantity
      - name: finish_date
        type: string
        mapping: $.d.ScheduledFinishDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: production-orders
      path: /A_ProductionOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-production-order
        method: GET
Open in Framework → View in Fleet → sap-production-order-status.yml

Checks the latest Azure DevOps build for device firmware, retrieves test results, and posts a build quality summary to the software engineering team in Microsoft Teams for IEC 62304 traceability.

naftiko: '0.5'
info:
  label: Azure DevOps Firmware Build and Test Report
  description: Checks the latest Azure DevOps build for device firmware, retrieves test results, and posts a build quality summary to the software engineering team in Microsoft Teams for IEC 62304 traceability.
  tags:
  - software
  - ci-cd
  - azure-devops
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: report-build-status
      description: Get the latest build and test results for a firmware pipeline and notify the engineering team.
      inputParameters:
      - name: project
        in: body
        type: string
        description: The Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: The build pipeline definition ID.
      steps:
      - name: get-latest-build
        type: call
        call: azdo.get-build
        with:
          project: '{{project}}'
          definition_id: '{{pipeline_id}}'
      - name: get-test-results
        type: call
        call: azdo.get-test-runs
        with:
          project: '{{project}}'
          build_id: '{{get-latest-build.value[0].id}}'
      - name: notify-engineering
        type: call
        call: msteams.send-message
        with:
          channel_id: firmware-engineering
          text: 'Build {{get-latest-build.value[0].buildNumber}}: {{get-latest-build.value[0].result}}. Tests passed: {{get-test-results.passedTests}}/{{get-test-results.totalTests}}. Finished: {{get-latest-build.value[0].finishTime}}.'
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/bsci
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: project
        in: path
      - name: definition_id
        in: query
      operations:
      - name: get-build
        method: GET
    - name: test-runs
      path: /{{project}}/_apis/test/runs?buildUri={{build_id}}&api-version=7.0
      inputParameters:
      - name: project
        in: path
      - name: build_id
        in: query
      operations:
      - name: get-test-runs
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-devops-firmware-build-and-test-report.yml

Retrieves the signing status of a DocuSign envelope used for supplier agreements, clinical site contracts, or quality agreements at Boston Scientific.

naftiko: '0.5'
info:
  label: DocuSign Agreement Status
  description: Retrieves the signing status of a DocuSign envelope used for supplier agreements, clinical site contracts, or quality agreements at Boston Scientific.
  tags:
  - contracts
  - legal
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: contracts
    port: 8080
    tools:
    - name: get-envelope-status
      description: Look up a DocuSign envelope by ID. Returns signing status, recipients, and completion date.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope identifier.
      call: docusign.get-envelope
      with:
        envelope_id: '{{envelope_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: sent_date
        type: string
        mapping: $.sentDateTime
      - name: completed_date
        type: string
        mapping: $.completedDateTime
      - name: recipients_pending
        type: number
        mapping: $.recipientsPending
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/bsci-account
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes/{{envelope_id}}
      inputParameters:
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-agreement-status.yml

Retrieves a 510(k) premarket notification record from the regulatory document store in SharePoint, validates completeness against a checklist in ServiceNow, and notifies the regulatory affairs team in Microsoft Teams.

naftiko: '0.5'
info:
  label: FDA 510(k) Submission Tracker
  description: Retrieves a 510(k) premarket notification record from the regulatory document store in SharePoint, validates completeness against a checklist in ServiceNow, and notifies the regulatory affairs team in Microsoft Teams.
  tags:
  - regulatory
  - fda
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: track-510k-submission
      description: Given a submission ID, pull the 510(k) dossier from SharePoint, check completeness in ServiceNow, and alert the regulatory team in Teams.
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: The internal 510(k) submission tracking identifier.
      - name: product_code
        in: body
        type: string
        description: The FDA product code for the medical device.
      steps:
      - name: get-dossier
        type: call
        call: sharepoint.get-folder
        with:
          site_id: regulatory_submissions
          folder_path: 510k/{{submission_id}}
      - name: check-completeness
        type: call
        call: servicenow.get-checklist
        with:
          table: x_bsci_reg_checklist
          query: submission_id={{submission_id}}
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-affairs
          text: '510(k) {{submission_id}} (product code {{product_code}}): {{check-completeness.completed_items}}/{{check-completeness.total_items}} checklist items complete. Dossier: {{get-dossier.url}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: get-folder
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: checklists
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      - name: query
        in: query
      operations:
      - name: get-checklist
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fda-510-k-submission-tracker.yml

Checks the latest GitHub Actions workflow run status for device firmware repositories, returning build result, duration, and commit SHA.

naftiko: '0.5'
info:
  label: GitHub Actions Firmware Build Status
  description: Checks the latest GitHub Actions workflow run status for device firmware repositories, returning build result, duration, and commit SHA.
  tags:
  - software
  - ci-cd
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: firmware-ci
    port: 8080
    tools:
    - name: get-firmware-build
      description: Check the latest GitHub Actions workflow run for a firmware repository.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name (org/repo format).
      - name: workflow_id
        in: body
        type: string
        description: The workflow file name or ID.
      call: github.get-workflow-runs
      with:
        repo: '{{repo}}'
        workflow_id: '{{workflow_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.workflow_runs[0].status
      - name: conclusion
        type: string
        mapping: $.workflow_runs[0].conclusion
      - name: head_sha
        type: string
        mapping: $.workflow_runs[0].head_sha
      - name: run_url
        type: string
        mapping: $.workflow_runs[0].html_url
  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_id}}/runs?per_page=1
      inputParameters:
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
Open in Framework → View in Fleet → github-actions-firmware-build-status.yml

Retrieves code quality metrics from SonarQube for medical device software projects, returning bugs, vulnerabilities, code smells, and coverage percentage for IEC 62304 compliance evidence.

naftiko: '0.5'
info:
  label: SonarQube Code Quality Report
  description: Retrieves code quality metrics from SonarQube for medical device software projects, returning bugs, vulnerabilities, code smells, and coverage percentage for IEC 62304 compliance evidence.
  tags:
  - software
  - code-quality
  - sonarqube
capability:
  exposes:
  - type: mcp
    namespace: code-quality
    port: 8080
    tools:
    - name: get-code-quality
      description: Retrieve SonarQube project quality metrics by project key.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The SonarQube project key.
      call: sonarqube.get-measures
      with:
        component: '{{project_key}}'
        metric_keys: bugs,vulnerabilities,code_smells,coverage,duplicated_lines_density
      outputParameters:
      - name: measures
        type: array
        mapping: $.component.measures
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.bsci.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: measures
      path: /measures/component
      inputParameters:
      - name: component
        in: query
      - name: metric_keys
        in: query
        parameterName: metricKeys
      operations:
      - name: get-measures
        method: GET
Open in Framework → View in Fleet → sonarqube-code-quality-report.yml

Extracts quality data for contract manufacturers from SAP, pulls audit findings from Box, and creates a review summary in ServiceNow.

naftiko: '0.5'
info:
  label: Contract Manufacturer Quality Review Pipeline
  description: Extracts quality data for contract manufacturers from SAP, pulls audit findings from Box, and creates a review summary in ServiceNow.
  tags:
  - quality
  - contract-manufacturing
  - sap
  - box
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cm-quality-review
    port: 8080
    tools:
    - name: review-cm-quality
      description: Review contract manufacturer quality using SAP data and audit findings.
      inputParameters:
      - name: cm_vendor_number
        in: body
        type: string
        description: Contract manufacturer SAP vendor number.
      - name: audit_folder_id
        in: body
        type: string
        description: Box folder ID containing audit documents.
      steps:
      - name: get-quality-data
        type: call
        call: sap.get-vendor-quality
        with:
          vendor_number: '{{cm_vendor_number}}'
      - name: get-audit-docs
        type: call
        call: box.get-folder-items
        with:
          folder_id: '{{audit_folder_id}}'
      - name: create-review
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_cm_review
          short_description: CM Quality Review — {{cm_vendor_number}}
          description: 'Quality score: {{get-quality-data.score}}. Audit documents: {{get-audit-docs.total_count}} files.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_QUALITY_NOTIFICATION
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality
      path: /A_QualityNotification?$filter=Vendor eq '{{vendor_number}}'
      inputParameters:
      - name: vendor_number
        in: query
      operations:
      - name: get-vendor-quality
        method: GET
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders/{{folder_id}}/items
      inputParameters:
      - name: folder_id
        in: path
      operations:
      - name: get-folder-items
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → contract-manufacturer-quality-review-pipeline.yml

Triggers a firmware build in Azure DevOps, runs automated tests, and creates a release record in ServiceNow when tests pass.

naftiko: '0.5'
info:
  label: Device Software Release Pipeline
  description: Triggers a firmware build in Azure DevOps, runs automated tests, and creates a release record in ServiceNow when tests pass.
  tags:
  - r-and-d
  - software-release
  - azure-devops
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: software-release
    port: 8080
    tools:
    - name: trigger-software-release
      description: Build firmware, run tests, and create release record on success.
      inputParameters:
      - name: branch
        in: body
        type: string
        description: Git branch for the release build.
      - name: version
        in: body
        type: string
        description: Software version number.
      steps:
      - name: trigger-build
        type: call
        call: azdevops.queue-build
        with:
          definition_id: firmware_build
          source_branch: '{{branch}}'
      - name: create-release-record
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_sw_release
          short_description: Software release v{{version}}
          description: 'Branch: {{branch}}. Build: {{trigger-build.build_number}}. Status: {{trigger-build.status}}.'
  consumes:
  - type: http
    namespace: azdevops
    baseUri: https://dev.azure.com/bsci
    authentication:
      type: basic
      username: $secrets.azdevops_user
      password: $secrets.azdevops_pat
    resources:
    - name: builds
      path: /_apis/build/builds?api-version=7.0
      operations:
      - name: queue-build
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → device-software-release-pipeline.yml

Pulls the latest packaging specification from Box, creates a review task in Jira, and notifies the packaging engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Packaging Specification Review Workflow
  description: Pulls the latest packaging specification from Box, creates a review task in Jira, and notifies the packaging engineering team via Microsoft Teams.
  tags:
  - manufacturing
  - packaging
  - box
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: packaging-review
    port: 8080
    tools:
    - name: initiate-packaging-review
      description: Pull packaging spec from Box, create Jira review task, and notify team.
      inputParameters:
      - name: spec_file_id
        in: body
        type: string
        description: Box file ID for the packaging specification.
      - name: device_code
        in: body
        type: string
        description: The device product code.
      steps:
      - name: get-spec
        type: call
        call: box.get-file-info
        with:
          file_id: '{{spec_file_id}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: PKG
          issuetype: Task
          summary: Review packaging spec — {{get-spec.name}} — {{device_code}}
          description: 'Review the updated packaging specification: {{get-spec.shared_link.url}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: packaging_engineering
          text: 'New packaging spec review: {{get-spec.name}} for {{device_code}}. Jira: {{create-review-task.key}}. File: {{get-spec.shared_link.url}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file-info
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → packaging-specification-review-workflow.yml

Retrieves the latest AutoCAD drawing version from SharePoint, cross-references the associated Jira design control ticket for approval status, and notifies the design engineer in Microsoft Teams if the drawing is pending review.

naftiko: '0.5'
info:
  label: Drawing Version Audit and Notification
  description: Retrieves the latest AutoCAD drawing version from SharePoint, cross-references the associated Jira design control ticket for approval status, and notifies the design engineer in Microsoft Teams if the drawing is pending review.
  tags:
  - design-control
  - cad
  - autocad
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cad-management
    port: 8080
    tools:
    - name: audit-drawing-version
      description: Check drawing version in SharePoint, verify design control approval in Jira, and notify the engineer if review is pending.
      inputParameters:
      - name: drawing_number
        in: body
        type: string
        description: The AutoCAD drawing number or file name.
      - name: project_key
        in: body
        type: string
        description: The project key for the device development project.
      steps:
      - name: get-drawing
        type: call
        call: sharepoint.get-file-versions
        with:
          site_id: design_control
          file_path: Drawings/{{project_key}}/{{drawing_number}}.dwg
      - name: check-approval
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND issuetype = 'Drawing Approval' AND summary ~ '{{drawing_number}}' AND status != Approved
      - name: notify-engineer
        type: call
        call: msteams.send-message
        with:
          channel_id: design-engineering
          text: 'Drawing {{drawing_number}} v{{get-drawing.value[0].id}} by {{get-drawing.value[0].lastModifiedBy.user.displayName}}. Pending approvals: {{check-approval.total}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: file-versions
      path: /{{site_id}}/drive/root:/{{file_path}}:/versions
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file-versions
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → drawing-version-audit-and-notification.yml

Traces an implant serial number through SAP manufacturing records, retrieves the associated UDI from the GUDID database, and logs the audit in ServiceNow.

naftiko: '0.5'
info:
  label: Implant Serial Traceability Workflow
  description: Traces an implant serial number through SAP manufacturing records, retrieves the associated UDI from the GUDID database, and logs the audit in ServiceNow.
  tags:
  - manufacturing
  - traceability
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: implant-traceability
    port: 8080
    tools:
    - name: trace-implant-serial
      description: Trace an implant serial number through manufacturing and UDI records.
      inputParameters:
      - name: serial_number
        in: body
        type: string
        description: The implant serial number.
      steps:
      - name: get-mfg-record
        type: call
        call: sap.get-serial-record
        with:
          serial_number: '{{serial_number}}'
      - name: get-udi
        type: call
        call: gudid.lookup-device
        with:
          di: '{{get-mfg-record.device_identifier}}'
      - name: log-audit
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_audit_trail
          short_description: Traceability audit — SN {{serial_number}}
          description: 'Serial: {{serial_number}}, UDI: {{get-udi.udi}}, Lot: {{get-mfg-record.lot_number}}, Mfg Date: {{get-mfg-record.production_date}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_SERIAL_NUMBER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: serials
      path: /A_SerialNumber('{{serial_number}}')
      inputParameters:
      - name: serial_number
        in: path
      operations:
      - name: get-serial-record
        method: GET
  - type: http
    namespace: gudid
    baseUri: https://accessgudid.nlm.nih.gov/api/v3
    authentication:
      type: apiKey
      key: $secrets.gudid_api_key
    resources:
    - name: devices
      path: /devices/lookup?di={{di}}
      inputParameters:
      - name: di
        in: query
      operations:
      - name: lookup-device
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → implant-serial-traceability-workflow.yml

Creates an engineering change order in SAP, links the design documents from SharePoint, and assigns review tasks in Jira.

naftiko: '0.5'
info:
  label: Engineering Change Order Workflow
  description: Creates an engineering change order in SAP, links the design documents from SharePoint, and assigns review tasks in Jira.
  tags:
  - r-and-d
  - engineering-change
  - sap
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: eco-management
    port: 8080
    tools:
    - name: create-eco
      description: Create an engineering change order with linked documents and review tasks.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number.
      - name: change_description
        in: body
        type: string
        description: Description of the engineering change.
      - name: document_folder
        in: body
        type: string
        description: SharePoint folder path for ECO documents.
      steps:
      - name: create-change-order
        type: call
        call: sap.create-eco
        with:
          material_number: '{{material_number}}'
          description: '{{change_description}}'
      - name: get-documents
        type: call
        call: sharepoint.list-folder
        with:
          folder_path: '{{document_folder}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: ECO
          issuetype: Task
          summary: Review ECO {{create-change-order.eco_number}} — {{material_number}}
          description: 'ECO: {{create-change-order.eco_number}}. Change: {{change_description}}. Documents: {{get-documents.folder_url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_ENGINEERING_CHANGE
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: changes
      path: /A_EngineeringChange
      operations:
      - name: create-eco
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/bsci.sharepoint.com
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /drive/root:/{{folder_path}}:/children
      inputParameters:
      - name: folder_path
        in: path
      operations:
      - name: list-folder
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → engineering-change-order-workflow.yml

Retrieves document metadata from SharePoint including version, author, and modification date for a given document ID.

naftiko: '0.5'
info:
  label: SharePoint Document Metadata Lookup
  description: Retrieves document metadata from SharePoint including version, author, and modification date for a given document ID.
  tags:
  - quality
  - document-control
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: document-metadata
    port: 8080
    tools:
    - name: get-document-metadata
      description: Retrieve metadata for a SharePoint document by ID.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The SharePoint document ID.
      call: sharepoint.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: version
        type: string
        mapping: $.version
      - name: modified_by
        type: string
        mapping: $.lastModifiedBy.user.displayName
      - name: modified_date
        type: string
        mapping: $.lastModifiedDateTime
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/bsci.sharepoint.com
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /drive/items/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → sharepoint-document-metadata-lookup.yml

Pulls risk analysis documents from SharePoint, cross-references open risk mitigation Jira tickets, generates a risk summary, and posts the review status to Confluence for the design review board.

naftiko: '0.5'
info:
  label: Risk Management File Review
  description: Pulls risk analysis documents from SharePoint, cross-references open risk mitigation Jira tickets, generates a risk summary, and posts the review status to Confluence for the design review board.
  tags:
  - risk-management
  - design-control
  - sharepoint
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: risk-management
    port: 8080
    tools:
    - name: review-risk-file
      description: Given a device project key, pull risk documents from SharePoint, check mitigation status in Jira, and publish a summary to Confluence.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key for the device program.
      - name: risk_file_path
        in: body
        type: string
        description: SharePoint path to the risk management file.
      steps:
      - name: get-risk-docs
        type: call
        call: sharepoint.get-folder
        with:
          site_id: design_control
          folder_path: '{{risk_file_path}}'
      - name: get-open-mitigations
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND issuetype = 'Risk Mitigation' AND status != Done
      - name: publish-summary
        type: call
        call: confluence.create-page
        with:
          space_key: '{{project_key}}'
          title: Risk File Review — {{project_key}}
          body: 'Risk documents: {{get-risk-docs.item_count}} files. Open mitigations: {{get-open-mitigations.total}}. Last reviewed: today.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: get-folder
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.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://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → risk-management-file-review.yml

Identifies training gaps from the LMS via Workday, creates remediation tasks in ServiceNow, and sends reminders via Microsoft Teams.

naftiko: '0.5'
info:
  label: Compliance Training Gap Remediation Pipeline
  description: Identifies training gaps from the LMS via Workday, creates remediation tasks in ServiceNow, and sends reminders via Microsoft Teams.
  tags:
  - compliance
  - training
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: training-remediation
    port: 8080
    tools:
    - name: remediate-training-gaps
      description: Identify training gaps, create remediation tasks, and send reminders.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department code.
      - name: compliance_domain
        in: body
        type: string
        description: Compliance domain (e.g., GMP, GDP, HIPAA).
      steps:
      - name: get-training-gaps
        type: call
        call: workday.get-training-status
        with:
          department: '{{department}}'
          domain: '{{compliance_domain}}'
      - name: create-remediation
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_training_remediation
          short_description: Training gap — {{department}} — {{compliance_domain}}
          description: '{{get-training-gaps.gap_count}} employees have overdue {{compliance_domain}} training in {{department}}.'
      - name: send-reminders
        type: call
        call: msteams.send-message
        with:
          channel_id: dept_{{department}}
          text: 'Training reminder: {{get-training-gaps.gap_count}} overdue {{compliance_domain}} assignments. Remediation ticket: {{create-remediation.number}}. Please complete training by end of week.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://bsci.workday.com/api/learning/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /learning_assignments?department={{department}}&status=overdue
      inputParameters:
      - name: department
        in: query
      operations:
      - name: get-training-status
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-training-gap-remediation-pipeline.yml

On employee termination in Workday, disables their Azure AD account and notifies IT security via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Termination Access Revocation Workflow
  description: On employee termination in Workday, disables their Azure AD account and notifies IT security via Microsoft Teams.
  tags:
  - human-resources
  - access-management
  - workday
  - azure-active-directory
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: access-revocation
    port: 8080
    tools:
    - name: revoke-terminated-employee-access
      description: Disable accounts and revoke access upon employee termination.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: termination_date
        in: body
        type: string
        description: Termination date in YYYY-MM-DD.
      steps:
      - name: get-employee
        type: call
        call: workday.get-employee
        with:
          employee_id: '{{employee_id}}'
      - name: disable-account
        type: call
        call: azuread.disable-user
        with:
          user_principal_name: '{{get-employee.email}}'
      - name: notify-security
        type: call
        call: msteams.send-message
        with:
          channel_id: it_security
          text: 'Access revoked for terminated employee: {{get-employee.full_name}} ({{employee_id}}). Azure AD disabled. Termination date: {{termination_date}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://bsci.workday.com/api/staffing/v3
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: employees
      path: /workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-employee
        method: GET
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_principal_name}}
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-termination-access-revocation-workflow.yml

Captures a clinical protocol deviation, creates a CAPA record in the quality system via ServiceNow, and notifies the principal investigator through Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Protocol Deviation Handler
  description: Captures a clinical protocol deviation, creates a CAPA record in the quality system via ServiceNow, and notifies the principal investigator through Microsoft Teams.
  tags:
  - clinical
  - protocol-deviation
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: protocol-deviation
    port: 8080
    tools:
    - name: handle-protocol-deviation
      description: Record a protocol deviation, create CAPA, and notify the PI.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: Clinical trial identifier.
      - name: site_id
        in: body
        type: string
        description: Clinical trial site ID.
      - name: deviation_description
        in: body
        type: string
        description: Description of the deviation.
      steps:
      - name: create-capa
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_capa
          short_description: Protocol deviation — Trial {{trial_id}} Site {{site_id}}
          description: '{{deviation_description}}'
          category: clinical_deviation
          priority: '2'
      - name: notify-pi
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical_trial_{{trial_id}}
          text: 'Protocol deviation reported at Site {{site_id}}. CAPA {{create-capa.number}} created. Description: {{deviation_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-protocol-deviation-handler.yml

Uploads MATLAB simulation results for device performance modeling to an Amazon S3 bucket and logs the simulation run metadata in ServiceNow for R&D traceability.

naftiko: '0.5'
info:
  label: MATLAB Simulation Results Upload
  description: Uploads MATLAB simulation results for device performance modeling to an Amazon S3 bucket and logs the simulation run metadata in ServiceNow for R&D traceability.
  tags:
  - r-and-d
  - simulation
  - matlab
  - amazon-s3
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: rd-simulation
    port: 8080
    tools:
    - name: archive-simulation
      description: Given a simulation run ID and results file path, upload to S3 and log in ServiceNow.
      inputParameters:
      - name: simulation_id
        in: body
        type: string
        description: The MATLAB simulation run identifier.
      - name: results_key
        in: body
        type: string
        description: The S3 object key for the results file.
      - name: model_name
        in: body
        type: string
        description: Name of the simulation model.
      steps:
      - name: upload-results
        type: call
        call: s3.put-object
        with:
          bucket: bsci-rd-simulations
          key: '{{results_key}}'
      - name: log-metadata
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_simulation_log
          short_description: Simulation {{simulation_id}} — {{model_name}}
          description: 'Results archived at s3://bsci-rd-simulations/{{results_key}}. Model: {{model_name}}.'
          assigned_group: R_and_D_Engineering
  consumes:
  - type: http
    namespace: s3
    baseUri: https://bsci-rd-simulations.s3.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
      region: us-east-1
    resources:
    - name: objects
      path: /{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → matlab-simulation-results-upload.yml

Retrieves open position details from Workday HCM by position ID, returning job title, department, and hiring manager.

naftiko: '0.5'
info:
  label: Workday Position Details Lookup
  description: Retrieves open position details from Workday HCM by position ID, returning job title, department, and hiring manager.
  tags:
  - human-resources
  - recruitment
  - workday
capability:
  exposes:
  - type: mcp
    namespace: position-management
    port: 8080
    tools:
    - name: get-position
      description: Look up a Workday position by position ID.
      inputParameters:
      - name: position_id
        in: body
        type: string
        description: The Workday position ID.
      call: workday.get-position
      with:
        position_id: '{{position_id}}'
      outputParameters:
      - name: job_title
        type: string
        mapping: $.Position.JobTitle
      - name: department
        type: string
        mapping: $.Position.Department
      - name: hiring_manager
        type: string
        mapping: $.Position.HiringManager
  consumes:
  - type: http
    namespace: workday
    baseUri: https://bsci.workday.com/api/staffing/v3
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: positions
      path: /positions/{{position_id}}
      inputParameters:
      - name: position_id
        in: path
      operations:
      - name: get-position
        method: GET
Open in Framework → View in Fleet → workday-position-details-lookup.yml

Compiles a quarterly management review package by pulling KPIs from Power BI, CAPA metrics from ServiceNow, complaint trends from Salesforce, and audit findings from Jira, then posts the summary to Confluence.

naftiko: '0.5'
info:
  label: Management Review Data Package
  description: Compiles a quarterly management review package by pulling KPIs from Power BI, CAPA metrics from ServiceNow, complaint trends from Salesforce, and audit findings from Jira, then posts the summary to Confluence.
  tags:
  - quality
  - management-review
  - power-bi
  - servicenow
  - salesforce
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: management-review
    port: 8080
    tools:
    - name: compile-review-package
      description: Given a reporting quarter, aggregate quality KPIs, CAPA metrics, complaint trends, and audit findings into a Confluence management review page.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: The reporting quarter (e.g., Q1-2026).
      - name: year
        in: body
        type: string
        description: The reporting year.
      steps:
      - name: get-kpis
        type: call
        call: powerbi.get-dataset-refresh
        with:
          dataset_id: quality_kpi_ds
      - name: get-capa-metrics
        type: call
        call: servicenow.get-aggregate
        with:
          table: x_bsci_capa
          query: opened_at>=javascript:gs.quarterStart()^opened_at<=javascript:gs.quarterEnd()
      - name: get-complaint-trends
        type: call
        call: sfdc.query-complaints
        with:
          query: SELECT Complaint_Category__c, COUNT(Id) cnt FROM Case WHERE CreatedDate = THIS_QUARTER GROUP BY Complaint_Category__c
      - name: get-audit-findings
        type: call
        call: jira.search-issues
        with:
          jql: project = AUDIT AND created >= startOfQuarter() AND created <= endOfQuarter()
      - name: publish-review
        type: call
        call: confluence.create-page
        with:
          space_key: QUALITY
          title: Management Review — {{quarter}} {{year}}
          body: 'Quality KPIs refreshed. CAPAs opened: {{get-capa-metrics.count}}. Complaint categories: {{get-complaint-trends.totalSize}}. Audit findings: {{get-audit-findings.total}}.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: get-dataset-refresh
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: aggregate
      path: /stats/{{table}}
      inputParameters:
      - name: table
        in: path
      - name: query
        in: query
        parameterName: sysparm_query
      operations:
      - name: get-aggregate
        method: GET
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: soql
      path: /query
      inputParameters:
      - name: query
        in: query
        parameterName: q
      operations:
      - name: query-complaints
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.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://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → management-review-data-package.yml

Retrieves quality event details from ServiceNow, pulls related manufacturing data from SAP, and creates an investigation report in Confluence.

naftiko: '0.5'
info:
  label: Quality Event Root Cause Investigation
  description: Retrieves quality event details from ServiceNow, pulls related manufacturing data from SAP, and creates an investigation report in Confluence.
  tags:
  - quality
  - root-cause
  - servicenow
  - sap
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: root-cause-investigation
    port: 8080
    tools:
    - name: investigate-quality-event
      description: Investigate quality event root cause using ServiceNow and SAP data.
      inputParameters:
      - name: quality_event_id
        in: body
        type: string
        description: ServiceNow quality event ID.
      - name: production_order
        in: body
        type: string
        description: Related SAP production order number.
      steps:
      - name: get-event
        type: call
        call: servicenow.get-record
        with:
          table: x_bsci_quality_event
          sys_id: '{{quality_event_id}}'
      - name: get-production-data
        type: call
        call: sap.get-production-order
        with:
          order_number: '{{production_order}}'
      - name: create-investigation
        type: call
        call: confluence.create-page
        with:
          space: QA
          title: Root Cause Investigation — {{get-event.number}}
          content: 'Event: {{get-event.short_description}}. Production order: {{production_order}}. Material: {{get-production-data.material_number}}. Yield: {{get-production-data.yield_pct}}%.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}/{{sys_id}}
      inputParameters:
      - name: table
        in: path
      - name: sys_id
        in: path
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /A_ProductionOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-production-order
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → quality-event-root-cause-investigation.yml

When a clinical adverse event is reported in Salesforce, extracts event details, logs a safety report in ServiceNow, stores the narrative in Box, updates the Jira safety tracking board, and notifies pharmacovigilance via Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Adverse Event Reporting Pipeline
  description: When a clinical adverse event is reported in Salesforce, extracts event details, logs a safety report in ServiceNow, stores the narrative in Box, updates the Jira safety tracking board, and notifies pharmacovigilance via Microsoft Teams.
  tags:
  - clinical
  - safety
  - adverse-event
  - salesforce
  - servicenow
  - box
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-safety
    port: 8080
    tools:
    - name: report-adverse-event
      description: Given a Salesforce case ID for an adverse event, create safety records, archive narratives, track in Jira, and alert the safety team.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce case ID for the adverse event report.
      - name: severity
        in: body
        type: string
        description: Severity classification (serious, non-serious).
      - name: device_lot
        in: body
        type: string
        description: Device lot number involved in the event.
      steps:
      - name: get-event-case
        type: call
        call: sfdc.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-safety-report
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_safety_report
          short_description: AE Report — {{severity}} — Lot {{device_lot}}
          description: '{{get-event-case.description}}. Patient outcome: {{get-event-case.patient_outcome}}. Reporter: {{get-event-case.contact_name}}.'
          priority: '1'
          assigned_group: Pharmacovigilance
      - name: archive-narrative
        type: call
        call: box.upload-file
        with:
          folder_id: safety_narratives
          file_name: AE_{{create-safety-report.number}}_narrative.pdf
      - name: create-tracking-issue
        type: call
        call: jira.create-issue
        with:
          project_key: SAFETY
          issue_type: Adverse Event
          summary: AE {{create-safety-report.number}} — {{severity}} — Lot {{device_lot}}
          description: 'ServiceNow: {{create-safety-report.number}}. Salesforce: {{case_id}}.'
      - name: notify-safety-team
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacovigilance
          text: 'URGENT: Adverse event {{create-safety-report.number}} ({{severity}}). Lot {{device_lot}}. Jira: {{create-tracking-issue.key}}. Narrative archived at {{archive-narrative.url}}.'
  consumes:
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-adverse-event-reporting-pipeline.yml

Validates reprocessing records for reusable instruments from SAP, checks sterilization logs, and updates the validation status in ServiceNow.

naftiko: '0.5'
info:
  label: Instrument Reprocessing Validation Pipeline
  description: Validates reprocessing records for reusable instruments from SAP, checks sterilization logs, and updates the validation status in ServiceNow.
  tags:
  - quality
  - reprocessing
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: reprocessing-validation
    port: 8080
    tools:
    - name: validate-reprocessing
      description: Validate instrument reprocessing records against sterilization logs.
      inputParameters:
      - name: instrument_id
        in: body
        type: string
        description: Reusable instrument identifier.
      - name: reprocessing_date
        in: body
        type: string
        description: Reprocessing date in YYYY-MM-DD.
      steps:
      - name: get-reprocessing-record
        type: call
        call: sap.get-reprocessing
        with:
          instrument_id: '{{instrument_id}}'
          date: '{{reprocessing_date}}'
      - name: update-validation
        type: call
        call: servicenow.update-record
        with:
          table: x_bsci_reprocessing_validation
          sys_id: '{{get-reprocessing-record.validation_id}}'
          status: validated
          notes: 'Instrument {{instrument_id}} reprocessing on {{reprocessing_date}} validated. Cycle: {{get-reprocessing-record.cycle_number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment?$filter=Equipment eq '{{instrument_id}}'
      inputParameters:
      - name: instrument_id
        in: query
      operations:
      - name: get-reprocessing
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}/{{sys_id}}
      inputParameters:
      - name: table
        in: path
      - name: sys_id
        in: path
      operations:
      - name: update-record
        method: PATCH
Open in Framework → View in Fleet → instrument-reprocessing-validation-pipeline.yml

Searches Elasticsearch for device telemetry anomalies, pulls the device master record from SAP, and creates a ServiceNow investigation ticket when error patterns are detected.

naftiko: '0.5'
info:
  label: Device Telemetry Anomaly Investigator
  description: Searches Elasticsearch for device telemetry anomalies, pulls the device master record from SAP, and creates a ServiceNow investigation ticket when error patterns are detected.
  tags:
  - r-and-d
  - telemetry
  - iot
  - elasticsearch
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: device-telemetry
    port: 8080
    tools:
    - name: investigate-telemetry-anomaly
      description: Search device telemetry for error patterns, enrich with SAP device master data, and create an investigation ticket.
      inputParameters:
      - name: serial_number
        in: body
        type: string
        description: The device serial number.
      - name: time_range
        in: body
        type: string
        description: Time range for the search (e.g., 24h, 7d, 30d).
      steps:
      - name: search-telemetry
        type: call
        call: es.search
        with:
          index: device-telemetry-*
          serial_number: '{{serial_number}}'
          time_range: '{{time_range}}'
      - name: get-device-master
        type: call
        call: sap.get-equipment-by-serial
        with:
          serial_number: '{{serial_number}}'
      - name: create-investigation
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_telemetry_investigation
          short_description: Telemetry anomaly — {{get-device-master.description}} — SN {{serial_number}}
          description: '{{search-telemetry.hits.total.value}} events in {{time_range}}. Device: {{get-device-master.description}} ({{get-device-master.material_number}}).'
          assigned_group: Connected_Devices
  consumes:
  - type: http
    namespace: es
    baseUri: https://bsci-telemetry.es.eastus2.azure.elastic-cloud.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment?$filter=SerialNumber eq '{{serial_number}}'
      inputParameters:
      - name: serial_number
        in: query
      operations:
      - name: get-equipment-by-serial
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → device-telemetry-anomaly-investigator.yml

Triggers an Alteryx Server workflow to prepare R&D experiment data, archives output to Amazon S3, and logs the job in ServiceNow for audit traceability.

naftiko: '0.5'
info:
  label: R&D Data Preparation and Archive Pipeline
  description: Triggers an Alteryx Server workflow to prepare R&D experiment data, archives output to Amazon S3, and logs the job in ServiceNow for audit traceability.
  tags:
  - r-and-d
  - data-preparation
  - alteryx
  - amazon-s3
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: rd-data-prep
    port: 8080
    tools:
    - name: run-and-archive-workflow
      description: Trigger an Alteryx workflow, archive results to S3, and log the run in ServiceNow.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Alteryx Server application/workflow ID.
      - name: experiment_id
        in: body
        type: string
        description: The R&D experiment identifier for labeling.
      steps:
      - name: run-workflow
        type: call
        call: alteryx.run-job
        with:
          app_id: '{{app_id}}'
      - name: archive-output
        type: call
        call: s3.put-object
        with:
          bucket: bsci-rd-data
          key: prepared/{{experiment_id}}/output_{{run-workflow.id}}.csv
      - name: log-run
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_rd_data_prep
          short_description: Alteryx data prep — Experiment {{experiment_id}}
          description: 'Workflow {{app_id}}, Job {{run-workflow.id}}. Output archived: s3://bsci-rd-data/prepared/{{experiment_id}}/output_{{run-workflow.id}}.csv'
          assigned_group: R_and_D_Data
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://bsci-alteryx.corp.bsci.com/gallery/api/v1
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: jobs
      path: /workflows/{{app_id}}/jobs
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: s3
    baseUri: https://bsci-rd-data.s3.amazonaws.com
    authentication:
      type: awsSigV4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
      region: us-east-1
    resources:
    - name: objects
      path: /{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → r-d-data-preparation-and-archive-pipeline.yml

Monitors production yield metrics from SAP, compares against thresholds, and sends alerts to Microsoft Teams when yield drops below target.

naftiko: '0.5'
info:
  label: Production Yield Alert Pipeline
  description: Monitors production yield metrics from SAP, compares against thresholds, and sends alerts to Microsoft Teams when yield drops below target.
  tags:
  - manufacturing
  - yield
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: yield-monitoring
    port: 8080
    tools:
    - name: check-production-yield
      description: Monitor production yield from SAP and alert on threshold breaches.
      inputParameters:
      - name: work_center
        in: body
        type: string
        description: SAP work center ID.
      - name: threshold_pct
        in: body
        type: number
        description: Minimum acceptable yield percentage.
      steps:
      - name: get-yield-data
        type: call
        call: sap.get-yield-metrics
        with:
          work_center: '{{work_center}}'
      - name: send-alert
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing_ops
          text: 'YIELD ALERT: Work center {{work_center}} yield is {{get-yield-data.current_yield}}% (threshold: {{threshold_pct}}%). Production order: {{get-yield-data.production_order}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /A_ProductionOrder?$filter=WorkCenter eq '{{work_center}}'
      inputParameters:
      - name: work_center
        in: query
      operations:
      - name: get-yield-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → production-yield-alert-pipeline.yml

Downloads a raw material certificate from Box, validates against SAP material specs, and creates a quality record in ServiceNow.

naftiko: '0.5'
info:
  label: Raw Material Certificate Validation Pipeline
  description: Downloads a raw material certificate from Box, validates against SAP material specs, and creates a quality record in ServiceNow.
  tags:
  - quality
  - incoming-inspection
  - box
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: material-cert-validation
    port: 8080
    tools:
    - name: validate-material-certificate
      description: Download material cert, validate against SAP specs, and log quality record.
      inputParameters:
      - name: cert_file_id
        in: body
        type: string
        description: Box file ID for the certificate.
      - name: material_number
        in: body
        type: string
        description: SAP material number.
      steps:
      - name: get-cert
        type: call
        call: box.get-file-info
        with:
          file_id: '{{cert_file_id}}'
      - name: get-spec
        type: call
        call: sap.get-material-spec
        with:
          material_number: '{{material_number}}'
      - name: create-quality-record
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_incoming_inspection
          short_description: Material cert validation — {{material_number}}
          description: 'Certificate: {{get-cert.name}}, Material: {{material_number}}, Spec: {{get-spec.specification_name}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file-info
        method: GET
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Product('{{material_number}}')/to_Description
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material-spec
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → raw-material-certificate-validation-pipeline.yml

Retrieves clinical site visit data from Salesforce, calculates payment amounts, and initiates payment processing through SAP.

naftiko: '0.5'
info:
  label: Clinical Site Payment Processing Workflow
  description: Retrieves clinical site visit data from Salesforce, calculates payment amounts, and initiates payment processing through SAP.
  tags:
  - clinical
  - site-payments
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: site-payment
    port: 8080
    tools:
    - name: process-site-payment
      description: Retrieve visit data, calculate payment, and initiate SAP payment.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Clinical trial site ID.
      - name: trial_id
        in: body
        type: string
        description: Clinical trial identifier.
      - name: payment_period
        in: body
        type: string
        description: Payment period (e.g., 2026-Q1).
      steps:
      - name: get-visit-data
        type: call
        call: salesforce.query-visits
        with:
          site_id: '{{site_id}}'
          trial_id: '{{trial_id}}'
          period: '{{payment_period}}'
      - name: create-payment
        type: call
        call: sap.create-payment-request
        with:
          vendor: '{{site_id}}'
          amount: '{{get-visit-data.total_amount}}'
          reference: '{{trial_id}}-{{payment_period}}'
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical_finance
          text: 'Payment initiated for site {{site_id}}, trial {{trial_id}}: ${{get-visit-data.total_amount}} for {{get-visit-data.visit_count}} visits in {{payment_period}}. SAP ref: {{create-payment.document_number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bsci.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: visits
      path: /query?q=SELECT+Id,Amount__c+FROM+Site_Visit__c+WHERE+Site__c='{{site_id}}'
      inputParameters:
      - name: site_id
        in: query
      operations:
      - name: query-visits
        method: GET
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice
      operations:
      - name: create-payment-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-site-payment-processing-workflow.yml

Retrieves a Salesforce opportunity by ID, enriches with account contract history, and posts a deal summary to the sales team in Microsoft Teams for hospital and IDN deal tracking.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Pipeline Reporter
  description: Retrieves a Salesforce opportunity by ID, enriches with account contract history, and posts a deal summary to the sales team in Microsoft Teams for hospital and IDN deal tracking.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: report-opportunity
      description: Look up a Salesforce opportunity, pull related account contracts, and post a summary to the sales channel.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      steps:
      - name: get-opportunity
        type: call
        call: sfdc.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: get-account-contracts
        type: call
        call: sfdc.query-contracts
        with:
          query: SELECT Id, ContractNumber, Status, EndDate FROM Contract WHERE AccountId = '{{get-opportunity.AccountId}}' AND Status = 'Activated'
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel_id: sales-pipeline
          text: 'Opportunity {{get-opportunity.Name}}: Stage {{get-opportunity.StageName}}, Amount ${{get-opportunity.Amount}}, Close {{get-opportunity.CloseDate}}. Account: {{get-opportunity.Account.Name}}. Active contracts: {{get-account-contracts.totalSize}}.'
  consumes:
  - type: http
    namespace: sfdc
    baseUri: https://bsci.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
    - name: soql
      path: /query
      inputParameters:
      - name: query
        in: query
        parameterName: q
      operations:
      - name: query-contracts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-pipeline-reporter.yml

When a field safety corrective action (FSCA) is initiated, creates the FSCA record in ServiceNow, generates notification letters via Microsoft Word templates in SharePoint, distributes to affected hospitals via Salesforce, and alerts the field safety team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Field Safety Corrective Action Workflow
  description: When a field safety corrective action (FSCA) is initiated, creates the FSCA record in ServiceNow, generates notification letters via Microsoft Word templates in SharePoint, distributes to affected hospitals via Salesforce, and alerts the field safety team in Microsoft Teams.
  tags:
  - regulatory
  - field-safety
  - fsca
  - servicenow
  - sharepoint
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: field-safety
    port: 8080
    tools:
    - name: initiate-fsca
      description: Given a device identifier and hazard description, create FSCA records, prepare notifications, distribute to affected accounts, and alert the team.
      inputParameters:
      - name: device_identifier
        in: body
        type: string
        description: The UDI or catalog number of the affected device.
      - name: hazard_description
        in: body
        type: string
        description: Description of the identified hazard.
      - name: affected_lot_range
        in: body
        type: string
        description: Range of affected lot numbers.
      - name: corrective_action
        in: body
        type: string
        description: Description of the corrective action to be taken.
      steps:
      - name: create-fsca-record
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_fsca
          short_description: FSCA — {{device_identifier}} — {{hazard_description}}
          description: 'Affected lots: {{affected_lot_range}}. Corrective action: {{corrective_action}}.'
          priority: '1'
          assigned_group: Field_Safety
      - name: get-notification-template
        type: call
        call: sharepoint.get-file
        with:
          site_id: regulatory_templates
          file_path: FSCA/notification_letter_template.docx
      - name: get-affected-accounts
        type: call
        call: sfdc.query-accounts
        with:
          query: SELECT Id, Name, Ship_To_Contact__c FROM Account WHERE Active_Device__c = '{{device_identifier}}'
      - name: notify-field-safety
        type: call
        call: msteams.send-message
        with:
          channel_id: field-safety-urgent
          text: 'FSCA {{create-fsca-record.number}} initiated for {{device_identifier}}. Hazard: {{hazard_description}}. Lots: {{affected_lot_range}}. {{get-affected-accounts.totalSize}} accounts affected. Action: {{corrective_action}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: soql
      path: /query
      inputParameters:
      - name: query
        in: query
        parameterName: q
      operations:
      - name: query-accounts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → field-safety-corrective-action-workflow.yml

When a device labeling change is required, creates a change control in ServiceNow, retrieves current label artwork from Adobe Creative Cloud via Box, creates a Jira task for the labeling team, and notifies regulatory affairs in Microsoft Teams.

naftiko: '0.5'
info:
  label: Labeling Change Control Workflow
  description: When a device labeling change is required, creates a change control in ServiceNow, retrieves current label artwork from Adobe Creative Cloud via Box, creates a Jira task for the labeling team, and notifies regulatory affairs in Microsoft Teams.
  tags:
  - regulatory
  - labeling
  - change-control
  - servicenow
  - box
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: labeling
    port: 8080
    tools:
    - name: initiate-label-change
      description: Given a device catalog number and change reason, create the change control, pull current artwork, assign to labeling, and notify regulatory.
      inputParameters:
      - name: catalog_number
        in: body
        type: string
        description: The device catalog number.
      - name: change_reason
        in: body
        type: string
        description: Reason for the labeling change.
      - name: regulatory_requirement
        in: body
        type: string
        description: The regulatory requirement driving the change (e.g., EU MDR Article 18).
      steps:
      - name: create-change-control
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_change_control
          short_description: Label change — {{catalog_number}} — {{change_reason}}
          description: 'Regulatory requirement: {{regulatory_requirement}}. Catalog: {{catalog_number}}.'
          assigned_group: Labeling_Services
          category: labeling
      - name: get-current-artwork
        type: call
        call: box.search-files
        with:
          query: '{{catalog_number}} label artwork'
          ancestor_folder_id: labeling_artwork
      - name: create-labeling-task
        type: call
        call: jira.create-issue
        with:
          project_key: LABEL
          issue_type: Label Change
          summary: Update label — {{catalog_number}} — {{change_reason}}
          description: 'Change control: {{create-change-control.number}}. Requirement: {{regulatory_requirement}}. Current artwork: {{get-current-artwork.entries[0].name}}.'
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-labeling
          text: 'Label change initiated: {{create-change-control.number}} for {{catalog_number}}. Reason: {{change_reason}}. Jira: {{create-labeling-task.key}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: query
        in: query
      - name: ancestor_folder_id
        in: query
        parameterName: ancestor_folder_ids
      operations:
      - name: search-files
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → labeling-change-control-workflow.yml

Orchestrates a phase gate review for new product introduction by collecting design review status from Jira, verification results from Confluence, risk file from SharePoint, and financial projections from Microsoft Excel in SharePoint, then schedules the gate review meeting in Microsoft Teams.

naftiko: '0.5'
info:
  label: New Product Introduction Gate Review
  description: Orchestrates a phase gate review for new product introduction by collecting design review status from Jira, verification results from Confluence, risk file from SharePoint, and financial projections from Microsoft Excel in SharePoint, then schedules the gate review meeting in Microsoft Teams.
  tags:
  - product-development
  - npi
  - gate-review
  - jira
  - confluence
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: npi-gate
    port: 8080
    tools:
    - name: prepare-gate-review
      description: Given a project key and gate number, assemble all gate review artifacts and schedule the review meeting.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key for the NPI program.
      - name: gate_number
        in: body
        type: string
        description: The phase gate number (e.g., G2, G3, G4).
      - name: review_date
        in: body
        type: string
        description: Proposed review date in YYYY-MM-DD format.
      steps:
      - name: get-design-status
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND fixVersion = '{{gate_number}}' ORDER BY status
      - name: get-verification-results
        type: call
        call: confluence.search-content
        with:
          cql: space = '{{project_key}}' AND label = 'gate-{{gate_number}}-verification'
      - name: get-risk-file
        type: call
        call: sharepoint.get-folder
        with:
          site_id: npi_programs
          folder_path: '{{project_key}}/Gate_{{gate_number}}/RiskFile'
      - name: schedule-review
        type: call
        call: msteams.create-meeting
        with:
          subject: '{{gate_number}} Gate Review — {{project_key}}'
          start_time: '{{review_date}}T14:00:00'
          end_time: '{{review_date}}T16:00:00'
          body: 'Gate {{gate_number}} review for {{project_key}}. Design items: {{get-design-status.total}}. Verification reports: {{get-verification-results.totalSize}}. Risk files: {{get-risk-file.item_count}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bsci.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://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: get-folder
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /events
      operations:
      - name: create-meeting
        method: POST
Open in Framework → View in Fleet → new-product-introduction-gate-review.yml

Retrieves the status of a SAP quality inspection lot for incoming material or in-process inspection, returning inspection result, usage decision, and defect quantities.

naftiko: '0.5'
info:
  label: SAP Quality Inspection Lot Status
  description: Retrieves the status of a SAP quality inspection lot for incoming material or in-process inspection, returning inspection result, usage decision, and defect quantities.
  tags:
  - quality
  - inspection
  - sap
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: quality-inspection
    port: 8080
    tools:
    - name: get-inspection-lot
      description: Look up a SAP quality inspection lot by number. Returns result, usage decision, defect quantity, and inspector.
      inputParameters:
      - name: inspection_lot
        in: body
        type: string
        description: The SAP inspection lot number.
      call: sap.get-inspection-lot
      with:
        inspection_lot: '{{inspection_lot}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.d.InspectionResult
      - name: usage_decision
        type: string
        mapping: $.d.UsageDecision
      - name: defect_qty
        type: number
        mapping: $.d.DefectQuantity
      - name: lot_quantity
        type: number
        mapping: $.d.InspectionLotQuantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-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('{{inspection_lot}}')
      inputParameters:
      - name: inspection_lot
        in: path
      operations:
      - name: get-inspection-lot
        method: GET
Open in Framework → View in Fleet → sap-quality-inspection-lot-status.yml

Retrieves recent deployment markers from New Relic for a given application, showing revision, deployer, and timestamp.

naftiko: '0.5'
info:
  label: New Relic Deployment Marker Lookup
  description: Retrieves recent deployment markers from New Relic for a given application, showing revision, deployer, and timestamp.
  tags:
  - engineering
  - deployment
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: deployment-tracking
    port: 8080
    tools:
    - name: get-deployments
      description: List recent deployment markers for an application in New Relic.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The New Relic application ID.
      call: newrelic.get-deployments
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: deployments
        type: array
        mapping: $.deployments
      - name: latest_revision
        type: string
        mapping: $.deployments[0].revision
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: deployments
      path: /applications/{{app_id}}/deployments.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-deployments
        method: GET
Open in Framework → View in Fleet → new-relic-deployment-marker-lookup.yml

Extracts product complaint data from Salesforce Service Cloud, runs trending analysis in Databricks, and updates the quality dashboard in Power BI.

naftiko: '0.5'
info:
  label: Complaint Trending Analysis Pipeline
  description: Extracts product complaint data from Salesforce Service Cloud, runs trending analysis in Databricks, and updates the quality dashboard in Power BI.
  tags:
  - quality
  - complaint-management
  - salesforce
  - databricks
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: complaint-trending
    port: 8080
    tools:
    - name: run-complaint-trending
      description: Extract complaints, run trending analysis, and refresh the quality dashboard.
      inputParameters:
      - name: product_family
        in: body
        type: string
        description: Product family identifier.
      - name: date_range
        in: body
        type: string
        description: Date range for analysis (e.g., last-90-days).
      steps:
      - name: extract-complaints
        type: call
        call: salesforce.query-complaints
        with:
          product_family: '{{product_family}}'
          date_range: '{{date_range}}'
      - name: run-analysis
        type: call
        call: databricks.run-job
        with:
          job_id: complaint_trending_{{product_family}}
          parameters:
            record_count: '{{extract-complaints.totalSize}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: quality_dashboards
          dataset_id: complaint_trending
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bsci.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: complaints
      path: /query?q=SELECT+Id,Product_Family__c+FROM+Case+WHERE+Product_Family__c='{{product_family}}'
      inputParameters:
      - name: product_family
        in: query
      operations:
      - name: query-complaints
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://bsci.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → complaint-trending-analysis-pipeline.yml

Triggers a cybersecurity vulnerability scan via Azure DevOps, retrieves results, and creates a security finding in ServiceNow.

naftiko: '0.5'
info:
  label: Medical Device Cybersecurity Scan Pipeline
  description: Triggers a cybersecurity vulnerability scan via Azure DevOps, retrieves results, and creates a security finding in ServiceNow.
  tags:
  - cybersecurity
  - vulnerability-scan
  - azure-devops
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: device-cybersecurity
    port: 8080
    tools:
    - name: run-cybersecurity-scan
      description: Trigger vulnerability scan and create security findings from results.
      inputParameters:
      - name: device_software_id
        in: body
        type: string
        description: Device software identifier.
      - name: scan_profile
        in: body
        type: string
        description: Scan profile (full, quick, firmware).
      steps:
      - name: trigger-scan
        type: call
        call: azdevops.queue-build
        with:
          definition_id: cybersecurity_scan
          software_id: '{{device_software_id}}'
          profile: '{{scan_profile}}'
      - name: create-findings
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_security_finding
          short_description: Cybersecurity scan — {{device_software_id}} — {{scan_profile}}
          description: 'Scan build: {{trigger-scan.build_number}}. Software: {{device_software_id}}. Profile: {{scan_profile}}.'
  consumes:
  - type: http
    namespace: azdevops
    baseUri: https://dev.azure.com/bsci
    authentication:
      type: basic
      username: $secrets.azdevops_user
      password: $secrets.azdevops_pat
    resources:
    - name: builds
      path: /_apis/build/builds?api-version=7.0
      operations:
      - name: queue-build
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → medical-device-cybersecurity-scan-pipeline.yml

Monitors inventory levels in Oracle E-Business Suite, triggers a replenishment purchase requisition in SAP when stock falls below reorder point, and notifies the supply chain planner in Microsoft Teams.

naftiko: '0.5'
info:
  label: Vendor Managed Inventory Replenishment
  description: Monitors inventory levels in Oracle E-Business Suite, triggers a replenishment purchase requisition in SAP when stock falls below reorder point, and notifies the supply chain planner in Microsoft Teams.
  tags:
  - supply-chain
  - vmi
  - oracle-e-business-suite
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vmi-replenishment
    port: 8080
    tools:
    - name: check-and-replenish
      description: Given a material number and warehouse, check inventory level against reorder point and trigger replenishment if needed.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The material/item number.
      - name: warehouse_code
        in: body
        type: string
        description: The warehouse/organization code.
      - name: reorder_point
        in: body
        type: number
        description: The minimum stock threshold for reorder.
      steps:
      - name: check-stock
        type: call
        call: oracle-ebs.get-onhand
        with:
          item_number: '{{material_number}}'
          organization_code: '{{warehouse_code}}'
      - name: create-requisition
        type: call
        call: sap.create-purchase-req
        with:
          material: '{{material_number}}'
          plant: '{{warehouse_code}}'
          quantity: '{{reorder_point}}'
          requisition_type: VMI_AUTO
      - name: notify-planner
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-planning
          text: 'VMI replenishment triggered: Material {{material_number}} at {{warehouse_code}}. On-hand: {{check-stock.quantity_on_hand}}. Reorder point: {{reorder_point}}. PR: {{create-requisition.pr_number}}.'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://bsci-ebs.oraclecloud.com/webservices/rest/inventory/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: onhand
      path: /onhand
      inputParameters:
      - name: item_number
        in: query
        parameterName: ItemNumber
      - name: organization_code
        in: query
        parameterName: OrganizationCode
      operations:
      - name: get-onhand
        method: GET
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-requisitions
      path: /A_PurchaseRequisitionHeader
      operations:
      - name: create-purchase-req
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-managed-inventory-replenishment.yml

Retrieves device registration status from Salesforce for international markets, creates follow-up tasks in Jira, and notifies the regulatory team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Medical Device Registration Status Pipeline
  description: Retrieves device registration status from Salesforce for international markets, creates follow-up tasks in Jira, and notifies the regulatory team via Microsoft Teams.
  tags:
  - regulatory
  - device-registration
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: device-registration-status
    port: 8080
    tools:
    - name: check-registration-status
      description: Check international registration status and create follow-ups.
      inputParameters:
      - name: device_code
        in: body
        type: string
        description: Device product code.
      - name: market
        in: body
        type: string
        description: Target market (e.g., EU, Japan, China).
      steps:
      - name: get-status
        type: call
        call: salesforce.get-registration
        with:
          device_code: '{{device_code}}'
          market: '{{market}}'
      - name: create-followup
        type: call
        call: jira.create-issue
        with:
          project: REG
          issuetype: Task
          summary: Registration follow-up — {{device_code}} — {{market}}
          description: 'Current status: {{get-status.registration_status}}. Submitted: {{get-status.submission_date}}. Expected approval: {{get-status.expected_date}}.'
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_international
          text: 'Registration update: {{device_code}} in {{market}}. Status: {{get-status.registration_status}}. Follow-up: {{create-followup.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bsci.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: registrations
      path: /query?q=SELECT+Id,Status__c+FROM+Device_Registration__c+WHERE+Device_Code__c='{{device_code}}'+AND+Market__c='{{market}}'
      inputParameters:
      - name: device_code
        in: query
      - name: market
        in: query
      operations:
      - name: get-registration
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-device-registration-status-pipeline.yml

Lists available Tableau Server workbooks in a given project, returning workbook name, owner, and last updated timestamp.

naftiko: '0.5'
info:
  label: Tableau Server Workbook List
  description: Lists available Tableau Server workbooks in a given project, returning workbook name, owner, and last updated timestamp.
  tags:
  - analytics
  - reporting
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: tableau-admin
    port: 8080
    tools:
    - name: list-workbooks
      description: List Tableau workbooks by project name.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The Tableau project name.
      call: tableau.list-workbooks
      with:
        project_name: '{{project_name}}'
      outputParameters:
      - name: workbooks
        type: array
        mapping: $.workbooks.workbook
      - name: count
        type: number
        mapping: $.pagination.totalAvailable
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://bsci-tableau.corp.net/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks
      inputParameters:
      - name: project_name
        in: query
      operations:
      - name: list-workbooks
        method: GET
Open in Framework → View in Fleet → tableau-server-workbook-list.yml

When a complaint is logged in Salesforce Service Cloud, creates a CAPA record in ServiceNow, uploads supporting documents to Box, and notifies quality engineering via Microsoft Teams.

naftiko: '0.5'
info:
  label: Device Complaint Intake Orchestrator
  description: When a complaint is logged in Salesforce Service Cloud, creates a CAPA record in ServiceNow, uploads supporting documents to Box, and notifies quality engineering via Microsoft Teams.
  tags:
  - quality
  - complaints
  - salesforce-service-cloud
  - servicenow
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-complaints
    port: 8080
    tools:
    - name: process-device-complaint
      description: Given a Salesforce case ID and device serial number, create a CAPA investigation record, archive attachments, and alert the quality team.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce Service Cloud case ID for the device complaint.
      - name: device_serial
        in: body
        type: string
        description: The serial number of the implicated medical device.
      - name: complaint_category
        in: body
        type: string
        description: Category of complaint (e.g., malfunction, labeling, injury).
      steps:
      - name: get-case
        type: call
        call: sfdc.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-capa
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_capa
          short_description: CAPA for device {{device_serial}} — {{complaint_category}}
          description: 'Complaint case {{case_id}}: {{get-case.subject}}. Reporter: {{get-case.contact_name}}. Device serial: {{device_serial}}.'
          priority: '2'
          assigned_group: Quality_Engineering
      - name: archive-docs
        type: call
        call: box.create-folder
        with:
          parent_id: quality_complaints
          name: CAPA_{{create-capa.number}}_{{device_serial}}
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-engineering
          text: 'New CAPA {{create-capa.number}} opened for device {{device_serial}} ({{complaint_category}}). Salesforce case: {{case_id}}. Documents: {{archive-docs.url}}'
  consumes:
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: capa-records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → device-complaint-intake-orchestrator.yml

Retrieves a work item from Azure DevOps by ID, returning title, state, assigned-to, and iteration path.

naftiko: '0.5'
info:
  label: Azure DevOps Work Item Lookup
  description: Retrieves a work item from Azure DevOps by ID, returning title, state, assigned-to, and iteration path.
  tags:
  - engineering
  - project-management
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: work-item-tracking
    port: 8080
    tools:
    - name: get-work-item
      description: Get an Azure DevOps work item by ID.
      inputParameters:
      - name: work_item_id
        in: body
        type: integer
        description: The Azure DevOps work item ID.
      call: azdevops.get-work-item
      with:
        work_item_id: '{{work_item_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.fields.System.Title
      - name: state
        type: string
        mapping: $.fields.System.State
      - name: assigned_to
        type: string
        mapping: $.fields.System.AssignedTo.displayName
  consumes:
  - type: http
    namespace: azdevops
    baseUri: https://dev.azure.com/bsci
    authentication:
      type: basic
      username: $secrets.azdevops_user
      password: $secrets.azdevops_pat
    resources:
    - name: work-items
      path: /_apis/wit/workitems/{{work_item_id}}?api-version=7.0
      inputParameters:
      - name: work_item_id
        in: path
      operations:
      - name: get-work-item
        method: GET
Open in Framework → View in Fleet → azure-devops-work-item-lookup.yml

Creates an audit request in ServiceNow for a supplier, pulls the supplier master record from SAP, schedules the audit in Microsoft Planner, and notifies the audit team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier Quality Audit Workflow
  description: Creates an audit request in ServiceNow for a supplier, pulls the supplier master record from SAP, schedules the audit in Microsoft Planner, and notifies the audit team in Microsoft Teams.
  tags:
  - supplier-quality
  - audit
  - servicenow
  - sap
  - microsoft-planner
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supplier-quality
    port: 8080
    tools:
    - name: initiate-supplier-audit
      description: Given a supplier ID and audit type, create the audit record, pull supplier details from SAP, schedule in Planner, and notify the audit team.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP vendor/supplier number.
      - name: audit_type
        in: body
        type: string
        description: Type of audit (e.g., initial, surveillance, for-cause).
      - name: target_date
        in: body
        type: string
        description: Target audit date in YYYY-MM-DD format.
      steps:
      - name: get-supplier
        type: call
        call: sap.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-audit-request
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_supplier_audit
          short_description: '{{audit_type}} audit — {{get-supplier.name}}'
          description: 'Supplier: {{get-supplier.name}} ({{supplier_id}}). Type: {{audit_type}}. Target date: {{target_date}}.'
          assigned_group: Supplier_Quality
      - name: create-planner-task
        type: call
        call: planner.create-task
        with:
          plan_id: supplier_audit_plan
          title: '{{audit_type}} audit: {{get-supplier.name}} — {{target_date}}'
          due_date: '{{target_date}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supplier-quality
          text: 'Supplier audit initiated: {{create-audit-request.number}} for {{get-supplier.name}} ({{audit_type}}). Target: {{target_date}}. Planner task: {{create-planner-task.url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: suppliers
      path: /A_Supplier('{{supplier_id}}')
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-quality-audit-workflow.yml

Retrieves the status of a GitHub pull request by repository and PR number, returning title, state, and review status.

naftiko: '0.5'
info:
  label: GitHub Pull Request Status
  description: Retrieves the status of a GitHub pull request by repository and PR number, returning title, state, and review status.
  tags:
  - engineering
  - code-review
  - github
capability:
  exposes:
  - type: mcp
    namespace: code-review
    port: 8080
    tools:
    - name: get-pr-status
      description: Get the status of a GitHub pull request.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository in owner/repo format.
      - name: pr_number
        in: body
        type: integer
        description: The pull request number.
      call: github.get-pull-request
      with:
        repo: '{{repo}}'
        pr_number: '{{pr_number}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: state
        type: string
        mapping: $.state
      - name: mergeable
        type: boolean
        mapping: $.mergeable
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/{{repo}}/pulls/{{pr_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
Open in Framework → View in Fleet → github-pull-request-status.yml

When a regulatory change notification arrives, searches Confluence for affected SOPs, queries Jira for open design control tickets, creates a ServiceNow change request, and notifies regulatory affairs and quality teams in Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Change Impact Assessment
  description: When a regulatory change notification arrives, searches Confluence for affected SOPs, queries Jira for open design control tickets, creates a ServiceNow change request, and notifies regulatory affairs and quality teams in Microsoft Teams.
  tags:
  - regulatory
  - change-management
  - confluence
  - jira
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-change
    port: 8080
    tools:
    - name: assess-regulatory-change
      description: Given a regulation reference and description, find affected SOPs, related design tickets, open a change request, and notify stakeholders.
      inputParameters:
      - name: regulation_ref
        in: body
        type: string
        description: The regulation or standard reference (e.g., ISO 13485:2016 clause 7.3).
      - name: change_description
        in: body
        type: string
        description: Summary of the regulatory change.
      steps:
      - name: find-affected-sops
        type: call
        call: confluence.search-content
        with:
          cql: label = 'sop' AND text ~ '{{regulation_ref}}'
      - name: find-design-tickets
        type: call
        call: jira.search-issues
        with:
          jql: text ~ '{{regulation_ref}}' AND status != Closed
      - name: create-change-request
        type: call
        call: servicenow.create-record
        with:
          table: change_request
          short_description: 'Regulatory change impact: {{regulation_ref}}'
          description: '{{change_description}}. Affected SOPs: {{find-affected-sops.totalSize}} found. Open design tickets: {{find-design-tickets.total}}.'
          assigned_group: Regulatory_Affairs
          category: regulatory_change
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-quality
          text: 'Regulatory change alert: {{regulation_ref}}. Change request {{create-change-request.number}} opened. {{find-affected-sops.totalSize}} SOPs and {{find-design-tickets.total}} design tickets potentially affected.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.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: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-change-impact-assessment.yml

Checks the signing status of a DocuSign envelope by envelope ID, returning status, sender, and recipient details.

naftiko: '0.5'
info:
  label: DocuSign Envelope Status Check
  description: Checks the signing status of a DocuSign envelope by envelope ID, returning status, sender, and recipient details.
  tags:
  - legal
  - e-signature
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: e-signature
    port: 8080
    tools:
    - name: get-envelope-status
      description: Get the status of a DocuSign envelope.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope ID.
      call: docusign.get-envelope
      with:
        envelope_id: '{{envelope_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: sender
        type: string
        mapping: $.sender.userName
      - name: sent_date
        type: string
        mapping: $.sentDateTime
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/bsci_account
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes/{{envelope_id}}
      inputParameters:
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-envelope-status-check.yml

Collects sterilization cycle data from SAP, retrieves the validation protocol from SharePoint, logs results in ServiceNow, and notifies the sterilization engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Sterilization Validation Record Pipeline
  description: Collects sterilization cycle data from SAP, retrieves the validation protocol from SharePoint, logs results in ServiceNow, and notifies the sterilization engineering team in Microsoft Teams.
  tags:
  - manufacturing
  - sterilization
  - validation
  - sap
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sterilization
    port: 8080
    tools:
    - name: record-sterilization-validation
      description: Given a sterilization cycle ID and lot number, pull cycle data from SAP, retrieve the protocol from SharePoint, log in ServiceNow, and notify engineering.
      inputParameters:
      - name: cycle_id
        in: body
        type: string
        description: The sterilization cycle identifier.
      - name: lot_number
        in: body
        type: string
        description: The product lot number undergoing sterilization.
      - name: method
        in: body
        type: string
        description: Sterilization method (EtO, gamma, e-beam).
      steps:
      - name: get-cycle-data
        type: call
        call: sap.get-sterilization-cycle
        with:
          cycle_id: '{{cycle_id}}'
      - name: get-protocol
        type: call
        call: sharepoint.get-file
        with:
          site_id: sterilization_validation
          file_path: Protocols/{{method}}/{{lot_number}}_protocol.pdf
      - name: log-result
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_sterilization_log
          short_description: Sterilization validation — {{method}} — Lot {{lot_number}}
          description: 'Cycle {{cycle_id}}: Temperature {{get-cycle-data.temperature}}, Duration {{get-cycle-data.duration_min}} min, BI result: {{get-cycle-data.bi_result}}.'
          assigned_group: Sterilization_Engineering
      - name: notify-engineering
        type: call
        call: msteams.send-message
        with:
          channel_id: sterilization-engineering
          text: 'Sterilization validation logged: {{log-result.number}} for lot {{lot_number}} ({{method}}). BI result: {{get-cycle-data.bi_result}}. Protocol: {{get-protocol.url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/Z_STERILIZATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cycles
      path: /SterilizationCycle('{{cycle_id}}')
      inputParameters:
      - name: cycle_id
        in: path
      operations:
      - name: get-sterilization-cycle
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sterilization-validation-record-pipeline.yml

Looks up a contact record in HubSpot by email address, returning name, company, lifecycle stage, and last activity date.

naftiko: '0.5'
info:
  label: HubSpot Contact Lookup
  description: Looks up a contact record in HubSpot by email address, returning name, company, lifecycle stage, and last activity date.
  tags:
  - marketing
  - crm
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: contact-management
    port: 8080
    tools:
    - name: get-contact
      description: Look up a HubSpot contact by email address.
      inputParameters:
      - name: email
        in: body
        type: string
        description: The contact email address.
      call: hubspot.get-contact
      with:
        email: '{{email}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.properties.firstname
      - name: company
        type: string
        mapping: $.properties.company
      - name: lifecycle_stage
        type: string
        mapping: $.properties.lifecyclestage
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/{{email}}?idProperty=email
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → hubspot-contact-lookup.yml

Extracts clinical trial data from Salesforce, transforms it via Azure Data Factory, loads into Azure Databricks for statistical analysis, and publishes results to a Confluence clinical study page.

naftiko: '0.5'
info:
  label: Clinical Data Integration Pipeline
  description: Extracts clinical trial data from Salesforce, transforms it via Azure Data Factory, loads into Azure Databricks for statistical analysis, and publishes results to a Confluence clinical study page.
  tags:
  - clinical
  - data-integration
  - salesforce
  - azure-data-factory
  - azure-databricks
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: clinical-data
    port: 8080
    tools:
    - name: run-clinical-data-pipeline
      description: Given a trial ID, trigger the ETL pipeline to extract, transform, analyze, and publish clinical data.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: The clinical trial protocol identifier.
      - name: data_cutoff_date
        in: body
        type: string
        description: Data cutoff date in YYYY-MM-DD format.
      steps:
      - name: extract-trial-data
        type: call
        call: sfdc.query-trial
        with:
          query: SELECT Id, Site__c, Subject_ID__c, Endpoint_Value__c FROM Clinical_Data__c WHERE Trial_ID__c = '{{trial_id}}' AND Data_Date__c <= {{data_cutoff_date}}
      - name: trigger-adf-pipeline
        type: call
        call: adf.trigger-pipeline
        with:
          pipeline_name: clinical_etl_{{trial_id}}
          parameters:
            cutoff_date: '{{data_cutoff_date}}'
      - name: publish-results
        type: call
        call: confluence.create-page
        with:
          space_key: CLINICAL
          title: Trial {{trial_id}} — Data Analysis — Cutoff {{data_cutoff_date}}
          body: 'Pipeline run: {{trigger-adf-pipeline.run_id}}. Records extracted: {{extract-trial-data.totalSize}}. Cutoff: {{data_cutoff_date}}.'
  consumes:
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: soql
      path: /query
      inputParameters:
      - name: query
        in: query
        parameterName: q
      operations:
      - name: query-trial
        method: GET
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/bsci-sub/resourceGroups/bsci-rg/providers/Microsoft.DataFactory/factories/bsci-adf
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipelines
      path: /pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01
      inputParameters:
      - name: pipeline_name
        in: path
      operations:
      - name: trigger-pipeline
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → clinical-data-integration-pipeline.yml

Pulls vendor performance data from SAP, checks compliance status in ServiceNow, and generates an assessment report in Confluence.

naftiko: '0.5'
info:
  label: Vendor Qualification Assessment Pipeline
  description: Pulls vendor performance data from SAP, checks compliance status in ServiceNow, and generates an assessment report in Confluence.
  tags:
  - supply-chain
  - vendor-qualification
  - sap
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: vendor-qualification
    port: 8080
    tools:
    - name: assess-vendor-qualification
      description: Evaluate vendor qualification using SAP data, compliance checks, and generate report.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: SAP vendor number.
      - name: assessment_type
        in: body
        type: string
        description: Type of assessment (initial, annual, for-cause).
      steps:
      - name: get-vendor-data
        type: call
        call: sap.get-vendor-performance
        with:
          vendor_number: '{{vendor_number}}'
      - name: check-compliance
        type: call
        call: servicenow.query-records
        with:
          table: x_bsci_vendor_compliance
          query: vendor={{vendor_number}}
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space: VQA
          title: Vendor Assessment — {{vendor_number}} — {{assessment_type}}
          content: 'Performance score: {{get-vendor-data.score}}. Compliance status: {{check-compliance.status}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_number}}')
      inputParameters:
      - name: vendor_number
        in: path
      operations:
      - name: get-vendor-performance
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.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: query-records
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → vendor-qualification-assessment-pipeline.yml

Retrieves the current status of a Jira design control ticket used to track design inputs, outputs, and verification activities for a medical device project.

naftiko: '0.5'
info:
  label: Jira Design Control Ticket Status
  description: Retrieves the current status of a Jira design control ticket used to track design inputs, outputs, and verification activities for a medical device project.
  tags:
  - design-control
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: design-control
    port: 8080
    tools:
    - name: get-design-control-ticket
      description: Look up a Jira issue by key to get the design control phase, assignee, and status for a device development project.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., DC-1234).
      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: design_phase
        type: string
        mapping: $.fields.customfield_10100
      - name: summary
        type: string
        mapping: $.fields.summary
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-design-control-ticket-status.yml

Initiates a product recall by pulling affected serial numbers from SAP, generating a recall notice, and distributing it via Salesforce and Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Recall Notification Workflow
  description: Initiates a product recall by pulling affected serial numbers from SAP, generating a recall notice, and distributing it via Salesforce and Microsoft Teams.
  tags:
  - quality
  - recall
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-recall
    port: 8080
    tools:
    - name: initiate-recall-notification
      description: Pull affected serials, generate recall notice, and distribute notifications.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number of recalled product.
      - name: lot_numbers
        in: body
        type: string
        description: Comma-separated list of affected lot numbers.
      steps:
      - name: get-affected-units
        type: call
        call: sap.get-serials-by-lot
        with:
          material_number: '{{material_number}}'
          lot_numbers: '{{lot_numbers}}'
      - name: create-recall-case
        type: call
        call: salesforce.create-case
        with:
          subject: Product Recall — {{material_number}}
          description: 'Affected lots: {{lot_numbers}}. Total units: {{get-affected-units.count}}.'
          priority: Critical
          type: Recall
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          channel_id: product_recall_team
          text: 'RECALL INITIATED: Material {{material_number}}, Lots: {{lot_numbers}}. {{get-affected-units.count}} units affected. Case: {{create-recall-case.CaseNumber}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_SERIAL_NUMBER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: serials
      path: /A_SerialNumber?$filter=Material eq '{{material_number}}'
      inputParameters:
      - name: material_number
        in: query
      operations:
      - name: get-serials-by-lot
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://bsci.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-recall-notification-workflow.yml

Aggregates complaint data from Salesforce Service Cloud, field action records from ServiceNow, and trending analytics from Power BI to compile a periodic post-market surveillance report and archive it in SharePoint.

naftiko: '0.5'
info:
  label: Post-Market Surveillance Report Generator
  description: Aggregates complaint data from Salesforce Service Cloud, field action records from ServiceNow, and trending analytics from Power BI to compile a periodic post-market surveillance report and archive it in SharePoint.
  tags:
  - regulatory
  - post-market
  - surveillance
  - salesforce-service-cloud
  - servicenow
  - power-bi
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: post-market
    port: 8080
    tools:
    - name: generate-pms-report
      description: Given a device family and reporting period, aggregate complaints, field actions, and trending data to compile and archive a PMS report.
      inputParameters:
      - name: device_family
        in: body
        type: string
        description: The medical device product family identifier.
      - name: period_start
        in: body
        type: string
        description: Reporting period start date (YYYY-MM-DD).
      - name: period_end
        in: body
        type: string
        description: Reporting period end date (YYYY-MM-DD).
      steps:
      - name: get-complaints
        type: call
        call: sfdc.query-complaints
        with:
          query: SELECT Id, Subject, CreatedDate, Severity__c FROM Case WHERE Device_Family__c = '{{device_family}}' AND CreatedDate >= {{period_start}}T00:00:00Z AND CreatedDate <= {{period_end}}T23:59:59Z
      - name: get-field-actions
        type: call
        call: servicenow.get-field-actions
        with:
          query: device_family={{device_family}}^created_on>={{period_start}}^created_on<=={{period_end}}
      - name: get-trend-data
        type: call
        call: powerbi.export-report
        with:
          report_id: pms_trending_report
          filter: DeviceFamily eq '{{device_family}}'
      - name: archive-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory_pms
          file_path: Reports/{{device_family}}/PMS_{{period_start}}_{{period_end}}.pdf
  consumes:
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: soql
      path: /query
      inputParameters:
      - name: query
        in: query
        parameterName: q
      operations:
      - name: query-complaints
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: field-actions
      path: /table/x_bsci_field_action
      inputParameters:
      - name: query
        in: query
        parameterName: sysparm_query
      operations:
      - name: get-field-actions
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: reports
      path: /reports/{{report_id}}/ExportTo
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: export-report
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → post-market-surveillance-report-generator.yml

Provisions a new IT asset in ServiceNow CMDB, assigns it to a user in Workday, and creates an Azure AD account for device enrollment.

naftiko: '0.5'
info:
  label: IT Asset Provisioning Orchestrator
  description: Provisions a new IT asset in ServiceNow CMDB, assigns it to a user in Workday, and creates an Azure AD account for device enrollment.
  tags:
  - it-operations
  - asset-management
  - servicenow
  - workday
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: asset-provisioning
    port: 8080
    tools:
    - name: provision-it-asset
      description: Provision IT asset in ServiceNow, assign in Workday, and enroll in Azure AD.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Employee ID from Workday.
      - name: asset_type
        in: body
        type: string
        description: Type of IT asset (laptop, monitor, phone).
      - name: model
        in: body
        type: string
        description: Asset model name.
      steps:
      - name: create-cmdb-record
        type: call
        call: servicenow.create-record
        with:
          table: cmdb_ci_computer
          name: '{{asset_type}}-{{employee_id}}'
          model_id: '{{model}}'
          assigned_to: '{{employee_id}}'
      - name: get-employee
        type: call
        call: workday.get-employee
        with:
          employee_id: '{{employee_id}}'
      - name: enroll-device
        type: call
        call: azuread.register-device
        with:
          display_name: '{{asset_type}}-{{get-employee.full_name}}'
          device_type: '{{asset_type}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: workday
    baseUri: https://bsci.workday.com/api/staffing/v3
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: employees
      path: /workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-employee
        method: GET
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: devices
      path: /devices
      operations:
      - name: register-device
        method: POST
Open in Framework → View in Fleet → it-asset-provisioning-orchestrator.yml

Retrieves a Zendesk field service ticket, pulls the hospital account from Salesforce, and escalates to the regional service manager via Microsoft Teams when priority is urgent.

naftiko: '0.5'
info:
  label: Field Service Escalation Workflow
  description: Retrieves a Zendesk field service ticket, pulls the hospital account from Salesforce, and escalates to the regional service manager via Microsoft Teams when priority is urgent.
  tags:
  - field-service
  - support
  - zendesk
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: field-service
    port: 8080
    tools:
    - name: escalate-service-ticket
      description: Look up a Zendesk ticket, enrich with Salesforce account data, and escalate to the service manager in Teams.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      - name: account_id
        in: body
        type: string
        description: The Salesforce hospital account ID.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: get-account
        type: call
        call: sfdc.get-account
        with:
          account_id: '{{account_id}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: field-service-escalations
          text: 'Service escalation: Ticket #{{ticket_id}} ({{get-ticket.ticket.priority}}) — {{get-ticket.ticket.subject}}. Hospital: {{get-account.Name}}. Region: {{get-account.Region__c}}. Assigned: {{get-ticket.ticket.assignee.name}}.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://bsci.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: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → field-service-escalation-workflow.yml

When a production line nonconformance is detected, logs it in ServiceNow, links the affected lot in SAP, uploads inspection photos to Box, and alerts the plant quality manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Manufacturing Nonconformance Report
  description: When a production line nonconformance is detected, logs it in ServiceNow, links the affected lot in SAP, uploads inspection photos to Box, and alerts the plant quality manager via Microsoft Teams.
  tags:
  - manufacturing
  - quality
  - nonconformance
  - servicenow
  - sap
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-quality
    port: 8080
    tools:
    - name: log-nonconformance
      description: Given lot number, defect type, and production line, create a nonconformance record, link in SAP, archive evidence, and notify the plant quality manager.
      inputParameters:
      - name: lot_number
        in: body
        type: string
        description: The manufacturing lot or batch number.
      - name: defect_type
        in: body
        type: string
        description: Classification of the nonconformance (e.g., dimensional, cosmetic, functional).
      - name: production_line
        in: body
        type: string
        description: The production line identifier where the defect was detected.
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      steps:
      - name: create-ncr
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_ncr
          short_description: NCR — Lot {{lot_number}} — {{defect_type}}
          description: 'Nonconformance on line {{production_line}} at plant {{plant_code}}. Lot: {{lot_number}}. Defect: {{defect_type}}.'
          priority: '2'
          assigned_group: Plant_Quality
      - name: get-lot
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{lot_number}}'
          plant: '{{plant_code}}'
      - name: archive-evidence
        type: call
        call: box.create-folder
        with:
          parent_id: ncr_evidence
          name: NCR_{{create-ncr.number}}_{{lot_number}}
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: plant-quality-{{plant_code}}
          text: 'NCR {{create-ncr.number}} opened for lot {{lot_number}} ({{defect_type}}) on line {{production_line}}. Material: {{get-lot.material_description}}. Evidence folder: {{archive-evidence.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch(Batch='{{batch_number}}',Plant='{{plant}}')
      inputParameters:
      - name: batch_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-nonconformance-report.yml

Prepares an international device registration package by pulling product data from SAP, collecting technical documentation from SharePoint, creating a submission record in ServiceNow, and notifying regulatory affairs in Microsoft Teams.

naftiko: '0.5'
info:
  label: Device Registration Submission Workflow
  description: Prepares an international device registration package by pulling product data from SAP, collecting technical documentation from SharePoint, creating a submission record in ServiceNow, and notifying regulatory affairs in Microsoft Teams.
  tags:
  - regulatory
  - registration
  - international
  - sap
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: device-registration
    port: 8080
    tools:
    - name: prepare-registration-package
      description: Given a material number and target country, assemble the registration package from SAP and SharePoint, create the submission record, and notify the team.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the device.
      - name: target_country
        in: body
        type: string
        description: The ISO country code for the target market.
      - name: registration_type
        in: body
        type: string
        description: Type of registration (initial, renewal, amendment).
      steps:
      - name: get-product
        type: call
        call: sap.get-material
        with:
          material_number: '{{material_number}}'
      - name: get-tech-docs
        type: call
        call: sharepoint.get-folder
        with:
          site_id: regulatory_submissions
          folder_path: TechDocs/{{material_number}}/{{target_country}}
      - name: create-submission
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_device_registration
          short_description: '{{registration_type}} registration — {{get-product.description}} — {{target_country}}'
          description: 'Material: {{material_number}}. Product: {{get-product.description}}. Country: {{target_country}}. Tech docs: {{get-tech-docs.item_count}} files.'
          assigned_group: International_Regulatory
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: international-regulatory
          text: 'Device registration {{create-submission.number}}: {{registration_type}} for {{get-product.description}} in {{target_country}}. {{get-tech-docs.item_count}} technical documents collected.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Product('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: 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: get-folder
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → device-registration-submission-workflow.yml

Pulls supplier quality metrics from SAP, combines with audit findings from ServiceNow, and publishes a scorecard to Tableau Server.

naftiko: '0.5'
info:
  label: Supplier Scorecard Generation Pipeline
  description: Pulls supplier quality metrics from SAP, combines with audit findings from ServiceNow, and publishes a scorecard to Tableau Server.
  tags:
  - supply-chain
  - supplier-quality
  - sap
  - servicenow
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: supplier-scorecard
    port: 8080
    tools:
    - name: generate-supplier-scorecard
      description: Generate a supplier quality scorecard from SAP and ServiceNow data.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: SAP vendor number.
      - name: period
        in: body
        type: string
        description: Reporting period (e.g., 2026-Q1).
      steps:
      - name: get-quality-metrics
        type: call
        call: sap.get-vendor-quality
        with:
          vendor_number: '{{vendor_number}}'
          period: '{{period}}'
      - name: get-audit-findings
        type: call
        call: servicenow.query-records
        with:
          table: x_bsci_supplier_audit
          query: vendor={{vendor_number}}^period={{period}}
      - name: publish-scorecard
        type: call
        call: tableau.refresh-extract
        with:
          datasource_id: supplier_scorecard_{{vendor_number}}
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_QUALITY_NOTIFICATION
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quality
      path: /A_QualityNotification?$filter=Vendor eq '{{vendor_number}}'
      inputParameters:
      - name: vendor_number
        in: query
      operations:
      - name: get-vendor-quality
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.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: query-records
        method: GET
  - type: http
    namespace: tableau
    baseUri: https://bsci-tableau.corp.net/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-extract
        method: POST
Open in Framework → View in Fleet → supplier-scorecard-generation-pipeline.yml

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

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

Triggers a Tableau datasource extract refresh for quality metrics, ensuring the latest CAPA, NCR, and complaint data is available to quality leadership.

naftiko: '0.5'
info:
  label: Tableau Quality Metrics Dashboard Refresh
  description: Triggers a Tableau datasource extract refresh for quality metrics, ensuring the latest CAPA, NCR, and complaint data is available to quality leadership.
  tags:
  - quality
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: quality-analytics
    port: 8080
    tools:
    - name: refresh-quality-dashboard
      description: Trigger a Tableau extract refresh for a quality metrics datasource by datasource ID.
      inputParameters:
      - name: datasource_id
        in: body
        type: string
        description: The Tableau datasource LUID.
      call: tableau.refresh-datasource
      with:
        datasource_id: '{{datasource_id}}'
      outputParameters:
      - name: job_id
        type: string
        mapping: $.job.id
      - name: status
        type: string
        mapping: $.job.status
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://bsci-tableau.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/bsci-site/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
Open in Framework → View in Fleet → tableau-quality-metrics-dashboard-refresh.yml

Compares physical inventory counts from Oracle EBS with SAP warehouse records and generates a discrepancy report in Google Sheets.

naftiko: '0.5'
info:
  label: Warehouse Inventory Reconciliation Pipeline
  description: Compares physical inventory counts from Oracle EBS with SAP warehouse records and generates a discrepancy report in Google Sheets.
  tags:
  - supply-chain
  - inventory
  - oracle
  - sap
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: inventory-reconciliation
    port: 8080
    tools:
    - name: reconcile-inventory
      description: Compare Oracle EBS and SAP inventory, then generate discrepancy report.
      inputParameters:
      - name: warehouse_code
        in: body
        type: string
        description: Warehouse location code.
      - name: count_date
        in: body
        type: string
        description: Physical count date in YYYY-MM-DD.
      steps:
      - name: get-oracle-counts
        type: call
        call: oracle.get-physical-counts
        with:
          warehouse_code: '{{warehouse_code}}'
          count_date: '{{count_date}}'
      - name: get-sap-inventory
        type: call
        call: sap.get-warehouse-stock
        with:
          warehouse_code: '{{warehouse_code}}'
      - name: create-report
        type: call
        call: gsheets.create-spreadsheet
        with:
          title: Inventory Reconciliation — {{warehouse_code}} — {{count_date}}
          data: 'Oracle count: {{get-oracle-counts.total_items}}, SAP stock: {{get-sap-inventory.total_items}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://bsci-ebs.oracle.com/webservices/rest/inventory
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: counts
      path: /physical_counts?warehouse={{warehouse_code}}&date={{count_date}}
      inputParameters:
      - name: warehouse_code
        in: query
      - name: count_date
        in: query
      operations:
      - name: get-physical-counts
        method: GET
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod?$filter=Plant eq '{{warehouse_code}}'
      inputParameters:
      - name: warehouse_code
        in: query
      operations:
      - name: get-warehouse-stock
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets
      operations:
      - name: create-spreadsheet
        method: POST
Open in Framework → View in Fleet → warehouse-inventory-reconciliation-pipeline.yml

Retrieves a change request from ServiceNow by change number, returning description, state, risk level, and implementation plan.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Lookup
  description: Retrieves a change request from ServiceNow by change number, returning description, state, risk level, and implementation plan.
  tags:
  - it-operations
  - change-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: get-change-request
      description: Look up a ServiceNow change request by number.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The change request number (e.g., CHG0012345).
      call: servicenow.get-change
      with:
        change_number: '{{change_number}}'
      outputParameters:
      - name: short_description
        type: string
        mapping: $.result.short_description
      - name: state
        type: string
        mapping: $.result.state
      - name: risk
        type: string
        mapping: $.result.risk
      - name: implementation_plan
        type: string
        mapping: $.result.implementation_plan
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.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: query
      operations:
      - name: get-change
        method: GET
Open in Framework → View in Fleet → servicenow-change-request-lookup.yml

Queries Salesforce for territory performance metrics, enriches with market data from Circana, and sends a weekly digest via Microsoft Teams.

naftiko: '0.5'
info:
  label: Sales Territory Performance Digest
  description: Queries Salesforce for territory performance metrics, enriches with market data from Circana, and sends a weekly digest via Microsoft Teams.
  tags:
  - sales
  - territory-management
  - salesforce
  - circana
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: territory-performance
    port: 8080
    tools:
    - name: generate-territory-digest
      description: Generate territory performance digest from Salesforce and Circana data.
      inputParameters:
      - name: territory_id
        in: body
        type: string
        description: Sales territory identifier.
      - name: period
        in: body
        type: string
        description: Reporting period (e.g., last-7-days).
      steps:
      - name: get-sales-data
        type: call
        call: salesforce.query-territory
        with:
          territory_id: '{{territory_id}}'
          period: '{{period}}'
      - name: get-market-data
        type: call
        call: circana.get-market-share
        with:
          territory: '{{territory_id}}'
      - name: send-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: sales_{{territory_id}}
          text: 'Territory {{territory_id}} digest: Revenue ${{get-sales-data.total_revenue}}, Pipeline ${{get-sales-data.pipeline_value}}, Market share: {{get-market-data.share_pct}}%.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bsci.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query?q=SELECT+Territory__c,SUM(Amount)+FROM+Opportunity+WHERE+Territory__c='{{territory_id}}'
      inputParameters:
      - name: territory_id
        in: query
      operations:
      - name: query-territory
        method: GET
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v1
    authentication:
      type: bearer
      token: $secrets.circana_token
    resources:
    - name: market-share
      path: /market-share?territory={{territory}}
      inputParameters:
      - name: territory
        in: query
      operations:
      - name: get-market-share
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sales-territory-performance-digest.yml

Checks field inventory levels in SAP, compares against par levels, creates replenishment orders, and notifies field reps via Microsoft Teams.

naftiko: '0.5'
info:
  label: Field Inventory Replenishment Orchestrator
  description: Checks field inventory levels in SAP, compares against par levels, creates replenishment orders, and notifies field reps via Microsoft Teams.
  tags:
  - supply-chain
  - field-inventory
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: field-replenishment
    port: 8080
    tools:
    - name: replenish-field-inventory
      description: Check field inventory, create replenishment orders, and notify reps.
      inputParameters:
      - name: rep_territory
        in: body
        type: string
        description: Sales rep territory code.
      - name: product_family
        in: body
        type: string
        description: Product family for replenishment check.
      steps:
      - name: check-inventory
        type: call
        call: sap.get-consignment-stock
        with:
          territory: '{{rep_territory}}'
          product_family: '{{product_family}}'
      - name: create-replenishment
        type: call
        call: sap.create-transfer-order
        with:
          source_plant: DC01
          destination: '{{rep_territory}}'
          materials: '{{check-inventory.below_par_items}}'
      - name: notify-rep
        type: call
        call: msteams.send-message
        with:
          channel_id: field_ops_{{rep_territory}}
          text: 'Replenishment order created for territory {{rep_territory}}: {{check-inventory.below_par_count}} items below par level. Transfer order: {{create-replenishment.transfer_order_number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod?$filter=Plant eq '{{territory}}'
      inputParameters:
      - name: territory
        in: query
      operations:
      - name: get-consignment-stock
        method: GET
    - name: transfers
      path: /A_WarehouseOrder
      operations:
      - name: create-transfer-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → field-inventory-replenishment-orchestrator.yml

Classifies an adverse event from Salesforce, determines MDR reportability, creates an FDA MedWatch draft in ServiceNow, and alerts the regulatory team.

naftiko: '0.5'
info:
  label: MDR Adverse Event Classification Pipeline
  description: Classifies an adverse event from Salesforce, determines MDR reportability, creates an FDA MedWatch draft in ServiceNow, and alerts the regulatory team.
  tags:
  - regulatory
  - adverse-event
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mdr-classification
    port: 8080
    tools:
    - name: classify-adverse-event
      description: Classify adverse event, determine reportability, and create MedWatch draft.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce adverse event case ID.
      - name: event_type
        in: body
        type: string
        description: Type of adverse event (death, serious-injury, malfunction).
      steps:
      - name: get-event
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-medwatch-draft
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_medwatch
          short_description: MedWatch draft — {{case_id}} — {{event_type}}
          description: 'Event: {{get-event.Description}}. Type: {{event_type}}. Device: {{get-event.Device__c}}.'
          priority: '1'
      - name: alert-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_mdr
          text: 'MDR Alert: {{event_type}} event reported. Case: {{case_id}}. MedWatch: {{create-medwatch-draft.number}}. Immediate review required.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bsci.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://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mdr-adverse-event-classification-pipeline.yml

Executes a SQL query against Azure Databricks for R&D analytics, pushes results to a Power BI dataset for visualization, and notifies the R&D team in Microsoft Teams with a summary.

naftiko: '0.5'
info:
  label: R&D Analytics Query and Visualization
  description: Executes a SQL query against Azure Databricks for R&D analytics, pushes results to a Power BI dataset for visualization, and notifies the R&D team in Microsoft Teams with a summary.
  tags:
  - r-and-d
  - analytics
  - azure-databricks
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rd-analytics
    port: 8080
    tools:
    - name: run-and-visualize-query
      description: Execute a Databricks SQL query, push results to Power BI, and notify the team.
      inputParameters:
      - name: sql_query
        in: body
        type: string
        description: The SQL query to execute against the R&D lakehouse.
      - name: warehouse_id
        in: body
        type: string
        description: The Databricks SQL warehouse ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to push results to.
      steps:
      - name: execute-query
        type: call
        call: databricks.execute-query
        with:
          warehouse_id: '{{warehouse_id}}'
          statement: '{{sql_query}}'
      - name: push-to-powerbi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: '{{dataset_id}}'
          table_name: QueryResults
          rows: '{{execute-query.result.data_array}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: rd-analytics
          text: 'R&D query complete: {{execute-query.result.data_array.length}} rows returned and pushed to Power BI dataset {{dataset_id}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://bsci-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-statements
      path: /sql/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}}/tables/{{table_name}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      - name: table_name
        in: path
      operations:
      - name: push-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → r-d-analytics-query-and-visualization.yml

Retrieves a SAP outbound delivery document for tracking medical device shipments to hospitals and distributors. Returns delivery status, ship-to party, and tracking number.

naftiko: '0.5'
info:
  label: SAP Delivery Note Lookup
  description: Retrieves a SAP outbound delivery document for tracking medical device shipments to hospitals and distributors. Returns delivery status, ship-to party, and tracking number.
  tags:
  - logistics
  - shipping
  - sap
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: logistics
    port: 8080
    tools:
    - name: get-delivery
      description: Look up a SAP outbound delivery by number. Returns delivery status, ship-to, and goods issue date.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery document number.
      call: sap.get-delivery
      with:
        delivery_number: '{{delivery_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OverallDeliveryStatus
      - name: ship_to
        type: string
        mapping: $.d.ShipToParty
      - name: goods_issue_date
        type: string
        mapping: $.d.GoodsIssueDate
      - name: tracking_number
        type: string
        mapping: $.d.BillOfLading
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /A_OutbDeliveryHeader('{{delivery_number}}')
      inputParameters:
      - name: delivery_number
        in: path
      operations:
      - name: get-delivery
        method: GET
Open in Framework → View in Fleet → sap-delivery-note-lookup.yml

Searches Boston Scientific's Confluence knowledge base for standard operating procedures by keyword or label. Returns page title, URL, and last modified date.

naftiko: '0.5'
info:
  label: Confluence SOP Lookup
  description: Searches Boston Scientific's Confluence knowledge base for standard operating procedures by keyword or label. Returns page title, URL, and last modified date.
  tags:
  - quality
  - sop
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: search-sops
      description: Search Confluence for SOPs matching a keyword or label. Returns matching page titles, URLs, and modification dates.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: Keyword or phrase to search for in SOP content.
      call: confluence.search-content
      with:
        cql: label = 'sop' AND text ~ '{{search_term}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: total_count
        type: number
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-sop-lookup.yml

Receives a customer complaint from Salesforce, determines severity, creates a CAPA in ServiceNow, and notifies the quality engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Customer Complaint to CAPA Pipeline
  description: Receives a customer complaint from Salesforce, determines severity, creates a CAPA in ServiceNow, and notifies the quality engineering team via Microsoft Teams.
  tags:
  - quality
  - customer-complaint
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: complaint-to-capa
    port: 8080
    tools:
    - name: process-complaint-to-capa
      description: Convert a customer complaint into a CAPA record and notify quality engineering.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce case ID.
      - name: severity
        in: body
        type: string
        description: Complaint severity level (critical, major, minor).
      steps:
      - name: get-complaint
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-capa
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_capa
          short_description: CAPA from complaint {{case_id}} — {{get-complaint.Subject}}
          description: 'Complaint: {{get-complaint.Description}}. Severity: {{severity}}.'
          priority: '{{severity}}'
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_engineering
          text: 'New CAPA {{create-capa.number}} created from complaint {{case_id}}. Severity: {{severity}}. Subject: {{get-complaint.Subject}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bsci.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://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-to-capa-pipeline.yml

Queries Datadog for production line health metrics, checks for active alerts, and posts a line status summary to Microsoft Teams for the manufacturing operations team.

naftiko: '0.5'
info:
  label: Datadog Manufacturing Line Monitoring
  description: Queries Datadog for production line health metrics, checks for active alerts, and posts a line status summary to Microsoft Teams for the manufacturing operations team.
  tags:
  - manufacturing
  - monitoring
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mfg-monitoring
    port: 8080
    tools:
    - name: get-line-health
      description: Query Datadog for production line OEE and alerts, then post a status summary to the manufacturing Teams channel.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: The production line identifier.
      - name: time_range
        in: body
        type: string
        description: Time range for metrics (e.g., 1h, 24h, 7d).
      steps:
      - name: get-oee-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: avg:manufacturing.oee{line:{{line_id}}}
          from: '{{time_range}}'
      - name: get-active-alerts
        type: call
        call: datadog.get-monitors
        with:
          tags: line:{{line_id}}
          status: Alert
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing-ops
          text: 'Line {{line_id}} status: OEE {{get-oee-metrics.series[0].pointlist[-1][1]}}%. Active alerts: {{get-active-alerts.count}}. Time range: {{time_range}}.'
  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
      inputParameters:
      - name: query
        in: query
      - name: from
        in: query
      operations:
      - name: query-metrics
        method: GET
    - name: monitors
      path: /monitor
      inputParameters:
      - name: tags
        in: query
        parameterName: monitor_tags
      - name: status
        in: query
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-manufacturing-line-monitoring.yml

Detects an environmental excursion from Datadog monitoring, quarantines affected lots in SAP, and escalates via ServiceNow.

naftiko: '0.5'
info:
  label: Clean Room Environmental Excursion Handler
  description: Detects an environmental excursion from Datadog monitoring, quarantines affected lots in SAP, and escalates via ServiceNow.
  tags:
  - manufacturing
  - clean-room
  - datadog
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: environmental-excursion
    port: 8080
    tools:
    - name: handle-excursion
      description: Detect environmental excursion, quarantine lots, and create escalation.
      inputParameters:
      - name: room_id
        in: body
        type: string
        description: Clean room identifier.
      - name: parameter
        in: body
        type: string
        description: Environmental parameter (e.g., particulate, humidity, temperature).
      steps:
      - name: get-readings
        type: call
        call: datadog.query-metrics
        with:
          query: avg:cleanroom.{{parameter}}{room_id:{{room_id}}}
          from: now-2h
          to: now
      - name: quarantine-lots
        type: call
        call: sap.update-lot-status
        with:
          room_id: '{{room_id}}'
          status: QUARANTINE
      - name: create-excursion-ticket
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_env_excursion
          short_description: Environmental excursion — Room {{room_id}} — {{parameter}}
          description: 'Parameter: {{parameter}}, Room: {{room_id}}. Reading: {{get-readings.avg_value}}. Lots quarantined.'
          priority: '1'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_BATCH
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch
      operations:
      - name: update-lot-status
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → clean-room-environmental-excursion-handler.yml

Queries Jira for the count of open bugs in a specified project, returning total count and severity breakdown.

naftiko: '0.5'
info:
  label: Jira Bug Count by Project
  description: Queries Jira for the count of open bugs in a specified project, returning total count and severity breakdown.
  tags:
  - engineering
  - bug-tracking
  - jira
capability:
  exposes:
  - type: mcp
    namespace: bug-tracking
    port: 8080
    tools:
    - name: count-open-bugs
      description: Count open bugs in a Jira project by project key.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      call: jira.search-issues
      with:
        jql: project = {{project_key}} AND issuetype = Bug AND status != Done
      outputParameters:
      - name: total_bugs
        type: number
        mapping: $.total
      - name: issues
        type: array
        mapping: $.issues
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
Open in Framework → View in Fleet → jira-bug-count-by-project.yml

When a supplier quality issue is identified, creates a SCAR in ServiceNow, notifies the supplier contact via Microsoft Outlook, updates the supplier scorecard in Salesforce, and tracks resolution in Jira.

naftiko: '0.5'
info:
  label: Supplier Corrective Action Pipeline
  description: When a supplier quality issue is identified, creates a SCAR in ServiceNow, notifies the supplier contact via Microsoft Outlook, updates the supplier scorecard in Salesforce, and tracks resolution in Jira.
  tags:
  - supplier-quality
  - scar
  - servicenow
  - microsoft-outlook
  - salesforce
  - jira
capability:
  exposes:
  - type: mcp
    namespace: supplier-corrective
    port: 8080
    tools:
    - name: initiate-scar
      description: Given supplier ID and issue details, create a SCAR, notify the supplier, update the scorecard, and create a tracking ticket.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP supplier number.
      - name: issue_description
        in: body
        type: string
        description: Description of the quality issue.
      - name: affected_material
        in: body
        type: string
        description: The material number affected by the issue.
      - name: supplier_contact_email
        in: body
        type: string
        description: Email address of the supplier quality contact.
      steps:
      - name: create-scar
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_scar
          short_description: SCAR — Supplier {{supplier_id}} — Material {{affected_material}}
          description: '{{issue_description}}'
          priority: '2'
          assigned_group: Supplier_Quality
      - name: notify-supplier
        type: call
        call: outlook.send-email
        with:
          to: '{{supplier_contact_email}}'
          subject: Supplier Corrective Action Request — {{create-scar.number}}
          body: 'Boston Scientific has identified a quality issue with material {{affected_material}}. SCAR reference: {{create-scar.number}}. Please respond within 10 business days with root cause analysis and corrective action plan.'
      - name: update-scorecard
        type: call
        call: sfdc.update-record
        with:
          object: Supplier_Scorecard__c
          external_id: '{{supplier_id}}'
          fields:
            Open_SCARs__c: increment
            Last_Quality_Issue__c: '{{issue_description}}'
      - name: create-tracking
        type: call
        call: jira.create-issue
        with:
          project_key: SQE
          issue_type: SCAR
          summary: SCAR {{create-scar.number}} — Supplier {{supplier_id}}
          description: 'Material: {{affected_material}}. Issue: {{issue_description}}. ServiceNow: {{create-scar.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/{{object}}/{{external_id}}
      inputParameters:
      - name: object
        in: path
      - name: external_id
        in: path
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → supplier-corrective-action-pipeline.yml

At CAPA effectiveness review milestone, pulls the CAPA record from ServiceNow, gathers verification evidence from Box, checks for recurrence in Salesforce complaint data, and posts the review outcome to Confluence.

naftiko: '0.5'
info:
  label: CAPA Effectiveness Review Pipeline
  description: At CAPA effectiveness review milestone, pulls the CAPA record from ServiceNow, gathers verification evidence from Box, checks for recurrence in Salesforce complaint data, and posts the review outcome to Confluence.
  tags:
  - quality
  - capa
  - effectiveness
  - servicenow
  - box
  - salesforce
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: capa-effectiveness
    port: 8080
    tools:
    - name: review-capa-effectiveness
      description: Given a CAPA number, pull the record, gather evidence, check for recurrence, and document the review.
      inputParameters:
      - name: capa_number
        in: body
        type: string
        description: The ServiceNow CAPA record number.
      - name: device_family
        in: body
        type: string
        description: The device product family for recurrence check.
      steps:
      - name: get-capa
        type: call
        call: servicenow.get-record
        with:
          table: x_bsci_capa
          number: '{{capa_number}}'
      - name: get-evidence
        type: call
        call: box.search-files
        with:
          query: CAPA_{{capa_number}}
          ancestor_folder_id: capa_evidence
      - name: check-recurrence
        type: call
        call: sfdc.query-complaints
        with:
          query: SELECT COUNT(Id) FROM Case WHERE Device_Family__c = '{{device_family}}' AND Defect_Code__c = '{{get-capa.defect_code}}' AND CreatedDate > {{get-capa.closure_date}}
      - name: publish-review
        type: call
        call: confluence.create-page
        with:
          space_key: QUALITY
          title: CAPA Effectiveness Review — {{capa_number}}
          body: 'CAPA: {{capa_number}}. Root cause: {{get-capa.root_cause}}. Evidence files: {{get-evidence.total_count}}. Post-closure recurrences: {{check-recurrence.totalSize}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.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
      - name: number
        in: query
        parameterName: sysparm_query
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: query
        in: query
      - name: ancestor_folder_id
        in: query
        parameterName: ancestor_folder_ids
      operations:
      - name: search-files
        method: GET
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: soql
      path: /query
      inputParameters:
      - name: query
        in: query
        parameterName: q
      operations:
      - name: query-complaints
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → capa-effectiveness-review-pipeline.yml

Pulls product line data from SAP and generates a patent portfolio review summary in Confluence for legal team analysis.

naftiko: '0.5'
info:
  label: Patent Portfolio Review Workflow
  description: Pulls product line data from SAP and generates a patent portfolio review summary in Confluence for legal team analysis.
  tags:
  - legal
  - intellectual-property
  - sap
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: patent-review
    port: 8080
    tools:
    - name: review-patent-portfolio
      description: Cross-reference patents with product lines and publish review summary.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: Product line identifier.
      - name: review_year
        in: body
        type: string
        description: Year for the review period.
      steps:
      - name: get-product-info
        type: call
        call: sap.get-product-line
        with:
          product_line: '{{product_line}}'
      - name: publish-review
        type: call
        call: confluence.create-page
        with:
          space: IP
          title: Patent Review — {{product_line}} — {{review_year}}
          content: 'Product line: {{get-product-info.description}}. Products: {{get-product-info.product_count}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-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?$filter=ProductLine eq '{{product_line}}'
      inputParameters:
      - name: product_line
        in: query
      operations:
      - name: get-product-line
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → patent-portfolio-review-workflow.yml

When Datadog detects a cleanroom environmental excursion (temperature, humidity, particle count), creates a deviation record in ServiceNow, halts affected production orders in SAP, and alerts manufacturing and quality via Microsoft Teams.

naftiko: '0.5'
info:
  label: Environmental Monitoring Alert Pipeline
  description: When Datadog detects a cleanroom environmental excursion (temperature, humidity, particle count), creates a deviation record in ServiceNow, halts affected production orders in SAP, and alerts manufacturing and quality via Microsoft Teams.
  tags:
  - manufacturing
  - environmental
  - cleanroom
  - datadog
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: environmental-monitoring
    port: 8080
    tools:
    - name: handle-environmental-excursion
      description: Given a cleanroom zone and excursion details, create a deviation, halt production, and notify stakeholders.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: The cleanroom zone identifier.
      - name: parameter
        in: body
        type: string
        description: The environmental parameter exceeded (temperature, humidity, particle_count).
      - name: measured_value
        in: body
        type: string
        description: The measured value that triggered the excursion.
      - name: limit_value
        in: body
        type: string
        description: The specification limit that was exceeded.
      steps:
      - name: create-deviation
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_deviation
          short_description: Environmental excursion — Zone {{zone_id}} — {{parameter}}
          description: '{{parameter}} excursion in zone {{zone_id}}. Measured: {{measured_value}}. Limit: {{limit_value}}.'
          priority: '1'
          assigned_group: Manufacturing_Quality
      - name: get-active-orders
        type: call
        call: sap.get-production-orders
        with:
          plant: '{{zone_id}}'
          status: REL
      - name: notify-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing-alerts
          text: 'ALERT: Environmental excursion in zone {{zone_id}}. {{parameter}}: {{measured_value}} (limit: {{limit_value}}). Deviation: {{create-deviation.number}}. {{get-active-orders.count}} active production orders may be affected.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: sap
    baseUri: https://bsci-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?$filter=Plant eq '{{plant}}' and OrderStatus eq '{{status}}'
      inputParameters:
      - name: plant
        in: query
      - name: status
        in: query
      operations:
      - name: get-production-orders
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → environmental-monitoring-alert-pipeline.yml

Retrieves biocompatibility test results from the LIMS system, attaches them to the design history file in SharePoint, and notifies the regulatory team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Biocompatibility Test Result Pipeline
  description: Retrieves biocompatibility test results from the LIMS system, attaches them to the design history file in SharePoint, and notifies the regulatory team via Microsoft Teams.
  tags:
  - r-and-d
  - biocompatibility
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: biocompat-testing
    port: 8080
    tools:
    - name: process-biocompat-results
      description: Retrieve biocompatibility results, attach to DHF, and notify regulatory team.
      inputParameters:
      - name: test_id
        in: body
        type: string
        description: The LIMS test identifier.
      - name: device_code
        in: body
        type: string
        description: The device product code.
      steps:
      - name: get-results
        type: call
        call: lims.get-test-results
        with:
          test_id: '{{test_id}}'
      - name: upload-to-dhf
        type: call
        call: sharepoint.upload-document
        with:
          site_id: dhf_{{device_code}}
          folder_path: Biocompatibility
          content: '{{get-results.report_pdf}}'
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory_affairs
          text: 'Biocompatibility results for {{device_code}} (Test: {{test_id}}) uploaded to DHF. Status: {{get-results.overall_status}}. Review: {{upload-to-dhf.webUrl}}'
  consumes:
  - type: http
    namespace: lims
    baseUri: https://bsci-lims.corp.net/api/v2
    authentication:
      type: bearer
      token: $secrets.lims_token
    resources:
    - name: tests
      path: /tests/{{test_id}}/results
      inputParameters:
      - name: test_id
        in: path
      operations:
      - name: get-test-results
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/bsci.sharepoint.com
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: upload-document
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → biocompatibility-test-result-pipeline.yml

Pulls shipping lane data from SAP, analyzes cost trends in Databricks, and generates a cost optimization report in Google Sheets.

naftiko: '0.5'
info:
  label: Shipping Lane Cost Analysis Pipeline
  description: Pulls shipping lane data from SAP, analyzes cost trends in Databricks, and generates a cost optimization report in Google Sheets.
  tags:
  - supply-chain
  - logistics
  - sap
  - databricks
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: shipping-cost-analysis
    port: 8080
    tools:
    - name: analyze-shipping-costs
      description: Analyze shipping lane costs across SAP and Databricks, generate report.
      inputParameters:
      - name: shipping_lane
        in: body
        type: string
        description: Shipping lane identifier (origin-destination).
      - name: period
        in: body
        type: string
        description: Analysis period (e.g., last-12-months).
      steps:
      - name: get-lane-data
        type: call
        call: sap.get-shipping-costs
        with:
          lane: '{{shipping_lane}}'
          period: '{{period}}'
      - name: run-analysis
        type: call
        call: databricks.run-job
        with:
          job_id: shipping_cost_analysis
          lane: '{{shipping_lane}}'
          total_cost: '{{get-lane-data.total_cost}}'
      - name: create-report
        type: call
        call: gsheets.create-spreadsheet
        with:
          title: Shipping Cost Analysis — {{shipping_lane}} — {{period}}
          data: 'Lane: {{shipping_lane}}, Total cost: {{get-lane-data.total_cost}}, Shipments: {{get-lane-data.shipment_count}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_INBOUND_DELIVERY
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /A_InboundDelivery?$filter=ShippingLane eq '{{lane}}'
      inputParameters:
      - name: lane
        in: query
      operations:
      - name: get-shipping-costs
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://bsci.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: gsheets
    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
Open in Framework → View in Fleet → shipping-lane-cost-analysis-pipeline.yml

Registers a Unique Device Identifier (UDI) by pulling product master data from SAP, packaging configuration from Oracle EBS, creating the GUDID submission record in ServiceNow, and notifying the UDI coordinator in Microsoft Teams.

naftiko: '0.5'
info:
  label: UDI Database Registration
  description: Registers a Unique Device Identifier (UDI) by pulling product master data from SAP, packaging configuration from Oracle EBS, creating the GUDID submission record in ServiceNow, and notifying the UDI coordinator in Microsoft Teams.
  tags:
  - regulatory
  - udi
  - sap
  - oracle-e-business-suite
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: udi-registration
    port: 8080
    tools:
    - name: register-udi
      description: Given a material number and packaging level, assemble UDI data from SAP and Oracle, create a submission record, and notify the coordinator.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the device.
      - name: packaging_level
        in: body
        type: string
        description: The packaging level (unit, case, pallet).
      - name: gtin
        in: body
        type: string
        description: The Global Trade Item Number for the device.
      steps:
      - name: get-product
        type: call
        call: sap.get-material
        with:
          material_number: '{{material_number}}'
      - name: get-packaging
        type: call
        call: oracle-ebs.get-packaging
        with:
          item_number: '{{material_number}}'
          packaging_level: '{{packaging_level}}'
      - name: create-submission
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_udi_submission
          short_description: UDI Registration — {{get-product.description}} — {{gtin}}
          description: 'GTIN: {{gtin}}. Material: {{material_number}}. Packaging: {{packaging_level}}. Quantity: {{get-packaging.quantity_per_package}}.'
          assigned_group: UDI_Coordination
      - name: notify-coordinator
        type: call
        call: msteams.send-message
        with:
          channel_id: udi-coordination
          text: 'UDI submission {{create-submission.number}} created for {{get-product.description}} (GTIN: {{gtin}}). Packaging: {{packaging_level}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Product('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://bsci-ebs.oraclecloud.com/webservices/rest/packaging/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: packaging
      path: /configurations
      inputParameters:
      - name: item_number
        in: query
      - name: packaging_level
        in: query
      operations:
      - name: get-packaging
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → udi-database-registration.yml

Queries Oracle E-Business Suite for on-hand inventory of a specific material at a given warehouse. Used by supply chain planners to verify component availability for device assembly.

naftiko: '0.5'
info:
  label: Oracle E-Business Suite Inventory Check
  description: Queries Oracle E-Business Suite for on-hand inventory of a specific material at a given warehouse. Used by supply chain planners to verify component availability for device assembly.
  tags:
  - inventory
  - supply-chain
  - oracle-e-business-suite
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: check-inventory
      description: Look up on-hand inventory quantity for a material at a specific warehouse in Oracle EBS.
      inputParameters:
      - name: item_number
        in: body
        type: string
        description: The Oracle item number for the material or component.
      - name: warehouse_code
        in: body
        type: string
        description: The Oracle warehouse/organization code.
      call: oracle-ebs.get-onhand
      with:
        item_number: '{{item_number}}'
        organization_code: '{{warehouse_code}}'
      outputParameters:
      - name: quantity_on_hand
        type: number
        mapping: $.OnhandQuantity
      - name: uom
        type: string
        mapping: $.PrimaryUOM
      - name: subinventory
        type: string
        mapping: $.Subinventory
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://bsci-ebs.oraclecloud.com/webservices/rest/inventory/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: onhand
      path: /onhand?ItemNumber={{item_number}}&OrganizationCode={{organization_code}}
      inputParameters:
      - name: item_number
        in: query
      - name: organization_code
        in: query
      operations:
      - name: get-onhand
        method: GET
Open in Framework → View in Fleet → oracle-e-business-suite-inventory-check.yml

Queries Oracle E-Business Suite for lot genealogy data of a medical device component, returning parent and child lot relationships.

naftiko: '0.5'
info:
  label: Oracle EBS Lot Genealogy Lookup
  description: Queries Oracle E-Business Suite for lot genealogy data of a medical device component, returning parent and child lot relationships.
  tags:
  - manufacturing
  - lot-tracking
  - oracle
  - oracle-e-business-suite
capability:
  exposes:
  - type: mcp
    namespace: lot-genealogy
    port: 8080
    tools:
    - name: get-lot-genealogy
      description: Look up lot genealogy by lot number and item number in Oracle EBS.
      inputParameters:
      - name: lot_number
        in: body
        type: string
        description: The manufacturing lot number.
      - name: item_number
        in: body
        type: string
        description: The inventory item number.
      call: oracle.get-lot-genealogy
      with:
        lot_number: '{{lot_number}}'
        item_number: '{{item_number}}'
      outputParameters:
      - name: parent_lots
        type: array
        mapping: $.ParentLots
      - name: child_lots
        type: array
        mapping: $.ChildLots
      - name: creation_date
        type: string
        mapping: $.CreationDate
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://bsci-ebs.oracle.com/webservices/rest/lot_genealogy
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: lots
      path: /lots?lot_number={{lot_number}}&item_number={{item_number}}
      inputParameters:
      - name: lot_number
        in: query
      - name: item_number
        in: query
      operations:
      - name: get-lot-genealogy
        method: GET
Open in Framework → View in Fleet → oracle-ebs-lot-genealogy-lookup.yml

Retrieves distributor order status from SAP, checks shipping details in Oracle EBS, and notifies the sales team via Salesforce Chatter.

naftiko: '0.5'
info:
  label: Distributor Order Fulfillment Tracker
  description: Retrieves distributor order status from SAP, checks shipping details in Oracle EBS, and notifies the sales team via Salesforce Chatter.
  tags:
  - supply-chain
  - order-fulfillment
  - sap
  - oracle
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: order-fulfillment
    port: 8080
    tools:
    - name: track-distributor-order
      description: Track distributor order across SAP and Oracle, notify sales team.
      inputParameters:
      - name: sales_order
        in: body
        type: string
        description: SAP sales order number.
      - name: distributor_id
        in: body
        type: string
        description: Distributor account ID.
      steps:
      - name: get-order-status
        type: call
        call: sap.get-sales-order
        with:
          sales_order: '{{sales_order}}'
      - name: get-shipping
        type: call
        call: oracle.get-shipment
        with:
          order_ref: '{{sales_order}}'
      - name: notify-sales
        type: call
        call: salesforce.post-chatter
        with:
          account_id: '{{distributor_id}}'
          text: 'Order {{sales_order}} status: {{get-order-status.status}}. Shipment: {{get-shipping.tracking_number}}. ETA: {{get-shipping.estimated_delivery}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /A_SalesOrder('{{sales_order}}')
      inputParameters:
      - name: sales_order
        in: path
      operations:
      - name: get-sales-order
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://bsci-ebs.oracle.com/webservices/rest/shipping
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: shipments
      path: /shipments?order_ref={{order_ref}}
      inputParameters:
      - name: order_ref
        in: query
      operations:
      - name: get-shipment
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://bsci.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: chatter
      path: /chatter/feeds/record/{{account_id}}/feed-elements
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: post-chatter
        method: POST
Open in Framework → View in Fleet → distributor-order-fulfillment-tracker.yml

Checks the last refresh status of a Power BI dataset, returning refresh type, start time, end time, and status.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Status
  description: Checks the last refresh status of a Power BI dataset, returning refresh type, start time, end time, and status.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: powerbi-admin
    port: 8080
    tools:
    - name: get-refresh-status
      description: Get the last refresh status for a Power BI dataset.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Power BI workspace (group) ID.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.get-refresh-history
      with:
        group_id: '{{group_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: refresh_type
        type: string
        mapping: $.value[0].refreshType
      - 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/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-status.yml

Pulls catheter performance test data, compares against benchmarks in Databricks, and publishes results to Tableau.

naftiko: '0.5'
info:
  label: Catheter Performance Benchmarking Pipeline
  description: Pulls catheter performance test data, compares against benchmarks in Databricks, and publishes results to Tableau.
  tags:
  - r-and-d
  - performance-testing
  - databricks
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: catheter-benchmarking
    port: 8080
    tools:
    - name: benchmark-catheter-performance
      description: Pull test data, compare against benchmarks, and publish to Tableau.
      inputParameters:
      - name: catheter_model
        in: body
        type: string
        description: Catheter model identifier.
      - name: test_batch_id
        in: body
        type: string
        description: Test batch identifier.
      steps:
      - name: run-benchmark
        type: call
        call: databricks.run-job
        with:
          job_id: catheter_benchmark
          model: '{{catheter_model}}'
          batch: '{{test_batch_id}}'
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          datasource_id: catheter_performance_{{catheter_model}}
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://bsci.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://bsci-tableau.corp.net/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-extract
        method: POST
Open in Framework → View in Fleet → catheter-performance-benchmarking-pipeline.yml

Retrieves the approved device label from SharePoint, creates translation tasks in Jira for each target language, and tracks progress in Confluence.

naftiko: '0.5'
info:
  label: Device Labeling Translation Workflow
  description: Retrieves the approved device label from SharePoint, creates translation tasks in Jira for each target language, and tracks progress in Confluence.
  tags:
  - regulatory
  - labeling
  - sharepoint
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: labeling-translation
    port: 8080
    tools:
    - name: initiate-label-translation
      description: Retrieve label, create translation tasks, and track in Confluence.
      inputParameters:
      - name: label_document_id
        in: body
        type: string
        description: SharePoint document ID for the approved label.
      - name: target_languages
        in: body
        type: string
        description: Comma-separated target language codes.
      - name: device_code
        in: body
        type: string
        description: Device product code.
      steps:
      - name: get-label
        type: call
        call: sharepoint.get-document
        with:
          document_id: '{{label_document_id}}'
      - name: create-tasks
        type: call
        call: jira.create-issue
        with:
          project: LBL
          issuetype: Task
          summary: Translate label — {{device_code}} — {{target_languages}}
          description: 'Label: {{get-label.name}}. Languages: {{target_languages}}.'
      - name: create-tracker
        type: call
        call: confluence.create-page
        with:
          space: LBL
          title: Translation Tracker — {{device_code}} — {{get-label.name}}
          content: 'Label: {{get-label.name}}. Languages: {{target_languages}}. Jira: {{create-tasks.key}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/bsci.sharepoint.com
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /drive/items/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bsci.atlassian.net/rest/api/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://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → device-labeling-translation-workflow.yml

Monitors Azure Data Factory pipeline runs, retrieves execution status, and alerts the data engineering team via Microsoft Teams when failures occur.

naftiko: '0.5'
info:
  label: Azure Data Factory ETL Pipeline Monitor
  description: Monitors Azure Data Factory pipeline runs, retrieves execution status, and alerts the data engineering team via Microsoft Teams when failures occur.
  tags:
  - engineering
  - etl
  - azure-data-factory
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: etl-monitoring
    port: 8080
    tools:
    - name: monitor-etl-pipeline
      description: Monitor ADF pipeline runs and alert on failures.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: Azure Data Factory pipeline name.
      - name: factory_name
        in: body
        type: string
        description: ADF factory name.
      steps:
      - name: get-pipeline-status
        type: call
        call: adf.get-pipeline-runs
        with:
          factory_name: '{{factory_name}}'
          pipeline_name: '{{pipeline_name}}'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: data_engineering
          text: 'ETL Pipeline Alert: {{pipeline_name}} in {{factory_name}}. Status: {{get-pipeline-status.status}}. Duration: {{get-pipeline-status.duration_minutes}} min. Records: {{get-pipeline-status.rows_processed}}.'
  consumes:
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/bsci-sub/resourceGroups/bsci-rg/providers/Microsoft.DataFactory/factories
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipeline-runs
      path: /{{factory_name}}/pipelineruns?api-version=2018-06-01
      inputParameters:
      - name: factory_name
        in: path
      operations:
      - name: get-pipeline-runs
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-data-factory-etl-pipeline-monitor.yml

Collects design control artifacts from Jira, verification test results from Confluence, and risk analysis documents from SharePoint to assemble a design history file summary and post it to a Box archive.

naftiko: '0.5'
info:
  label: Design History File Assembly
  description: Collects design control artifacts from Jira, verification test results from Confluence, and risk analysis documents from SharePoint to assemble a design history file summary and post it to a Box archive.
  tags:
  - design-control
  - dhf
  - jira
  - confluence
  - sharepoint
  - box
capability:
  exposes:
  - type: mcp
    namespace: design-history
    port: 8080
    tools:
    - name: assemble-dhf
      description: Given a device project key, collect design inputs from Jira, test reports from Confluence, risk documents from SharePoint, and archive to Box.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key for the device development project.
      - name: device_name
        in: body
        type: string
        description: Human-readable device name for labeling the archive.
      steps:
      - name: get-design-issues
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND issuetype in ('Design Input', 'Design Output', 'Design Verification')
      - name: get-test-reports
        type: call
        call: confluence.search-content
        with:
          cql: space = '{{project_key}}' AND label = 'verification-report'
      - name: get-risk-docs
        type: call
        call: sharepoint.get-folder
        with:
          site_id: design_control
          folder_path: RiskAnalysis/{{project_key}}
      - name: create-archive
        type: call
        call: box.create-folder
        with:
          parent_id: dhf_archives
          name: DHF_{{project_key}}_{{device_name}}
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bsci.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://bsci.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: get-folder
        method: GET
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
Open in Framework → View in Fleet → design-history-file-assembly.yml

Queries ServiceNow for equipment calibration records nearing due date, retrieves the equipment master from SAP, creates calibration work orders, and notifies the maintenance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Equipment Calibration Due Orchestrator
  description: Queries ServiceNow for equipment calibration records nearing due date, retrieves the equipment master from SAP, creates calibration work orders, and notifies the maintenance team in Microsoft Teams.
  tags:
  - manufacturing
  - calibration
  - equipment
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: equipment-calibration
    port: 8080
    tools:
    - name: process-calibration-due
      description: Given an equipment ID, check calibration status, pull equipment details from SAP, create a work order, and notify maintenance.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment number.
      - name: plant_code
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: get-equipment
        type: call
        call: sap.get-equipment
        with:
          equipment_id: '{{equipment_id}}'
      - name: check-calibration
        type: call
        call: servicenow.get-calibration
        with:
          query: equipment_id={{equipment_id}}^ORDERBYDESCdue_date
      - name: create-work-order
        type: call
        call: servicenow.create-record
        with:
          table: x_bsci_calibration_wo
          short_description: Calibration due — {{get-equipment.description}} ({{equipment_id}})
          description: 'Equipment: {{get-equipment.description}}. Plant: {{plant_code}}. Last calibration: {{check-calibration.last_calibration_date}}. Due: {{check-calibration.due_date}}.'
          assigned_group: Calibration_Lab
      - name: notify-maintenance
        type: call
        call: msteams.send-message
        with:
          channel_id: calibration-lab-{{plant_code}}
          text: 'Calibration work order {{create-work-order.number}}: {{get-equipment.description}} ({{equipment_id}}) due {{check-calibration.due_date}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bsci-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment('{{equipment_id}}')
      inputParameters:
      - name: equipment_id
        in: path
      operations:
      - name: get-equipment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bsci.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: calibration
      path: /table/x_bsci_calibration
      inputParameters:
      - name: query
        in: query
        parameterName: sysparm_query
      operations:
      - name: get-calibration
        method: GET
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → equipment-calibration-due-orchestrator.yml

Queries Salesforce for clinical trial site enrollment data and publishes a real-time enrollment summary to a Power BI dataset for executive visibility.

naftiko: '0.5'
info:
  label: Clinical Trial Site Enrollment Dashboard
  description: Queries Salesforce for clinical trial site enrollment data and publishes a real-time enrollment summary to a Power BI dataset for executive visibility.
  tags:
  - clinical
  - enrollment
  - salesforce
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: clinical-enrollment
    port: 8080
    tools:
    - name: refresh-enrollment-dashboard
      description: Given a clinical trial ID, pull site enrollment counts from Salesforce and push to Power BI dataset.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: The clinical trial protocol identifier.
      steps:
      - name: get-enrollment
        type: call
        call: sfdc.query-enrollment
        with:
          query: SELECT Site_Name__c, Enrolled__c, Target__c FROM Trial_Site__c WHERE Trial_ID__c = '{{trial_id}}'
      - name: push-to-powerbi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: clinical_enrollment_ds
          table_name: SiteEnrollment
          rows: '{{get-enrollment.records}}'
  consumes:
  - type: http
    namespace: sfdc
    baseUri: https://bsci.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: soql
      path: /query
      inputParameters:
      - name: query
        in: query
        parameterName: q
      operations:
      - name: query-enrollment
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/tables/{{table_name}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      - name: table_name
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → clinical-trial-site-enrollment-dashboard.yml

Queries SAP for budget and actuals data by cost center for a given fiscal period and posts a variance summary to the finance leadership Teams channel.

naftiko: '0.5'
info:
  label: SAP Budget vs Actuals Variance Report
  description: Queries SAP for budget and actuals data by cost center for a given fiscal period and posts a variance summary to the finance leadership Teams 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 actuals vs. budget by cost center and post a variance summary to the finance Teams channel. Use monthly for budget review meetings.
      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: msteams.post-channel-message
        with:
          channel_id: $secrets.finance_leadership_channel_id
          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://bms-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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-budget-vs-actuals-variance-report.yml

Initiates a controlled document approval workflow in Veeva Vault for an SOP or regulatory document, tracks approver assignments, and notifies approvers via Teams.

naftiko: '0.5'
info:
  label: Veeva Vault Document Approval Workflow
  description: Initiates a controlled document approval workflow in Veeva Vault for an SOP or regulatory document, tracks approver assignments, and notifies approvers via Teams.
  tags:
  - regulatory
  - veeva
  - microsoft-teams
  - document-management
  - approval
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: document-ops
    port: 8080
    tools:
    - name: initiate-document-approval
      description: Given a Veeva Vault document ID and list of approver emails, submit the document for approval in Vault, assign approvers, and send Teams notifications to each approver. Use for SOP revisions, regulatory filings, and quality document approvals.
      inputParameters:
      - name: vault_document_id
        in: body
        type: string
        description: The Veeva Vault document ID to submit for approval.
      - name: approver_emails
        in: body
        type: string
        description: Comma-separated list of approver email addresses.
      - name: due_date
        in: body
        type: string
        description: The approval due date in ISO 8601 format.
      steps:
      - name: submit-for-approval
        type: call
        call: veeva.submit-document-approval
        with:
          document_id: '{{vault_document_id}}'
      - name: notify-approvers
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_emails}}'
          text: 'Document {{vault_document_id}} requires your approval in Veeva Vault by {{due_date}}. Workflow: {{submit-for-approval.workflow_id}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://bms.veevavault.com/api/v23.3
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: document-workflows
      path: /objects/documents/{{document_id}}/lifecycles
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: submit-document-approval
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → veeva-vault-document-approval-workflow.yml

When a new supplier is approved by procurement, creates the supplier record in SAP Ariba, triggers the supplier qualification survey, and notifies the procurement team via Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Onboarding
  description: When a new supplier is approved by procurement, creates the supplier record in SAP Ariba, triggers the supplier qualification survey, and notifies the procurement team via Teams.
  tags:
  - procurement
  - sap-ariba
  - microsoft-teams
  - supplier-management
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 procurement team in Teams. Use when a new supplier relationship is approved.
      inputParameters:
      - name: supplier_name
        in: body
        type: string
        description: The legal name of the supplier company.
      - 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 UNSPSC 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-qualification-survey
        with:
          supplier_id: '{{create-supplier.id}}'
      - name: notify-procurement
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.procurement_channel_id
          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-qualification-survey
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-onboarding.yml

When a new Salesforce lead is created from a medical conference or webinar, enriches the record with firmographic data and routes to the appropriate field sales representative based on territory mapping.

naftiko: '0.5'
info:
  label: Salesforce CRM New Lead Routing
  description: When a new Salesforce lead is created from a medical conference or webinar, enriches the record with firmographic data and routes to the appropriate field sales representative based on territory mapping.
  tags:
  - crm
  - sales
  - salesforce
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: crm-ops
    port: 8080
    tools:
    - name: route-new-lead
      description: Given a Salesforce lead ID from a marketing event, retrieve the lead details, assign to the correct territory-based sales representative, and update the lead source field. Use for automated lead routing from conferences and digital campaigns.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce Lead ID (18-character).
      - name: territory_code
        in: body
        type: string
        description: The sales territory code for routing, e.g. 'NE-ONCO-01'.
      steps:
      - name: get-lead
        type: call
        call: salesforce.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: update-lead
        type: call
        call: salesforce-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          Territory__c: '{{territory_code}}'
          Status: Working
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://bms.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://bms.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead-update
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-crm-new-lead-routing.yml

Fetches the current phase and milestone status for a clinical trial program from Veeva Vault, creates a Jira tracking task for the clinical operations team, and notifies stakeholders via Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Milestone Tracker
  description: Fetches the current phase and milestone status for a clinical trial program from Veeva Vault, creates a Jira tracking task for the clinical operations team, and notifies stakeholders via Teams.
  tags:
  - clinical-trials
  - veeva
  - jira
  - microsoft-teams
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: track-trial-milestone
      description: Given a Veeva Vault study ID and milestone name, retrieve current milestone status, create a Jira tracking task for the clinical operations team, and notify the study lead via Teams. Use for clinical trial milestone monitoring and escalation.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The Veeva Vault clinical study ID.
      - name: milestone_name
        in: body
        type: string
        description: The clinical milestone name, e.g. 'First Patient In', 'Last Patient Out', 'Database Lock'.
      steps:
      - name: get-milestone
        type: call
        call: veeva.get-study-milestone
        with:
          study_id: '{{study_id}}'
          milestone: '{{milestone_name}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: CLIN
          issuetype: Task
          summary: 'Milestone update: {{milestone_name}} for study {{study_id}}'
          description: 'Status: {{get-milestone.status}}

            Planned date: {{get-milestone.planned_date}}

            Actual date: {{get-milestone.actual_date}}'
      - name: notify-lead
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.clinical_ops_channel_id
          text: 'Trial {{study_id}} — {{milestone_name}}: {{get-milestone.status}}. Jira: {{create-task.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://bms.veevavault.com/api/v23.3
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: study-milestones
      path: /objects/study__v/{{study_id}}/milestones
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-study-milestone
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bms.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-milestone-tracker.yml

When GitHub Advanced Security reports a new critical vulnerability in a repository, creates a Jira security ticket and pages the responsible security engineering team via PagerDuty.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Triage
  description: When GitHub Advanced Security reports a new critical vulnerability in a repository, creates a Jira security ticket and pages the responsible security engineering team via PagerDuty.
  tags:
  - devops
  - security
  - github
  - jira
  - pagerduty
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: triage-security-vulnerability
      description: Given a GitHub repository, CVE ID, and severity level, create a Jira security ticket with full vulnerability context and trigger a PagerDuty alert for the security engineering team. Use for critical and high-severity CVE findings.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. 'bms/genomics-pipeline'.
      - name: cve_id
        in: body
        type: string
        description: The CVE identifier, e.g. 'CVE-2025-1234'.
      - name: severity
        in: body
        type: string
        description: 'Severity level: ''critical'', ''high'', ''medium'', ''low''.'
      steps:
      - name: create-sec-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: '[{{severity}}] {{cve_id}} in {{repo}}'
          description: 'Repository: {{repo}}

            CVE: {{cve_id}}

            Severity: {{severity}}'
      - name: page-security
        type: call
        call: pagerduty.create-incident
        with:
          title: Security vulnerability {{cve_id}} in {{repo}} — {{severity}}
          service_id: $secrets.pagerduty_security_service_id
          body: 'Jira: {{create-sec-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bms.atlassian.net/rest/api/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
Open in Framework → View in Fleet → github-security-vulnerability-triage.yml

When a new adverse event case is submitted through the safety reporting system, creates a Veeva Vault safety case record and alerts the pharmacovigilance team via Teams with a compliance deadline reminder.

naftiko: '0.5'
info:
  label: Pharmacovigilance Adverse Event Reporter
  description: When a new adverse event case is submitted through the safety reporting system, creates a Veeva Vault safety case record and alerts the pharmacovigilance team via Teams with a compliance deadline reminder.
  tags:
  - pharmacovigilance
  - safety
  - veeva
  - microsoft-teams
  - compliance
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: pv-ops
    port: 8080
    tools:
    - name: report-adverse-event
      description: Given an adverse event case ID, drug name, and reporter contact, create a Veeva Vault safety case record and notify the pharmacovigilance team in Teams with the 15-day regulatory deadline. Use for post-market safety reporting.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The internal adverse event case identifier.
      - name: drug_name
        in: body
        type: string
        description: The BMS product name involved in the adverse event.
      - name: seriousness
        in: body
        type: string
        description: 'Seriousness classification: ''Serious'' or ''Non-Serious''.'
      steps:
      - name: create-vault-case
        type: call
        call: veeva.create-safety-case
        with:
          case_id: '{{case_id}}'
          product: '{{drug_name}}'
          seriousness: '{{seriousness}}'
      - name: notify-pv-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.pv_team_channel_id
          text: New {{seriousness}} AE case {{case_id}} for {{drug_name}} submitted to Vault ({{create-vault-case.doc_id}}). 15-day deadline applies.
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://bms.veevavault.com/api/v23.3
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: safety-cases
      path: /objects/safety_case__v
      operations:
      - name: create-safety-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-adverse-event-reporter.yml

Runs data quality checks on clinical trial data in Snowflake, flags records with missing or out-of-range values, and creates Jira tasks for the data governance team.

naftiko: '0.5'
info:
  label: Snowflake Clinical Data Quality Monitor
  description: Runs data quality checks on clinical trial data in Snowflake, flags records with missing or out-of-range values, and creates Jira tasks for the data governance team.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - data-quality
  - clinical-trials
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-clinical-data-quality
      description: Given a Snowflake schema and clinical study ID, execute data quality validation rules and create Jira tasks for any failing checks. Use for automated data quality gates before database lock.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier to scope the quality checks.
      - name: snowflake_schema
        in: body
        type: string
        description: The Snowflake schema containing clinical trial data, e.g. 'CLINICAL.STUDY_CA125'.
      steps:
      - name: run-checks
        type: call
        call: snowflake.execute-quality-checks
        with:
          schema: '{{snowflake_schema}}'
          study_id: '{{study_id}}'
      - name: create-dq-task
        type: call
        call: jira.create-issue
        with:
          project_key: DG
          issuetype: Task
          summary: 'Data quality issues in study {{study_id}}: {{run-checks.failed_count}} checks failed'
          description: 'Schema: {{snowflake_schema}}

            Failed checks: {{run-checks.failed_count}}

            Details: {{run-checks.summary}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bms.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: execute-quality-checks
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bms.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-data-quality-monitor.yml

When a Datadog monitor for a production service crosses a critical threshold, fetches monitor details and creates a PagerDuty incident routed to the responsible on-call team.

naftiko: '0.5'
info:
  label: Datadog Production Alert Escalation
  description: When a Datadog monitor for a production service crosses a critical threshold, fetches monitor details and creates a PagerDuty incident routed to the responsible on-call team.
  tags:
  - observability
  - datadog
  - pagerduty
  - incident-response
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: escalate-monitor-alert
      description: Given a Datadog monitor ID in ALERT state and the responsible PagerDuty service ID, fetch monitor details and create a PagerDuty incident. Use for any production monitor requiring on-call response.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: The Datadog monitor ID that entered ALERT state.
      - name: pagerduty_service_id
        in: body
        type: string
        description: The PagerDuty service ID for routing the incident.
      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}}'
  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
Open in Framework → View in Fleet → datadog-production-alert-escalation.yml

Given a set of PubMed article IDs for a drug compound, uses Anthropic Claude to generate structured research summaries and stores them in Snowflake for the medical affairs team.

naftiko: '0.5'
info:
  label: AI-Assisted Scientific Literature Summarizer
  description: Given a set of PubMed article IDs for a drug compound, uses Anthropic Claude to generate structured research summaries and stores them in Snowflake for the medical affairs team.
  tags:
  - ai
  - automation
  - anthropic
  - snowflake
  - medical-affairs
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: ai-research
    port: 8080
    tools:
    - name: summarize-literature
      description: Given a BMS compound name and list of PubMed article IDs, generate structured clinical evidence summaries via Anthropic Claude and store in Snowflake for medical affairs access. Use for competitive intelligence and evidence synthesis.
      inputParameters:
      - name: compound_name
        in: body
        type: string
        description: The BMS drug or compound name, e.g. 'Opdivo', 'Revlimid'.
      - name: article_ids
        in: body
        type: string
        description: Comma-separated PubMed article IDs to summarize.
      steps:
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a pharmaceutical research summarizer. Create structured summaries with sections for efficacy, safety, and patient population.
          content: 'Summarize the following clinical evidence for {{compound_name}}: article IDs {{article_ids}}'
      - name: store-summaries
        type: call
        call: snowflake.insert-rows
        with:
          table: MEDICAL_AFFAIRS.LITERATURE_SUMMARIES
          data: '{{generate-summary.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: snowflake
    baseUri: https://bms.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: rows
      path: /databases/bms/schemas/medical_affairs/tables/{{table}}/insertRows
      inputParameters:
      - name: table
        in: path
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → ai-assisted-scientific-literature-summarizer.yml

Fetches all users assigned to a GxP-regulated Okta application, generates an access review report, and creates a ServiceNow review task for the compliance team.

naftiko: '0.5'
info:
  label: Okta User Access Review for GxP Systems
  description: Fetches all users assigned to a GxP-regulated Okta application, generates an access review report, and creates a ServiceNow review task for the compliance team.
  tags:
  - identity
  - security
  - okta
  - servicenow
  - compliance
  - gxp
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-compliance
    port: 8080
    tools:
    - name: run-gxp-access-review
      description: Given an Okta GxP application ID and ServiceNow assignment group, list all application users, compile an access roster, and create a ServiceNow task for the compliance team to review. Use for quarterly GxP system access reviews.
      inputParameters:
      - name: okta_app_id
        in: body
        type: string
        description: The Okta application ID for the GxP-regulated system.
      - name: assignment_group
        in: body
        type: string
        description: The ServiceNow assignment group for the compliance 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: 'GxP access review: {{okta_app_id}} — {{list-app-users.count}} users'
          assigned_group: '{{assignment_group}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://bms.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://bms.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-user-access-review-for-gxp-systems.yml

Identifies SAP Concur expense reports that have been pending approval for more than 5 days, and sends a reminder to the approving manager via Teams.

naftiko: '0.5'
info:
  label: Concur Expense Report Approval Escalation
  description: Identifies SAP Concur expense reports that have been pending approval for more than 5 days, and sends a reminder to the approving manager via Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: expense-ops
    port: 8080
    tools:
    - name: escalate-pending-expenses
      description: Retrieve expense reports pending approval for more than the specified number of days from SAP Concur, and send reminder messages to the pending approvers via Teams. Use for weekly expense approval monitoring.
      inputParameters:
      - name: pending_days
        in: body
        type: integer
        description: Minimum number of days an expense report must be pending to trigger a reminder.
      steps:
      - name: get-pending-reports
        type: call
        call: concur.list-pending-reports
        with:
          approvalStatusCode: A_PEND
          limit: '50'
      - name: notify-approvers
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-pending-reports.approver_email}}'
          text: 'Reminder: You have {{get-pending-reports.count}} expense report(s) pending approval in SAP Concur. Please review at your earliest convenience.'
  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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → concur-expense-report-approval-escalation.yml

When Azure Cost Management detects a spend anomaly for a subscription, creates a Jira ticket for the cloud platform team and posts an alert to the FinOps Teams channel.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Responder
  description: When Azure Cost Management detects a spend anomaly for a subscription, creates a Jira ticket for the cloud platform team and posts an alert to the FinOps Teams channel.
  tags:
  - cloud
  - finops
  - azure
  - jira
  - microsoft-teams
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: finops-ops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an Azure subscription ID, anomaly detection alert, and the owning team name, retrieve cost breakdown details, create a Jira ticket, and alert the FinOps channel in Teams. Use when cloud spend exceeds expected variance.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID where the anomaly was detected.
      - name: anomaly_amount
        in: body
        type: number
        description: The dollar amount above the expected baseline.
      - name: team_name
        in: body
        type: string
        description: The owning team name for Jira routing.
      steps:
      - name: get-cost-detail
        type: call
        call: azure.get-subscription-costs
        with:
          subscription_id: '{{subscription_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: FINOPS
          issuetype: Task
          summary: 'Azure cost anomaly: {{subscription_id}} exceeded by ${{anomaly_amount}}'
          description: 'Subscription: {{subscription_id}}

            Overage: ${{anomaly_amount}}

            Team: {{team_name}}'
      - name: notify-finops
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.finops_channel_id
          text: 'Azure cost anomaly on subscription {{subscription_id}}: ${{anomaly_amount}} over baseline. Jira: {{create-ticket.key}}.'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: subscription-costs
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-subscription-costs
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bms.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-responder.yml

When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams, and logs a PagerDuty incident for on-call engineers.

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 Microsoft Teams, and logs a PagerDuty incident for on-call engineers.
  tags:
  - devops
  - cicd
  - github
  - jira
  - microsoft-teams
  - 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 with repo, branch, run ID, and failed job name, create a Jira bug, post a Teams alert, and trigger a PagerDuty incident. Use for automated CI/CD failure triage.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. 'bms/clinical-data-platform'.
      - 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-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.engineering_alerts_channel_id
          text: 'Pipeline failure: {{repo}} on {{branch}} — job {{failed_job}}. Jira: {{create-bug.key}}.'
      - name: create-pd-incident
        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://bms.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-handler.yml

Triggers a Power BI dataset refresh for the regulatory KPI dashboard and notifies the regulatory affairs leadership team via Teams when the refresh is complete.

naftiko: '0.5'
info:
  label: Power BI Regulatory KPI Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the regulatory KPI dashboard and notifies the regulatory affairs leadership team via Teams when the refresh is complete.
  tags:
  - data
  - analytics
  - power-bi
  - microsoft-teams
  - reporting
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: refresh-regulatory-dashboard
      description: Given a Power BI dataset ID and workspace ID, trigger a dataset refresh and send a Teams notification to regulatory leadership when complete. Use before monthly regulatory review meetings.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace (group) ID containing the regulatory dashboard.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-leadership
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.regulatory_leadership_channel_id
          text: Regulatory KPI dashboard dataset {{dataset_id}} has been refreshed and is ready for review.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-regulatory-kpi-dashboard-refresh.yml

Initiates a performance review cycle in Workday for a given division, creates a Jira tracking epic, and notifies HR business partners via Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Kickoff
  description: Initiates a performance review cycle in Workday for a given division, creates a Jira tracking epic, and notifies HR business partners via Teams.
  tags:
  - hr
  - performance-management
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: kickoff-review-cycle
      description: Given a Workday division ID and review cycle period, initiate the performance review process, create a Jira tracking epic, and notify HR business partners in Teams. Use at the start of each semi-annual performance review period.
      inputParameters:
      - name: division_id
        in: body
        type: string
        description: The Workday division or department ID.
      - name: review_period
        in: body
        type: string
        description: The review cycle 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: msteams.post-channel-message
        with:
          channel_id: $secrets.hrbp_channel_id
          text: 'Performance review {{review_period}} initiated for division {{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: /bms/performanceManagement/reviewProcesses
      operations:
      - name: create-review-process
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bms.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-kickoff.yml

When a change request for a validated GxP system is submitted in ServiceNow, retrieves the risk assessment and routes it to the Change Advisory Board via Teams.

naftiko: '0.5'
info:
  label: Change Management Approval Gate
  description: When a change request for a validated GxP system is submitted in ServiceNow, retrieves the risk assessment and routes it to the Change Advisory Board via Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - gxp
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: route-change-request
      description: Given a ServiceNow change request number for a GxP system, retrieve the change details and risk level, notify the CAB in Teams, and update the change record status to under review. Use for all changes to validated pharmaceutical systems.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number, e.g. 'CHG0002345'.
      steps:
      - name: get-change
        type: call
        call: servicenow.get-change
        with:
          number: '{{change_number}}'
      - name: notify-cab
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.cab_channel_id
          text: 'GxP Change Advisory Review: {{change_number}} — {{get-change.short_description}} | Risk: {{get-change.risk}} | System: {{get-change.cmdb_ci}}'
      - 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://bms.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
  - type: http
    namespace: servicenow-update
    baseUri: https://bms.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-patch
      path: /table/change_request/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: patch-change
        method: PATCH
Open in Framework → View in Fleet → change-management-approval-gate.yml

When a hiring manager submits a headcount request in Workday, creates a linked job requisition and posts the opening to LinkedIn Talent Solutions.

naftiko: '0.5'
info:
  label: Workday Open Role Requisition Creator
  description: When a hiring manager submits a headcount request in Workday, creates a linked job requisition and posts the opening to LinkedIn Talent Solutions.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: create-job-requisition
      description: Given a Workday department ID, role title, grade level, and hiring manager ID, create a job requisition in Workday and publish the job posting to LinkedIn. Use when a headcount request is approved.
      inputParameters:
      - name: department_id
        in: body
        type: string
        description: The Workday department ID for the open role.
      - name: role_title
        in: body
        type: string
        description: The job title for the open position.
      - name: hiring_manager_id
        in: body
        type: string
        description: The Workday worker ID of the hiring manager.
      steps:
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{hiring_manager_id}}'
      - name: create-requisition
        type: call
        call: workday-rec.create-job-req
        with:
          department_id: '{{department_id}}'
          title: '{{role_title}}'
          manager_id: '{{hiring_manager_id}}'
      - name: post-linkedin
        type: call
        call: linkedin.create-job-posting
        with:
          title: '{{role_title}}'
          company_id: $secrets.bms_linkedin_company_id
          req_id: '{{create-requisition.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: /bms/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: workday-rec
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /bms/recruiting/jobRequisitions
      operations:
      - name: create-job-req
        method: POST
  - 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
Open in Framework → View in Fleet → workday-open-role-requisition-creator.yml

Generates a weekly sprint status digest for regulatory affairs Jira issues and publishes to the regulatory leadership Teams channel.

naftiko: '0.5'
info:
  label: Jira Regulatory Sprint Digest
  description: Generates a weekly sprint status digest for regulatory affairs Jira issues and publishes to the regulatory leadership Teams channel.
  tags:
  - regulatory
  - jira
  - microsoft-teams
  - sprint-planning
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: digest-regulatory-sprint
      description: Given a Jira project key and sprint ID for regulatory affairs, fetch all open issues and their status, then post a structured digest to the regulatory leadership Teams channel. Use weekly for sprint reviews.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key for regulatory work, e.g. 'REGY'.
      - name: sprint_id
        in: body
        type: integer
        description: The Jira sprint ID to digest.
      steps:
      - name: get-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND sprint={{sprint_id}}
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.regulatory_leadership_channel_id
          text: 'Regulatory sprint {{sprint_id}} digest: {{get-issues.total}} issues in scope.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bms.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-regulatory-sprint-digest.yml

When a high-priority ServiceNow incident is raised for a production system, retrieves on-call information from PagerDuty and assigns the ticket, posting full context to the Teams IT operations channel.

naftiko: '0.5'
info:
  label: ServiceNow Incident Triage and On-Call Routing
  description: When a high-priority ServiceNow incident is raised for a production system, retrieves on-call information from PagerDuty and assigns the ticket, posting full context to the Teams IT operations channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: triage-incident
      description: Given a ServiceNow incident number and priority, fetch incident details, find the on-call engineer via PagerDuty, assign the ticket, and post an alert to the IT Teams channel. Use for P1/P2 incidents requiring immediate response.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. 'INC0009876'.
      - name: priority
        in: body
        type: string
        description: 'Priority level: 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: notify-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.it_ops_channel_id
          text: 'P{{priority}} {{incident_number}}: {{get-incident.short_description}} assigned to {{get-oncall.user_name}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bms.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://bms.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-triage-and-on-call-routing.yml

Exports monthly enrollment summary data from Snowflake to Google Sheets for state health plan operations review.

naftiko: '0.5'
info:
  label: Google Sheets Enrollment Summary Exporter
  description: Exports monthly enrollment summary data from Snowflake to Google Sheets for state health plan operations review.
  tags:
  - enrollment
  - reporting
  - snowflake
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: enrollment-reporting
    port: 8080
    tools:
    - name: export-enrollment-summary
      description: Query Snowflake for enrollment data and write results to a Google Sheet.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State abbreviation.
      - name: month
        in: body
        type: string
        description: Report month in YYYY-MM.
      - name: spreadsheet_id
        in: body
        type: string
        description: Google Sheets ID.
      steps:
      - name: fetch-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT plan_code, age_group, gender, COUNT(*) as members, SUM(CASE WHEN new_enrollment THEN 1 ELSE 0 END) as new_members FROM member_enrollment WHERE state='{{state}}' AND enrollment_month='{{month}}' GROUP BY plan_code, age_group, gender
      - name: write-sheet
        type: call
        call: google-sheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: Enrollment!A1
          values: '{{fetch-data.results}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://centene.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: google-sheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
Open in Framework → View in Fleet → google-sheets-enrollment-summary-exporter.yml

Identifies high-risk chronic condition members from Databricks, creates care plans in Salesforce, and sends educational content via WhatsApp.

naftiko: '0.5'
info:
  label: Chronic Condition Management Pipeline
  description: Identifies high-risk chronic condition members from Databricks, creates care plans in Salesforce, and sends educational content via WhatsApp.
  tags:
  - healthcare
  - chronic-care
  - databricks
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: chronic-care
    port: 8080
    tools:
    - name: manage-chronic-conditions
      description: Identify high-risk members and create care plans.
      inputParameters:
      - name: condition
        in: body
        type: string
        description: Chronic condition (diabetes, CHF, COPD, asthma).
      - name: state
        in: body
        type: string
        description: State code.
      steps:
      - name: identify-members
        type: call
        call: databricks.run-job
        with:
          job_id: chronic_risk_stratification
          condition: '{{condition}}'
          state: '{{state}}'
      - name: create-care-plans
        type: call
        call: salesforce.create-care-plans
        with:
          condition: '{{condition}}'
          member_count: '{{identify-members.high_risk_count}}'
      - name: send-education
        type: call
        call: whatsapp.send-broadcast
        with:
          condition: '{{condition}}'
          message: 'Managing your {{condition}}: Free resources and support available. Call 1-800-CENTENE to speak with a nurse about your care plan.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: care-plans
      path: /sobjects/Care_Plan__c
      operations:
      - name: create-care-plans
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-broadcast
        method: POST
Open in Framework → View in Fleet → chronic-condition-management-pipeline.yml

Assigns HIPAA and healthcare compliance training courses in Pluralsight to employees.

naftiko: '0.5'
info:
  label: Pluralsight Healthcare Compliance Training
  description: Assigns HIPAA and healthcare compliance training courses in Pluralsight to employees.
  tags:
  - training
  - compliance
  - pluralsight
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: assign-compliance-training
      description: Assign HIPAA compliance training to an employee in Pluralsight.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: Employee email.
      - name: path_id
        in: body
        type: string
        description: Pluralsight learning path ID.
      - name: due_date
        in: body
        type: string
        description: Due date.
      call: pluralsight.assign-path
      with:
        email: '{{user_email}}'
        path_id: '{{path_id}}'
        due_date: '{{due_date}}'
      outputParameters:
      - name: assignment_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: assignments
      path: /learning-paths/{{path_id}}/assignments
      inputParameters:
      - name: path_id
        in: path
      operations:
      - name: assign-path
        method: POST
Open in Framework → View in Fleet → pluralsight-healthcare-compliance-training.yml

Organizes member appeal documents in Google Drive by state and appeal type for compliance tracking.

naftiko: '0.5'
info:
  label: Google Drive Member Appeal Document Manager
  description: Organizes member appeal documents in Google Drive by state and appeal type for compliance tracking.
  tags:
  - compliance
  - appeals
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: appeal-documents
    port: 8080
    tools:
    - name: organize-appeal-doc
      description: Move an appeal document to the correct Google Drive folder.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Google Drive file ID.
      - name: state
        in: body
        type: string
        description: State.
      - name: appeal_type
        in: body
        type: string
        description: Appeal type.
      call: google-drive.move-file
      with:
        file_id: '{{file_id}}'
        target_folder: appeals_{{state}}_{{appeal_type}}
      outputParameters:
      - name: name
        type: string
        mapping: $.name
  consumes:
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: move-file
        method: PATCH
Open in Framework → View in Fleet → google-drive-member-appeal-document-manager.yml

Pulls utilization data from Teradata, applies clinical criteria in Databricks, and updates case records in ServiceNow.

naftiko: '0.5'
info:
  label: Clinical Utilization Review Pipeline
  description: Pulls utilization data from Teradata, applies clinical criteria in Databricks, and updates case records in ServiceNow.
  tags:
  - healthcare
  - utilization-review
  - teradata
  - databricks
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: utilization-review
    port: 8080
    tools:
    - name: run-utilization-review
      description: Analyze utilization data and apply clinical criteria.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: service_type
        in: body
        type: string
        description: Service type for review.
      steps:
      - name: get-utilization-data
        type: call
        call: teradata.execute-query
        with:
          query: SELECT * FROM utilization WHERE member_id='{{member_id}}' AND service_type='{{service_type}}'
      - name: apply-criteria
        type: call
        call: databricks.run-job
        with:
          job_id: clinical_criteria_engine
          member_id: '{{member_id}}'
      - name: update-case
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_um_review
          short_description: UM Review — {{member_id}} — {{service_type}}
          description: 'Clinical decision: {{apply-criteria.decision}}. Criteria met: {{apply-criteria.criteria_met}}.'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://centene-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → clinical-utilization-review-pipeline.yml

On new member enrollment in the health plan system, creates a ServiceNow onboarding case, provisions a SharePoint folder for member documents, and notifies the care coordination team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Member Enrollment Orchestrator
  description: On new member enrollment in the health plan system, creates a ServiceNow onboarding case, provisions a SharePoint folder for member documents, and notifies the care coordination team via Microsoft Teams.
  tags:
  - healthcare
  - enrollment
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: member-enrollment
    port: 8080
    tools:
    - name: trigger-member-onboarding
      description: Orchestrate new member enrollment across ServiceNow, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Health plan member ID.
      - name: plan_code
        in: body
        type: string
        description: Health plan code.
      - name: effective_date
        in: body
        type: string
        description: Coverage effective date in YYYY-MM-DD.
      - name: state
        in: body
        type: string
        description: State of enrollment.
      steps:
      - name: create-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'New member enrollment: {{member_id}}'
          category: enrollment
          assigned_group: Care_Coordination_{{state}}
          description: New member {{member_id}} enrolled in plan {{plan_code}} effective {{effective_date}} in {{state}}.
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: member_documents
          folder_path: Members/{{member_id}}_{{effective_date}}
      - name: notify-care-team
        type: call
        call: msteams.send-message
        with:
          channel_id: care_coordination_{{state}}
          text: 'New member enrolled: {{member_id}} on plan {{plan_code}}, effective {{effective_date}}. Case: {{create-case.number}}. Documents: {{provision-folder.url}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → member-enrollment-orchestrator.yml

Audits Palo Alto firewall rules governing PHI data flows to ensure compliance with HIPAA network segmentation requirements.

naftiko: '0.5'
info:
  label: Palo Alto Networks PHI Data Flow Auditor
  description: Audits Palo Alto firewall rules governing PHI data flows to ensure compliance with HIPAA network segmentation requirements.
  tags:
  - security
  - hipaa
  - palo-alto-networks
capability:
  exposes:
  - type: mcp
    namespace: phi-security
    port: 8080
    tools:
    - name: audit-phi-firewall-rules
      description: Retrieve firewall rules for PHI network zones from Palo Alto Panorama.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: Device group for PHI zones.
      call: paloalto.get-security-rules
      with:
        device_group: '{{device_group}}'
      outputParameters:
      - name: rules
        type: array
        mapping: $.result.entry
      - name: total_rules
        type: integer
        mapping: $.result.@count
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.centene.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules
      operations:
      - name: get-security-rules
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-phi-data-flow-auditor.yml

Retrieves a member service case from ServiceNow by case number, returning description, status, and assigned agent.

naftiko: '0.5'
info:
  label: ServiceNow Member Case Lookup
  description: Retrieves a member service case from ServiceNow by case number, returning description, status, and assigned agent.
  tags:
  - healthcare
  - member-services
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: member-cases
    port: 8080
    tools:
    - name: get-member-case
      description: Look up a ServiceNow member case by number.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: The ServiceNow case number.
      call: servicenow.get-case
      with:
        case_number: '{{case_number}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.result.short_description
      - name: status
        type: string
        mapping: $.result.state
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case?sysparm_query=number={{case_number}}
      inputParameters:
      - name: case_number
        in: query
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → servicenow-member-case-lookup.yml

Publishes healthcare talent recruitment content on the Centene LinkedIn company page.

naftiko: '0.5'
info:
  label: LinkedIn Healthcare Employer Brand Publisher
  description: Publishes healthcare talent recruitment content on the Centene LinkedIn company page.
  tags:
  - hr
  - employer-branding
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: employer-brand
    port: 8080
    tools:
    - name: publish-linkedin-post
      description: Post employer brand content to the Centene LinkedIn page.
      inputParameters:
      - name: text
        in: body
        type: string
        description: Post content.
      call: linkedin.create-post
      with:
        author: urn:li:organization:{{centene_org_id}}
        text: '{{text}}'
      outputParameters:
      - name: post_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: ugcPosts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → linkedin-healthcare-employer-brand-publisher.yml

Identifies pregnant members from Databricks analytics, assigns care coordinators in Salesforce, and schedules outreach via Microsoft Teams.

naftiko: '0.5'
info:
  label: Maternal Health Care Coordination Pipeline
  description: Identifies pregnant members from Databricks analytics, assigns care coordinators in Salesforce, and schedules outreach via Microsoft Teams.
  tags:
  - healthcare
  - maternal-health
  - databricks
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: maternal-health
    port: 8080
    tools:
    - name: coordinate-maternal-care
      description: Identify pregnant members, assign coordinators, and schedule outreach.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      steps:
      - name: identify-members
        type: call
        call: databricks.run-job
        with:
          job_id: maternal_identification
          state: '{{state}}'
      - name: assign-coordinators
        type: call
        call: salesforce.create-care-plans
        with:
          state: '{{state}}'
          member_count: '{{identify-members.member_count}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: maternal_health_{{state}}
          text: 'Maternal care coordination: {{identify-members.member_count}} new pregnant members identified in {{state}}. Care plans created. Outreach to begin.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: care-plans
      path: /sobjects/Care_Plan__c
      operations:
      - name: create-care-plans
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → maternal-health-care-coordination-pipeline.yml

When a new provider applies for network participation, validates credentials against the NPI registry, creates a Jira tracking ticket, and notifies the credentialing team.

naftiko: '0.5'
info:
  label: Provider Network Credentialing Workflow
  description: When a new provider applies for network participation, validates credentials against the NPI registry, creates a Jira tracking ticket, and notifies the credentialing team.
  tags:
  - provider-network
  - credentialing
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: provider-credentialing
    port: 8080
    tools:
    - name: initiate-credentialing
      description: Start the provider credentialing process with NPI validation, Jira tracking, and team notification.
      inputParameters:
      - name: provider_npi
        in: body
        type: string
        description: Provider National Provider Identifier.
      - name: provider_name
        in: body
        type: string
        description: Provider or practice name.
      - name: specialty
        in: body
        type: string
        description: Medical specialty.
      - name: state
        in: body
        type: string
        description: State of practice.
      steps:
      - name: validate-npi
        type: call
        call: npi-registry.lookup
        with:
          npi: '{{provider_npi}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: CRED
          issue_type: Task
          summary: 'Credentialing: {{provider_name}} (NPI: {{provider_npi}})'
          description: 'New credentialing request for {{provider_name}}, {{specialty}} in {{state}}. NPI verified: {{validate-npi.status}}.'
          priority: Medium
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: credentialing_{{state}}
          text: 'New credentialing request: {{provider_name}} ({{specialty}}) in {{state}}. NPI: {{provider_npi}} - {{validate-npi.status}}. Jira: {{create-ticket.key}}.'
  consumes:
  - type: http
    namespace: npi-registry
    baseUri: https://npiregistry.cms.hhs.gov/api
    authentication:
      type: none
    resources:
    - name: providers
      path: /
      operations:
      - name: lookup
        method: GET
  - type: http
    namespace: jira
    baseUri: https://centene.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → provider-network-credentialing-workflow.yml

Assembles regulatory filing documents from SharePoint, validates data in Teradata, and creates submission tracking in ServiceNow.

naftiko: '0.5'
info:
  label: State Regulatory Filing Workflow
  description: Assembles regulatory filing documents from SharePoint, validates data in Teradata, and creates submission tracking in ServiceNow.
  tags:
  - compliance
  - regulatory-filing
  - sharepoint
  - teradata
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: regulatory-filing
    port: 8080
    tools:
    - name: process-regulatory-filing
      description: Assemble documents, validate data, and track submission.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      - name: filing_type
        in: body
        type: string
        description: Filing type (annual, quarterly, ad-hoc).
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-folder
        with:
          folder_path: Regulatory/{{state}}/{{filing_type}}
      - name: validate-data
        type: call
        call: teradata.execute-query
        with:
          query: SELECT COUNT(*) FROM regulatory_data WHERE state='{{state}}' AND filing_type='{{filing_type}}'
      - name: create-tracking
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_regulatory_filing
          short_description: Regulatory filing — {{state}} — {{filing_type}}
          description: 'Documents: {{get-documents.file_count}}. Data records validated: {{validate-data.record_count}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/centene.sharepoint.com
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /drive/root:/{{folder_path}}:/children
      inputParameters:
      - name: folder_path
        in: path
      operations:
      - name: list-folder
        method: GET
  - type: http
    namespace: teradata
    baseUri: https://centene-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → state-regulatory-filing-workflow.yml

Updates member address in Salesforce, triggers benefit region reassignment in ServiceNow, and sends confirmation via WhatsApp.

naftiko: '0.5'
info:
  label: Member Address Change Workflow
  description: Updates member address in Salesforce, triggers benefit region reassignment in ServiceNow, and sends confirmation via WhatsApp.
  tags:
  - healthcare
  - member-services
  - salesforce
  - servicenow
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: address-change
    port: 8080
    tools:
    - name: process-address-change
      description: Update address, reassign benefits region, and confirm.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: new_address
        in: body
        type: string
        description: New address.
      - name: new_state
        in: body
        type: string
        description: New state code.
      steps:
      - name: update-address
        type: call
        call: salesforce.update-member-address
        with:
          member_id: '{{member_id}}'
          address: '{{new_address}}'
          state: '{{new_state}}'
      - name: reassign-region
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_region_change
          short_description: Region change — {{member_id}} — {{new_state}}
          description: 'New address: {{new_address}}. State: {{new_state}}.'
      - name: confirm-member
        type: call
        call: whatsapp.send-message
        with:
          phone_number: '{{update-address.phone}}'
          message: Your address has been updated. If your new address is in a different service area, your provider network may change. We will send your new ID card within 10 days.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: update-member-address
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → member-address-change-workflow.yml

Queries Datadog for claims processing API latency metrics, returning average response time and error rate.

naftiko: '0.5'
info:
  label: Datadog Claims API Latency Check
  description: Queries Datadog for claims processing API latency metrics, returning average response time and error rate.
  tags:
  - engineering
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: claims-api-monitoring
    port: 8080
    tools:
    - name: check-claims-api-latency
      description: Query Datadog for claims API latency metrics.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The claims API service name.
      call: datadog.query-metrics
      with:
        query: avg:trace.http.request.duration{service:{{service_name}}}
        from: now-1h
        to: now
      outputParameters:
      - name: avg_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
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-claims-api-latency-check.yml

Retrieves current sprint status from Jira for the Centene digital health platform team.

naftiko: '0.5'
info:
  label: Jira Development Sprint Tracker
  description: Retrieves current sprint status from Jira for the Centene digital health platform team.
  tags:
  - development
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: dev-tracking
    port: 8080
    tools:
    - name: get-sprint-progress
      description: Fetch current sprint progress from Jira.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira board ID.
      call: jira.get-active-sprint
      with:
        board_id: '{{board_id}}'
      outputParameters:
      - name: sprint_name
        type: string
        mapping: $.values[0].name
      - name: start_date
        type: string
        mapping: $.values[0].startDate
      - name: end_date
        type: string
        mapping: $.values[0].endDate
  consumes:
  - type: http
    namespace: jira
    baseUri: https://centene.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-active-sprint
        method: GET
Open in Framework → View in Fleet → jira-development-sprint-tracker.yml

Monitors the health of Centene's WebSphere application servers running the claims adjudication engine.

naftiko: '0.5'
info:
  label: WebSphere Claims Engine Health Check
  description: Monitors the health of Centene's WebSphere application servers running the claims adjudication engine.
  tags:
  - infrastructure
  - middleware
  - websphere
capability:
  exposes:
  - type: mcp
    namespace: claims-engine-health
    port: 8080
    tools:
    - name: check-claims-engine
      description: Query WebSphere for claims adjudication engine health.
      inputParameters:
      - name: server_name
        in: body
        type: string
        description: WebSphere server name.
      call: websphere.get-server-status
      with:
        server: '{{server_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.state
      - name: heap_usage_pct
        type: number
        mapping: $.jvm.heap_usage_pct
  consumes:
  - type: http
    namespace: websphere
    baseUri: https://websphere-admin.centene.com/IBMJMXConnectorREST
    authentication:
      type: basic
      username: $secrets.websphere_admin_user
      password: $secrets.websphere_admin_password
    resources:
    - name: servers
      path: /mbeans/WebSphere:type=Server,name={{server}}
      inputParameters:
      - name: server
        in: path
      operations:
      - name: get-server-status
        method: GET
Open in Framework → View in Fleet → websphere-claims-engine-health-check.yml

Creates Zoom meetings for provider network adequacy reviews and credentialing committee sessions.

naftiko: '0.5'
info:
  label: Zoom Provider Network Meeting Scheduler
  description: Creates Zoom meetings for provider network adequacy reviews and credentialing committee sessions.
  tags:
  - meetings
  - provider-network
  - zoom
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: provider-meetings
    port: 8080
    tools:
    - name: schedule-provider-review
      description: Create a Zoom meeting for provider review and send Outlook invites.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: Meeting topic.
      - name: date_time
        in: body
        type: string
        description: Date/time.
      - name: attendees
        in: body
        type: string
        description: Attendee emails.
      steps:
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: '{{topic}}'
          start_time: '{{date_time}}'
          duration: 60
      - name: send-invite
        type: call
        call: outlook.create-event
        with:
          subject: '{{topic}}'
          start_time: '{{date_time}}'
          body: 'Join Zoom: {{create-meeting.join_url}}'
          attendees: '{{attendees}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → zoom-provider-network-meeting-scheduler.yml

Pulls Healthcare Effectiveness Data from Snowflake, calculates HEDIS quality measures, and refreshes the Power BI executive dashboard.

naftiko: '0.5'
info:
  label: HEDIS Quality Measures Dashboard
  description: Pulls Healthcare Effectiveness Data from Snowflake, calculates HEDIS quality measures, and refreshes the Power BI executive dashboard.
  tags:
  - healthcare
  - quality
  - hedis
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: quality-measures
    port: 8080
    tools:
    - name: refresh-hedis-dashboard
      description: Calculate HEDIS measures from Snowflake data and refresh the Power BI quality dashboard.
      inputParameters:
      - name: measurement_year
        in: body
        type: string
        description: HEDIS measurement year.
      - name: state
        in: body
        type: string
        description: State health plan.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      steps:
      - name: calculate-measures
        type: call
        call: snowflake.run-query
        with:
          query: CALL calculate_hedis_measures('{{measurement_year}}', '{{state}}')
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://centene.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → hedis-quality-measures-dashboard.yml

Schedules non-emergency medical transportation from ServiceNow, verifies member eligibility in Salesforce, and sends trip confirmation via WhatsApp.

naftiko: '0.5'
info:
  label: Member Transportation Benefit Workflow
  description: Schedules non-emergency medical transportation from ServiceNow, verifies member eligibility in Salesforce, and sends trip confirmation via WhatsApp.
  tags:
  - healthcare
  - transportation
  - servicenow
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: nemt
    port: 8080
    tools:
    - name: schedule-transportation
      description: Schedule NEMT ride and confirm with member.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: appointment_date
        in: body
        type: string
        description: Appointment date.
      - name: destination
        in: body
        type: string
        description: Destination address.
      steps:
      - name: verify-eligibility
        type: call
        call: salesforce.check-eligibility
        with:
          member_id: '{{member_id}}'
      - name: create-ride
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_nemt
          short_description: NEMT — {{member_id}} — {{appointment_date}}
          description: 'Destination: {{destination}}. Date: {{appointment_date}}.'
      - name: confirm-member
        type: call
        call: whatsapp.send-message
        with:
          phone_number: '{{verify-eligibility.phone}}'
          message: 'Your ride is confirmed for {{appointment_date}} to {{destination}}. Ref: {{create-ride.number}}. Driver will call 30 minutes before pickup.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: check-eligibility
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → member-transportation-benefit-workflow.yml

Retrieves provider payment details from Oracle E-Business Suite by payment ID, returning amount, status, and date.

naftiko: '0.5'
info:
  label: Oracle EBS Provider Payment Lookup
  description: Retrieves provider payment details from Oracle E-Business Suite by payment ID, returning amount, status, and date.
  tags:
  - finance
  - provider-payments
  - oracle
  - oracle-e-business-suite
capability:
  exposes:
  - type: mcp
    namespace: provider-payments
    port: 8080
    tools:
    - name: get-provider-payment
      description: Look up a provider payment in Oracle EBS.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The Oracle payment ID.
      call: oracle.get-payment
      with:
        payment_id: '{{payment_id}}'
      outputParameters:
      - name: amount
        type: number
        mapping: $.Amount
      - name: status
        type: string
        mapping: $.Status
      - name: payment_date
        type: string
        mapping: $.PaymentDate
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://centene-ebs.oracle.com/webservices/rest/payments
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: payments
      path: /payments/{{payment_id}}
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-payment
        method: GET
Open in Framework → View in Fleet → oracle-ebs-provider-payment-lookup.yml

Creates a HIPAA-compliant Zoom meeting for a telehealth session and sends the invite to the member and provider.

naftiko: '0.5'
info:
  label: Zoom Telehealth Session Scheduler
  description: Creates a HIPAA-compliant Zoom meeting for a telehealth session and sends the invite to the member and provider.
  tags:
  - telehealth
  - scheduling
  - zoom
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: telehealth
    port: 8080
    tools:
    - name: schedule-telehealth
      description: Create a HIPAA-compliant Zoom telehealth session and send calendar invites.
      inputParameters:
      - name: member_email
        in: body
        type: string
        description: Member email address.
      - name: provider_email
        in: body
        type: string
        description: Provider email address.
      - name: date_time
        in: body
        type: string
        description: Session date/time in ISO 8601.
      - name: visit_type
        in: body
        type: string
        description: Visit type (primary_care, behavioral_health, specialist).
      steps:
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: 'Telehealth: {{visit_type}}'
          start_time: '{{date_time}}'
          duration: 30
          type: 2
          settings_encryption_type: enhanced_encryption
          settings_waiting_room: true
      - name: send-invite
        type: call
        call: outlook.create-event
        with:
          subject: 'Telehealth Visit: {{visit_type}}'
          start_time: '{{date_time}}'
          body: 'Your telehealth session link: {{create-meeting.join_url}}. Please join 5 minutes early.'
          attendees: '{{member_email}},{{provider_email}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_hipaa_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → zoom-telehealth-session-scheduler.yml

Publishes clinical policy documents to Confluence and notifies the medical affairs team via Teams.

naftiko: '0.5'
info:
  label: Confluence Clinical Policy Publisher
  description: Publishes clinical policy documents to Confluence and notifies the medical affairs team via Teams.
  tags:
  - clinical
  - knowledge-management
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-policies
    port: 8080
    tools:
    - name: publish-clinical-policy
      description: Create or update a clinical policy page in Confluence and notify the medical affairs team.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: title
        in: body
        type: string
        description: Policy title.
      - name: content
        in: body
        type: string
        description: Policy content.
      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.send-message
        with:
          channel_id: medical_affairs
          text: 'Clinical policy published: {{title}}. Review at {{create-page.url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://centene.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → confluence-clinical-policy-publisher.yml

Assigns a primary care provider to a new member using Salesforce, updates eligibility via ServiceNow, and sends welcome notification via WhatsApp.

naftiko: '0.5'
info:
  label: Member PCP Assignment Workflow
  description: Assigns a primary care provider to a new member using Salesforce, updates eligibility via ServiceNow, and sends welcome notification via WhatsApp.
  tags:
  - healthcare
  - pcp-assignment
  - salesforce
  - servicenow
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: pcp-assignment
    port: 8080
    tools:
    - name: assign-pcp
      description: Assign PCP to member and send welcome notification.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: provider_id
        in: body
        type: string
        description: PCP provider ID.
      steps:
      - name: update-assignment
        type: call
        call: salesforce.update-member-pcp
        with:
          member_id: '{{member_id}}'
          pcp_id: '{{provider_id}}'
      - name: update-eligibility
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_pcp_change
          short_description: PCP assignment — {{member_id}}
          description: 'PCP: {{provider_id}}.'
      - name: welcome-member
        type: call
        call: whatsapp.send-message
        with:
          phone_number: '{{update-assignment.member_phone}}'
          message: Welcome to Centene! Your primary care provider is {{update-assignment.pcp_name}}. Call {{update-assignment.pcp_phone}} to schedule your first visit.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: update-member-pcp
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → member-pcp-assignment-workflow.yml

Triggers a Power Automate flow for automated member enrollment processing workflows.

naftiko: '0.5'
info:
  label: Microsoft Power Automate Enrollment Flow
  description: Triggers a Power Automate flow for automated member enrollment processing workflows.
  tags:
  - automation
  - enrollment
  - microsoft-power-automate
capability:
  exposes:
  - type: mcp
    namespace: enrollment-automation
    port: 8080
    tools:
    - name: trigger-enrollment-flow
      description: Trigger a Power Automate enrollment processing flow.
      inputParameters:
      - name: flow_id
        in: body
        type: string
        description: Power Automate flow ID.
      - name: member_batch_id
        in: body
        type: string
        description: Member enrollment batch ID.
      call: power-automate.trigger-flow
      with:
        flow_id: '{{flow_id}}'
        inputs: '{"batch_id": "{{member_batch_id}}"}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.id
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: power-automate
    baseUri: https://flow.microsoft.com/api/v1
    authentication:
      type: bearer
      token: $secrets.power_automate_token
    resources:
    - name: flows
      path: /flows/{{flow_id}}/triggers/manual/run
      inputParameters:
      - name: flow_id
        in: path
      operations:
      - name: trigger-flow
        method: POST
Open in Framework → View in Fleet → microsoft-power-automate-enrollment-flow.yml

Processes member disenrollment from Salesforce, terminates benefits via ServiceNow, and sends notification via WhatsApp.

naftiko: '0.5'
info:
  label: Member Disenrollment Processing Workflow
  description: Processes member disenrollment from Salesforce, terminates benefits via ServiceNow, and sends notification via WhatsApp.
  tags:
  - healthcare
  - disenrollment
  - salesforce
  - servicenow
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: disenrollment
    port: 8080
    tools:
    - name: process-disenrollment
      description: Process member disenrollment and send notification.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: effective_date
        in: body
        type: string
        description: Disenrollment effective date.
      steps:
      - name: get-member
        type: call
        call: salesforce.get-member
        with:
          member_id: '{{member_id}}'
      - name: terminate-benefits
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_disenrollment
          short_description: Disenrollment — {{member_id}} — {{effective_date}}
          description: 'Member: {{get-member.name}}. Effective: {{effective_date}}.'
      - name: notify-member
        type: call
        call: whatsapp.send-message
        with:
          phone_number: '{{get-member.phone}}'
          message: Your health plan coverage will end on {{effective_date}}. Please contact us at 1-800-CENTENE if you have questions about your options.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: get-member
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → member-disenrollment-processing-workflow.yml

Pulls subcontractor metrics from Salesforce, compares against SLAs, and generates performance reports in Power BI.

naftiko: '0.5'
info:
  label: Subcontractor Performance Review Pipeline
  description: Pulls subcontractor metrics from Salesforce, compares against SLAs, and generates performance reports in Power BI.
  tags:
  - compliance
  - subcontractor-management
  - salesforce
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: subcontractor-review
    port: 8080
    tools:
    - name: review-subcontractor
      description: Review subcontractor performance against SLAs.
      inputParameters:
      - name: subcontractor_id
        in: body
        type: string
        description: Subcontractor account ID.
      - name: period
        in: body
        type: string
        description: Review period.
      steps:
      - name: get-metrics
        type: call
        call: salesforce.get-subcontractor-metrics
        with:
          subcontractor_id: '{{subcontractor_id}}'
          period: '{{period}}'
      - name: refresh-report
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: compliance
          dataset_id: subcontractor_performance
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: subcontractors
      path: /sobjects/Subcontractor__c/{{subcontractor_id}}
      inputParameters:
      - name: subcontractor_id
        in: path
      operations:
      - name: get-subcontractor-metrics
        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: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → subcontractor-performance-review-pipeline.yml

Queries Oracle EBS for provider payment status and outstanding check details.

naftiko: '0.5'
info:
  label: Oracle E-Business Suite Provider Payment Status
  description: Queries Oracle EBS for provider payment status and outstanding check details.
  tags:
  - finance
  - provider-payments
  - oracle-ebs
capability:
  exposes:
  - type: mcp
    namespace: provider-payments
    port: 8080
    tools:
    - name: get-provider-payment
      description: Look up provider payment status in Oracle EBS.
      inputParameters:
      - name: provider_id
        in: body
        type: string
        description: Provider ID.
      - name: payment_date
        in: body
        type: string
        description: Payment date.
      call: oracle-ebs.get-payments
      with:
        vendor_id: '{{provider_id}}'
        date: '{{payment_date}}'
      outputParameters:
      - name: payment_status
        type: string
        mapping: $.payment_status
      - name: amount
        type: number
        mapping: $.payment_amount
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://erp.centene.com/webservices/rest/ap_payments
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: payments
      path: /v1/payments
      operations:
      - name: get-payments
        method: GET
Open in Framework → View in Fleet → oracle-e-business-suite-provider-payment-status.yml

Triggers a refresh of the Power BI Medical Loss Ratio dashboard that tracks premium revenue against claims costs by state.

naftiko: '0.5'
info:
  label: Power BI Medical Loss Ratio Dashboard
  description: Triggers a refresh of the Power BI Medical Loss Ratio dashboard that tracks premium revenue against claims costs by state.
  tags:
  - finance
  - mlr
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: mlr-analytics
    port: 8080
    tools:
    - name: refresh-mlr-dashboard
      description: Trigger a Power BI refresh for the Medical Loss Ratio dashboard.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - 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: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-medical-loss-ratio-dashboard.yml

Monitors claims processing SLAs from Datadog, creates alerts in ServiceNow when thresholds are breached, and notifies operations via Microsoft Teams.

naftiko: '0.5'
info:
  label: Claims Processing SLA Monitor Pipeline
  description: Monitors claims processing SLAs from Datadog, creates alerts in ServiceNow when thresholds are breached, and notifies operations via Microsoft Teams.
  tags:
  - operations
  - sla-monitoring
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: claims-sla
    port: 8080
    tools:
    - name: monitor-claims-sla
      description: Monitor claims SLAs and alert on breaches.
      inputParameters:
      - name: claim_type
        in: body
        type: string
        description: Claim type (professional, institutional, pharmacy).
      - name: sla_days
        in: body
        type: integer
        description: SLA threshold in days.
      steps:
      - name: get-sla-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: avg:claims.processing_days{type:{{claim_type}}}
          from: now-24h
          to: now
      - name: create-alert
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_sla_alert
          short_description: Claims SLA alert — {{claim_type}}
          description: 'Average processing: {{get-sla-metrics.avg_days}} days. SLA: {{sla_days}} days.'
      - name: notify-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: claims_operations
          text: 'SLA Alert: {{claim_type}} claims averaging {{get-sla-metrics.avg_days}} days (SLA: {{sla_days}}). Alert: {{create-alert.number}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → claims-processing-sla-monitor-pipeline.yml

Retrieves application health metrics from New Relic for the claims processing API.

naftiko: '0.5'
info:
  label: New Relic Claims API Health Check
  description: Retrieves application health metrics from New Relic for the claims processing API.
  tags:
  - monitoring
  - devops
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: claims-api-health
    port: 8080
    tools:
    - name: check-claims-api
      description: Get error rate and response time for the claims processing API from New Relic.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: New Relic application name.
      call: newrelic.get-app-metrics
      with:
        app_name: '{{app_name}}'
      outputParameters:
      - name: error_rate
        type: number
        mapping: $.application.application_summary.error_rate
      - name: response_time
        type: number
        mapping: $.application.application_summary.response_time
      - name: throughput
        type: number
        mapping: $.application.application_summary.throughput
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications.json
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-claims-api-health-check.yml

When a member grievance is received, creates a Salesforce case, opens a ServiceNow tracking ticket, and notifies the member services supervisor.

naftiko: '0.5'
info:
  label: Member Grievance Case Creator
  description: When a member grievance is received, creates a Salesforce case, opens a ServiceNow tracking ticket, and notifies the member services supervisor.
  tags:
  - member-services
  - grievances
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: member-grievances
    port: 8080
    tools:
    - name: create-grievance
      description: Create a member grievance case across Salesforce and ServiceNow with team notification.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: grievance_type
        in: body
        type: string
        description: Grievance type (quality_of_care, access, billing, service).
      - name: description
        in: body
        type: string
        description: Grievance description.
      - name: state
        in: body
        type: string
        description: State health plan.
      steps:
      - name: create-sf-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'Member Grievance: {{grievance_type}} - {{member_id}}'
          description: '{{description}}'
          type: Grievance
          status: New
          member_id: '{{member_id}}'
      - name: create-snow-ticket
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Grievance: {{grievance_type}} for member {{member_id}}'
          category: grievance
          description: '{{description}}. SF Case: {{create-sf-case.id}}.'
      - name: notify-supervisor
        type: call
        call: msteams.send-message
        with:
          channel_id: member_services_{{state}}
          text: 'New grievance received: {{grievance_type}} from member {{member_id}}. SF Case: {{create-sf-case.id}}. SNOW: {{create-snow-ticket.number}}. Regulatory clock started.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → member-grievance-case-creator.yml

Pulls member health data from the data warehouse via Teradata, runs risk stratification in Databricks, and updates care management in Salesforce.

naftiko: '0.5'
info:
  label: Member Health Risk Assessment Pipeline
  description: Pulls member health data from the data warehouse via Teradata, runs risk stratification in Databricks, and updates care management in Salesforce.
  tags:
  - healthcare
  - risk-assessment
  - teradata
  - databricks
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: health-risk-assessment
    port: 8080
    tools:
    - name: assess-member-risk
      description: Run health risk assessment using claims data and ML models.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Health plan member ID.
      - name: assessment_period
        in: body
        type: string
        description: Assessment period (e.g., last-12-months).
      steps:
      - name: get-health-data
        type: call
        call: teradata.execute-query
        with:
          query: SELECT * FROM member_health_summary WHERE member_id='{{member_id}}'
      - name: run-risk-model
        type: call
        call: databricks.run-job
        with:
          job_id: risk_stratification
          member_id: '{{member_id}}'
      - name: update-care-plan
        type: call
        call: salesforce.update-member
        with:
          member_id: '{{member_id}}'
          risk_score: '{{run-risk-model.risk_score}}'
          risk_tier: '{{run-risk-model.risk_tier}}'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://centene-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: update-member
        method: PATCH
Open in Framework → View in Fleet → member-health-risk-assessment-pipeline.yml

Retrieves the latest build status from Azure DevOps for a healthcare application, returning build number and result.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Check
  description: Retrieves the latest build status from Azure DevOps for a healthcare application, returning build number and result.
  tags:
  - engineering
  - ci-cd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: build-monitoring
    port: 8080
    tools:
    - name: get-build-status
      description: Get the latest Azure DevOps build status.
      inputParameters:
      - name: definition_id
        in: body
        type: string
        description: Build definition ID.
      call: azdevops.get-latest-build
      with:
        definition_id: '{{definition_id}}'
      outputParameters:
      - name: build_number
        type: string
        mapping: $.value[0].buildNumber
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: azdevops
    baseUri: https://dev.azure.com/centene
    authentication:
      type: basic
      username: $secrets.azdevops_user
      password: $secrets.azdevops_pat
    resources:
    - name: builds
      path: /_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: definition_id
        in: query
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status-check.yml

Queries New Relic for member portal application health, returning error rate, throughput, and response time.

naftiko: '0.5'
info:
  label: New Relic Member Portal Health Check
  description: Queries New Relic for member portal application health, returning error rate, throughput, and response time.
  tags:
  - engineering
  - portal-monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: portal-health
    port: 8080
    tools:
    - name: check-portal-health
      description: Get New Relic health metrics for the member portal.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: New Relic application ID.
      call: newrelic.get-app-metrics
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: error_rate
        type: number
        mapping: $.application_summary.error_rate
      - name: throughput
        type: number
        mapping: $.application_summary.throughput
      - name: response_time
        type: number
        mapping: $.application_summary.response_time
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-member-portal-health-check.yml

Creates a complaint case in ServiceNow, retrieves member history from Salesforce, and sends acknowledgment via WhatsApp.

naftiko: '0.5'
info:
  label: Member Complaint Resolution Workflow
  description: Creates a complaint case in ServiceNow, retrieves member history from Salesforce, and sends acknowledgment via WhatsApp.
  tags:
  - healthcare
  - member-complaints
  - servicenow
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: member-complaints
    port: 8080
    tools:
    - name: resolve-member-complaint
      description: Create complaint case, get member history, and acknowledge.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: complaint_description
        in: body
        type: string
        description: Description of the complaint.
      steps:
      - name: get-member
        type: call
        call: salesforce.get-member
        with:
          member_id: '{{member_id}}'
      - name: create-complaint
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_complaint
          short_description: Member complaint — {{member_id}}
          description: '{{complaint_description}}'
      - name: send-acknowledgment
        type: call
        call: whatsapp.send-message
        with:
          phone_number: '{{get-member.phone}}'
          message: 'We received your complaint (Ref: {{create-complaint.number}}). We will resolve it within 30 days. Contact us at 1-800-CENTENE with questions.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: get-member
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → member-complaint-resolution-workflow.yml

Uploads and organizes clinical documents in Box with HIPAA-compliant sharing for care management teams.

naftiko: '0.5'
info:
  label: Box Clinical Document Manager
  description: Uploads and organizes clinical documents in Box with HIPAA-compliant sharing for care management teams.
  tags:
  - clinical
  - document-management
  - box
capability:
  exposes:
  - type: mcp
    namespace: clinical-documents
    port: 8080
    tools:
    - name: upload-clinical-doc
      description: Upload a clinical document to Box with appropriate access controls.
      inputParameters:
      - name: file_name
        in: body
        type: string
        description: Document file name.
      - name: folder_id
        in: body
        type: string
        description: Box folder ID for clinical documents.
      - name: classification
        in: body
        type: string
        description: Document classification (phi, clinical, administrative).
      call: box.upload-file
      with:
        folder_id: '{{folder_id}}'
        file_name: '{{file_name}}'
        classification: '{{classification}}'
      outputParameters:
      - name: file_id
        type: string
        mapping: $.entries[0].id
      - name: shared_link
        type: string
        mapping: $.entries[0].shared_link.url
  consumes:
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → box-clinical-document-manager.yml

Retrieves member details from Salesforce, creates a reissue request in ServiceNow, and sends confirmation via WhatsApp.

naftiko: '0.5'
info:
  label: Member ID Card Reissue Workflow
  description: Retrieves member details from Salesforce, creates a reissue request in ServiceNow, and sends confirmation via WhatsApp.
  tags:
  - healthcare
  - member-services
  - salesforce
  - servicenow
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: id-card-reissue
    port: 8080
    tools:
    - name: reissue-id-card
      description: Process member ID card reissue request.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: reason
        in: body
        type: string
        description: Reissue reason (lost, stolen, name-change).
      steps:
      - name: get-member
        type: call
        call: salesforce.get-member
        with:
          member_id: '{{member_id}}'
      - name: create-request
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_id_card
          short_description: ID card reissue — {{member_id}} — {{reason}}
          description: 'Member: {{get-member.name}}. Reason: {{reason}}.'
      - name: confirm-member
        type: call
        call: whatsapp.send-message
        with:
          phone_number: '{{get-member.phone}}'
          message: 'Your new ID card has been requested (Ref: {{create-request.number}}). You will receive it within 10 business days.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: get-member
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → member-id-card-reissue-workflow.yml

Retrieves payroll summary data from Workday for HR and finance teams across state health plans.

naftiko: '0.5'
info:
  label: Workday Payroll Summary Reporter
  description: Retrieves payroll summary data from Workday for HR and finance teams across state health plans.
  tags:
  - hr
  - payroll
  - workday
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Fetch payroll summary from Workday.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: Pay period.
      - name: department
        in: body
        type: string
        description: Department.
      call: workday.get-payroll
      with:
        period: '{{pay_period}}'
        department: '{{department}}'
      outputParameters:
      - name: total_gross
        type: number
        mapping: $.summary.total_gross_pay
      - name: headcount
        type: integer
        mapping: $.summary.employee_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: payroll
      path: /payroll/summaries
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → workday-payroll-summary-reporter.yml

Monitors Azure Data Factory pipelines that process claims data from state Medicaid systems into the enterprise data warehouse.

naftiko: '0.5'
info:
  label: Azure Data Factory Claims ETL Monitor
  description: Monitors Azure Data Factory pipelines that process claims data from state Medicaid systems into the enterprise data warehouse.
  tags:
  - data-engineering
  - etl
  - azure-data-factory
capability:
  exposes:
  - type: mcp
    namespace: claims-etl
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Check the latest ADF claims processing pipeline run status.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: ADF pipeline name.
      call: adf.get-pipeline-runs
      with:
        pipeline_name: '{{pipeline_name}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.value[0].runId
      - name: status
        type: string
        mapping: $.value[0].status
      - name: duration
        type: string
        mapping: $.value[0].durationInMs
  consumes:
  - type: http
    namespace: adf
    baseUri: https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/centene-data-rg/providers/Microsoft.DataFactory/factories/centene-adf
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: pipeline-runs
      path: /queryPipelineRuns
      operations:
      - name: get-pipeline-runs
        method: POST
Open in Framework → View in Fleet → azure-data-factory-claims-etl-monitor.yml

Retrieves the adjudication status of a healthcare claim from the claims processing system and returns payment details.

naftiko: '0.5'
info:
  label: Claims Adjudication Status Lookup
  description: Retrieves the adjudication status of a healthcare claim from the claims processing system and returns payment details.
  tags:
  - claims
  - healthcare
  - claims-processing
capability:
  exposes:
  - type: mcp
    namespace: claims-management
    port: 8080
    tools:
    - name: get-claim-status
      description: Look up a healthcare claim by claim number and return adjudication status, payment amount, and denial reason if applicable.
      inputParameters:
      - name: claim_number
        in: body
        type: string
        description: Healthcare claim number.
      call: claims.get-claim
      with:
        claim_number: '{{claim_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.claim.adjudication_status
      - name: paid_amount
        type: number
        mapping: $.claim.paid_amount
      - name: denial_reason
        type: string
        mapping: $.claim.denial_reason_code
      - name: provider_name
        type: string
        mapping: $.claim.provider.name
      - name: service_date
        type: string
        mapping: $.claim.service_date
  consumes:
  - type: http
    namespace: claims
    baseUri: https://claims-api.centene.com/v2
    authentication:
      type: bearer
      token: $secrets.claims_api_token
    resources:
    - name: claims
      path: /claims/{{claim_number}}
      inputParameters:
      - name: claim_number
        in: path
      operations:
      - name: get-claim
        method: GET
Open in Framework → View in Fleet → claims-adjudication-status-lookup.yml

Generates a trusted ticket for embedding the claims analytics Tableau dashboard in the internal portal.

naftiko: '0.5'
info:
  label: Tableau Claims Analytics Dashboard
  description: Generates a trusted ticket for embedding the claims analytics Tableau dashboard in the internal portal.
  tags:
  - analytics
  - claims
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: claims-analytics
    port: 8080
    tools:
    - name: get-claims-dashboard
      description: Generate a Tableau trusted ticket for the claims analytics dashboard.
      inputParameters:
      - name: username
        in: body
        type: string
        description: Tableau username.
      call: tableau.get-trusted-ticket
      with:
        username: '{{username}}'
      outputParameters:
      - name: ticket
        type: string
        mapping: $
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.centene.com
    authentication:
      type: basic
      username: $secrets.tableau_admin_user
      password: $secrets.tableau_admin_password
    resources:
    - name: trusted
      path: /trusted
      operations:
      - name: get-trusted-ticket
        method: POST
Open in Framework → View in Fleet → tableau-claims-analytics-dashboard.yml

Runs claims analytics queries against Centene's Teradata data warehouse for historical trend analysis.

naftiko: '0.5'
info:
  label: Teradata Claims Data Warehouse Query
  description: Runs claims analytics queries against Centene's Teradata data warehouse for historical trend analysis.
  tags:
  - analytics
  - claims
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: claims-warehouse
    port: 8080
    tools:
    - name: query-claims-warehouse
      description: Run a claims analytics query against Teradata.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State.
      - name: claim_type
        in: body
        type: string
        description: Claim type (medical, pharmacy, dental, behavioral).
      - name: period
        in: body
        type: string
        description: Reporting period.
      call: teradata.run-query
      with:
        query: SELECT claim_type, COUNT(*) as claim_count, SUM(paid_amount) as total_paid, AVG(paid_amount) as avg_paid FROM claims_history WHERE state='{{state}}' AND claim_type='{{claim_type}}' AND claim_period='{{period}}' GROUP BY claim_type
      outputParameters:
      - name: results
        type: array
        mapping: $.results
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.centene.com/api/query/v1
    authentication:
      type: basic
      username: $secrets.teradata_user
      password: $secrets.teradata_password
    resources:
    - name: queries
      path: /tdrest/systems/centene_edw/queries
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → teradata-claims-data-warehouse-query.yml

Analyzes CMS Star Ratings data in Databricks, identifies improvement areas, and generates action plans in Confluence.

naftiko: '0.5'
info:
  label: Star Ratings Improvement Pipeline
  description: Analyzes CMS Star Ratings data in Databricks, identifies improvement areas, and generates action plans in Confluence.
  tags:
  - healthcare
  - star-ratings
  - databricks
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: star-ratings
    port: 8080
    tools:
    - name: analyze-star-ratings
      description: Analyze Star Ratings and generate improvement plans.
      inputParameters:
      - name: plan_id
        in: body
        type: string
        description: Health plan identifier.
      - name: measurement_year
        in: body
        type: string
        description: Measurement year.
      steps:
      - name: run-analysis
        type: call
        call: databricks.run-job
        with:
          job_id: star_ratings_analysis
          plan_id: '{{plan_id}}'
          year: '{{measurement_year}}'
      - name: publish-action-plan
        type: call
        call: confluence.create-page
        with:
          space: QUALITY
          title: Star Ratings Action Plan — {{plan_id}} — {{measurement_year}}
          content: 'Current rating: {{run-analysis.current_rating}}. Target: {{run-analysis.target_rating}}. Top improvement areas: {{run-analysis.top_gaps}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://centene.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → star-ratings-improvement-pipeline.yml

Calculates VBC quality metrics from Teradata, compares against contractual targets, and generates provider scorecards in Power BI.

naftiko: '0.5'
info:
  label: Value Based Care Performance Pipeline
  description: Calculates VBC quality metrics from Teradata, compares against contractual targets, and generates provider scorecards in Power BI.
  tags:
  - healthcare
  - value-based-care
  - teradata
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: vbc-performance
    port: 8080
    tools:
    - name: calculate-vbc-performance
      description: Calculate VBC metrics and generate provider scorecards.
      inputParameters:
      - name: provider_id
        in: body
        type: string
        description: Provider ID.
      - name: period
        in: body
        type: string
        description: Measurement period.
      steps:
      - name: get-metrics
        type: call
        call: teradata.execute-query
        with:
          query: SELECT quality_score, cost_efficiency, patient_experience FROM vbc_metrics WHERE provider_id='{{provider_id}}' AND period='{{period}}'
      - name: refresh-scorecards
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: vbc_analytics
          dataset_id: provider_scorecards
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://centene-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      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/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → value-based-care-performance-pipeline.yml

Retrieves provider contract details from Salesforce by contract ID, returning provider name, effective date, and reimbursement type.

naftiko: '0.5'
info:
  label: Salesforce Provider Contract Lookup
  description: Retrieves provider contract details from Salesforce by contract ID, returning provider name, effective date, and reimbursement type.
  tags:
  - healthcare
  - provider-contracts
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: provider-contracts
    port: 8080
    tools:
    - name: get-provider-contract
      description: Look up a provider contract by contract ID.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The Salesforce contract ID.
      call: salesforce.get-contract
      with:
        contract_id: '{{contract_id}}'
      outputParameters:
      - name: provider_name
        type: string
        mapping: $.Name
      - name: effective_date
        type: string
        mapping: $.Effective_Date__c
      - name: reimbursement_type
        type: string
        mapping: $.Reimbursement_Type__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /sobjects/Provider_Contract__c/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
Open in Framework → View in Fleet → salesforce-provider-contract-lookup.yml

Retrieves denied claim details from ServiceNow, creates an appeal case, and notifies the appeals team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Claims Denial Appeal Workflow
  description: Retrieves denied claim details from ServiceNow, creates an appeal case, and notifies the appeals team via Microsoft Teams.
  tags:
  - healthcare
  - claims-appeals
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: claims-appeals
    port: 8080
    tools:
    - name: process-claim-appeal
      description: Create appeal case for denied claim and notify team.
      inputParameters:
      - name: claim_id
        in: body
        type: string
        description: Denied claim identifier.
      - name: appeal_reason
        in: body
        type: string
        description: Reason for the appeal.
      steps:
      - name: create-appeal
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_claim_appeal
          short_description: Claim appeal — {{claim_id}}
          description: 'Claim: {{claim_id}}. Appeal reason: {{appeal_reason}}.'
          priority: '2'
      - name: notify-appeals
        type: call
        call: msteams.send-message
        with:
          channel_id: claims_appeals
          text: 'New claim appeal: {{claim_id}}. Reason: {{appeal_reason}}. Case: {{create-appeal.number}}. Review within 30 days required.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → claims-denial-appeal-workflow.yml

Runs a member risk stratification model in Databricks to predict high-risk members and loads scores into Snowflake for care management.

naftiko: '0.5'
info:
  label: Databricks Risk Stratification Model
  description: Runs a member risk stratification model in Databricks to predict high-risk members and loads scores into Snowflake for care management.
  tags:
  - analytics
  - risk-stratification
  - databricks
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: risk-analytics
    port: 8080
    tools:
    - name: run-risk-model
      description: Execute the Databricks risk stratification model and store member risk scores in Snowflake.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State health plan.
      - name: model_version
        in: body
        type: string
        description: Model version identifier.
      steps:
      - name: run-notebook
        type: call
        call: databricks.run-notebook
        with:
          notebook_path: /Shared/risk_stratification_v3
          parameters: '{"state": "{{state}}", "model_version": "{{model_version}}"}'
      - name: load-scores
        type: call
        call: snowflake.run-query
        with:
          query: CALL load_risk_scores('{{state}}', '{{model_version}}')
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/runs/submit
      operations:
      - name: run-notebook
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://centene.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → databricks-risk-stratification-model.yml

On new hire creation in Workday, provisions accounts, creates a ServiceNow IT ticket, and sends a Teams welcome message.

naftiko: '0.5'
info:
  label: Workday Employee Onboarding Pipeline
  description: On new hire creation in Workday, provisions accounts, creates a ServiceNow IT ticket, and sends a Teams welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Orchestrate full employee onboarding across Workday, ServiceNow, and Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD.
      - name: department
        in: body
        type: string
        description: Department name.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-it-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'IT onboarding: {{get-employee.full_name}}'
          category: onboarding
          assigned_group: IT_Provisioning
          description: New hire {{get-employee.full_name}} starting {{start_date}} in {{department}}. Provision standard healthcare analyst workstation and system access.
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{department}}_team'
          text: Welcome to Centene, {{get-employee.first_name}}! Your IT setup ticket is {{create-it-ticket.number}}. Contact your manager for orientation details.
  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://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-employee-onboarding-pipeline.yml

Monitors network health across Centene's state health plan offices and data centers via SolarWinds.

naftiko: '0.5'
info:
  label: SolarWinds Network Monitoring
  description: Monitors network health across Centene's state health plan offices and data centers via SolarWinds.
  tags:
  - infrastructure
  - networking
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: network-monitoring
    port: 8080
    tools:
    - name: get-network-health
      description: Retrieve network performance data from SolarWinds.
      inputParameters:
      - name: node_name
        in: body
        type: string
        description: SolarWinds node name.
      call: solarwinds.get-node-stats
      with:
        node: '{{node_name}}'
      outputParameters:
      - name: availability
        type: number
        mapping: $.availability_pct
      - name: avg_latency
        type: number
        mapping: $.avg_response_time_ms
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.centene.com/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: query
      path: /Query
      operations:
      - name: get-node-stats
        method: POST
Open in Framework → View in Fleet → solarwinds-network-monitoring.yml

Verifies that daily claims data backups exist in S3 and alerts the data ops team if files are missing.

naftiko: '0.5'
info:
  label: Amazon S3 Claims Data Backup Verifier
  description: Verifies that daily claims data backups exist in S3 and alerts the data ops team if files are missing.
  tags:
  - data-engineering
  - backup
  - amazon-s3
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: backup-monitoring
    port: 8080
    tools:
    - name: verify-claims-backups
      description: Check S3 for daily claims backup files and alert if any are missing.
      inputParameters:
      - name: backup_date
        in: body
        type: string
        description: Date to verify in YYYY-MM-DD.
      - name: expected_count
        in: body
        type: integer
        description: Expected number of backup files.
      steps:
      - name: list-backups
        type: call
        call: s3.list-objects
        with:
          bucket: centene-claims-backups
          prefix: daily/{{backup_date}}/
      - name: alert-if-missing
        type: call
        call: msteams.send-message
        with:
          channel_id: data_ops
          text: 'Claims backup verification for {{backup_date}}: Found {{list-backups.count}} of {{expected_count}} expected files.'
  consumes:
  - type: http
    namespace: s3
    baseUri: https://centene-claims-backups.s3.amazonaws.com
    authentication:
      type: aws-sig-v4
      access_key: $secrets.aws_access_key
      secret_key: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /
      operations:
      - name: list-objects
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → amazon-s3-claims-data-backup-verifier.yml

Generates state compliance reports using Crystal Reports templates with claims and enrollment data from Snowflake.

naftiko: '0.5'
info:
  label: Crystal Reports State Compliance Generator
  description: Generates state compliance reports using Crystal Reports templates with claims and enrollment data from Snowflake.
  tags:
  - compliance
  - reporting
  - crystal-reports
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: compliance-reports
    port: 8080
    tools:
    - name: generate-compliance-report
      description: Generate a state compliance report using Crystal Reports and Snowflake data.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: Report type.
      - name: state
        in: body
        type: string
        description: State.
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: fetch-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT * FROM compliance_report_data WHERE report_type='{{report_type}}' AND state='{{state}}' AND period='{{period}}'
      - name: generate-report
        type: call
        call: crystal-reports.generate
        with:
          template: '{{report_type}}_{{state}}'
          data: '{{fetch-data.results}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://centene.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: crystal-reports
    baseUri: https://reports.centene.com/api/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/generate
      operations:
      - name: generate
        method: POST
Open in Framework → View in Fleet → crystal-reports-state-compliance-generator.yml

Monitors the member portal web application performance via Dynatrace and alerts on degradation.

naftiko: '0.5'
info:
  label: Dynatrace Member Portal Performance Monitor
  description: Monitors the member portal web application performance via Dynatrace and alerts on degradation.
  tags:
  - monitoring
  - performance
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: portal-monitoring
    port: 8080
    tools:
    - name: get-portal-anomalies
      description: Retrieve performance anomalies for the member portal from Dynatrace.
      inputParameters:
      - name: time_range
        in: body
        type: string
        description: Time range.
      call: dynatrace.get-problems
      with:
        relativeTime: '{{time_range}}'
        status: OPEN
        entitySelector: type(APPLICATION),entityName(MemberPortal)
      outputParameters:
      - name: problems
        type: array
        mapping: $.result
      - name: total_count
        type: integer
        mapping: $.totalCount
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://centene.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems
      operations:
      - name: get-problems
        method: GET
Open in Framework → View in Fleet → dynatrace-member-portal-performance-monitor.yml

Queries provider network data from Teradata, runs adequacy analysis in Databricks, and generates reports in Power BI.

naftiko: '0.5'
info:
  label: Provider Network Adequacy Analysis Pipeline
  description: Queries provider network data from Teradata, runs adequacy analysis in Databricks, and generates reports in Power BI.
  tags:
  - healthcare
  - network-adequacy
  - teradata
  - databricks
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: network-adequacy
    port: 8080
    tools:
    - name: analyze-network-adequacy
      description: Analyze provider network adequacy by state and specialty.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      - name: specialty
        in: body
        type: string
        description: Provider specialty.
      steps:
      - name: get-network-data
        type: call
        call: teradata.execute-query
        with:
          query: SELECT COUNT(*), AVG(distance_miles) FROM provider_network WHERE state='{{state}}' AND specialty='{{specialty}}'
      - name: run-adequacy-model
        type: call
        call: databricks.run-job
        with:
          job_id: network_adequacy
          state: '{{state}}'
          specialty: '{{specialty}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          group_id: network_management
          dataset_id: network_adequacy
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://centene-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → provider-network-adequacy-analysis-pipeline.yml

Retrieves HEDIS quality metrics data from a Google Sheets spreadsheet, returning measure name, rate, and benchmark comparison.

naftiko: '0.5'
info:
  label: Google Sheets Quality Metrics Export
  description: Retrieves HEDIS quality metrics data from a Google Sheets spreadsheet, returning measure name, rate, and benchmark comparison.
  tags:
  - healthcare
  - quality-metrics
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: quality-metrics-export
    port: 8080
    tools:
    - name: get-quality-metrics
      description: Retrieve HEDIS quality metrics from Google Sheets.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: Google Sheets spreadsheet ID.
      - name: range
        in: body
        type: string
        description: Cell range to query.
      call: gsheets.get-values
      with:
        spreadsheet_id: '{{spreadsheet_id}}'
        range: '{{range}}'
      outputParameters:
      - name: values
        type: array
        mapping: $.values
      - name: row_count
        type: number
        mapping: $.values.length
  consumes:
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: get-values
        method: GET
Open in Framework → View in Fleet → google-sheets-quality-metrics-export.yml

Extracts encounter data from Teradata, validates against CMS formats, and logs submission status in ServiceNow.

naftiko: '0.5'
info:
  label: Encounter Data Submission Pipeline
  description: Extracts encounter data from Teradata, validates against CMS formats, and logs submission status in ServiceNow.
  tags:
  - compliance
  - encounter-data
  - teradata
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: encounter-submission
    port: 8080
    tools:
    - name: submit-encounter-data
      description: Extract, validate, and submit encounter data to CMS.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      - name: submission_period
        in: body
        type: string
        description: Submission period (e.g., 2026-03).
      steps:
      - name: extract-data
        type: call
        call: teradata.execute-query
        with:
          query: SELECT COUNT(*) FROM encounters WHERE state='{{state}}' AND period='{{submission_period}}'
      - name: log-submission
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_encounter_submission
          short_description: Encounter submission — {{state}} — {{submission_period}}
          description: 'Records: {{extract-data.record_count}}. State: {{state}}. Period: {{submission_period}}.'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://centene-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → encounter-data-submission-pipeline.yml

Creates a telehealth appointment in Salesforce, generates a Zoom meeting link, and sends appointment details to the member via WhatsApp.

naftiko: '0.5'
info:
  label: Telehealth Visit Scheduling Workflow
  description: Creates a telehealth appointment in Salesforce, generates a Zoom meeting link, and sends appointment details to the member via WhatsApp.
  tags:
  - healthcare
  - telehealth
  - salesforce
  - zoom
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: telehealth-scheduling
    port: 8080
    tools:
    - name: schedule-telehealth-visit
      description: Schedule telehealth visit with Zoom and notify member.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: provider_id
        in: body
        type: string
        description: Provider ID.
      - name: appointment_date
        in: body
        type: string
        description: Appointment date and time.
      steps:
      - name: create-appointment
        type: call
        call: salesforce.create-appointment
        with:
          member_id: '{{member_id}}'
          provider_id: '{{provider_id}}'
          date: '{{appointment_date}}'
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: Telehealth — {{member_id}}
          start_time: '{{appointment_date}}'
      - name: notify-member
        type: call
        call: whatsapp.send-message
        with:
          phone_number: '{{create-appointment.member_phone}}'
          message: 'Your telehealth appointment is confirmed for {{appointment_date}}. Join at: {{create-meeting.join_url}}. Provider: {{create-appointment.provider_name}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: appointments
      path: /sobjects/Appointment__c
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → telehealth-visit-scheduling-workflow.yml

Creates a new provider record in Salesforce, initiates credentialing in ServiceNow, and provisions system access via Microsoft Teams notification.

naftiko: '0.5'
info:
  label: Provider Onboarding Orchestrator
  description: Creates a new provider record in Salesforce, initiates credentialing in ServiceNow, and provisions system access via Microsoft Teams notification.
  tags:
  - healthcare
  - provider-onboarding
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: provider-onboarding
    port: 8080
    tools:
    - name: onboard-provider
      description: Create provider record, initiate credentialing, and notify.
      inputParameters:
      - name: provider_name
        in: body
        type: string
        description: Provider name.
      - name: npi
        in: body
        type: string
        description: National Provider Identifier.
      - name: specialty
        in: body
        type: string
        description: Provider specialty.
      steps:
      - name: create-provider
        type: call
        call: salesforce.create-provider
        with:
          name: '{{provider_name}}'
          npi: '{{npi}}'
          specialty: '{{specialty}}'
      - name: initiate-credentialing
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_credentialing
          short_description: Credentialing — {{provider_name}} — NPI {{npi}}
          description: 'Specialty: {{specialty}}. Salesforce ID: {{create-provider.id}}.'
      - name: notify-network
        type: call
        call: msteams.send-message
        with:
          channel_id: provider_network
          text: 'New provider onboarding: {{provider_name}} (NPI: {{npi}}, {{specialty}}). Credentialing: {{initiate-credentialing.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: providers
      path: /sobjects/Provider__c
      operations:
      - name: create-provider
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → provider-onboarding-orchestrator.yml

Runs population health analytics in Databricks, refreshes the population health dashboard in Tableau, and notifies the analytics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Population Health Dashboard Refresh Pipeline
  description: Runs population health analytics in Databricks, refreshes the population health dashboard in Tableau, and notifies the analytics team via Microsoft Teams.
  tags:
  - healthcare
  - population-health
  - databricks
  - tableau
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: population-health
    port: 8080
    tools:
    - name: refresh-population-health
      description: Run analytics, refresh dashboard, and notify team.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      - name: plan_type
        in: body
        type: string
        description: Plan type.
      steps:
      - name: run-analytics
        type: call
        call: databricks.run-job
        with:
          job_id: population_health_refresh
          state: '{{state}}'
          plan_type: '{{plan_type}}'
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          datasource_id: population_health_{{state}}
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: health_analytics
          text: 'Population health dashboard refreshed: {{state}} — {{plan_type}}. Members analyzed: {{run-analytics.member_count}}. Dashboard updated.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://centene-tableau.corp.net/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-extract
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → population-health-dashboard-refresh-pipeline.yml

Reconciles capitation payments from Oracle EBS against enrollment data in Teradata, and generates variance reports in Google Sheets.

naftiko: '0.5'
info:
  label: Capitation Payment Reconciliation Pipeline
  description: Reconciles capitation payments from Oracle EBS against enrollment data in Teradata, and generates variance reports in Google Sheets.
  tags:
  - finance
  - capitation
  - oracle
  - teradata
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: capitation-reconciliation
    port: 8080
    tools:
    - name: reconcile-capitation
      description: Reconcile capitation payments against enrollment.
      inputParameters:
      - name: provider_id
        in: body
        type: string
        description: Provider ID.
      - name: period
        in: body
        type: string
        description: Payment period.
      steps:
      - name: get-payments
        type: call
        call: oracle.get-capitation-payments
        with:
          provider_id: '{{provider_id}}'
          period: '{{period}}'
      - name: get-enrollment
        type: call
        call: teradata.execute-query
        with:
          query: SELECT COUNT(*) FROM enrollment WHERE pcp_id='{{provider_id}}' AND period='{{period}}'
      - name: create-report
        type: call
        call: gsheets.create-spreadsheet
        with:
          title: Capitation Reconciliation — {{provider_id}} — {{period}}
          data: 'Payments: ${{get-payments.total_amount}}, Members: {{get-enrollment.member_count}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://centene-ebs.oracle.com/webservices/rest/payments
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: capitation
      path: /capitation?provider={{provider_id}}&period={{period}}
      inputParameters:
      - name: provider_id
        in: query
      - name: period
        in: query
      operations:
      - name: get-capitation-payments
        method: GET
  - type: http
    namespace: teradata
    baseUri: https://centene-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: gsheets
    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
Open in Framework → View in Fleet → capitation-payment-reconciliation-pipeline.yml

Receives a payment dispute from Salesforce, retrieves payment details from Oracle EBS, and creates a resolution ticket in ServiceNow.

naftiko: '0.5'
info:
  label: Provider Payment Dispute Workflow
  description: Receives a payment dispute from Salesforce, retrieves payment details from Oracle EBS, and creates a resolution ticket in ServiceNow.
  tags:
  - finance
  - payment-disputes
  - salesforce
  - oracle
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: payment-disputes
    port: 8080
    tools:
    - name: process-payment-dispute
      description: Process provider payment dispute.
      inputParameters:
      - name: provider_id
        in: body
        type: string
        description: Provider ID.
      - name: payment_id
        in: body
        type: string
        description: Payment ID in dispute.
      steps:
      - name: get-payment
        type: call
        call: oracle.get-payment
        with:
          payment_id: '{{payment_id}}'
      - name: get-provider
        type: call
        call: salesforce.get-provider
        with:
          provider_id: '{{provider_id}}'
      - name: create-dispute
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_payment_dispute
          short_description: Payment dispute — {{provider_id}} — {{payment_id}}
          description: 'Provider: {{get-provider.name}}. Payment: ${{get-payment.amount}}. Status: {{get-payment.status}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://centene-ebs.oracle.com/webservices/rest/payments
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: payments
      path: /payments/{{payment_id}}
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-payment
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: providers
      path: /sobjects/Provider__c/{{provider_id}}
      inputParameters:
      - name: provider_id
        in: path
      operations:
      - name: get-provider
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → provider-payment-dispute-workflow.yml

Identifies members with HEDIS care gaps from Databricks analytics, creates outreach tasks in Salesforce, and sends reminders via WhatsApp.

naftiko: '0.5'
info:
  label: HEDIS Gap Closure Outreach Pipeline
  description: Identifies members with HEDIS care gaps from Databricks analytics, creates outreach tasks in Salesforce, and sends reminders via WhatsApp.
  tags:
  - healthcare
  - hedis
  - databricks
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: hedis-gap-closure
    port: 8080
    tools:
    - name: close-hedis-gaps
      description: Identify care gaps, create outreach tasks, and send reminders.
      inputParameters:
      - name: measure
        in: body
        type: string
        description: HEDIS measure code.
      - name: state
        in: body
        type: string
        description: State code.
      steps:
      - name: identify-gaps
        type: call
        call: databricks.run-job
        with:
          job_id: hedis_gap_analysis
          measure: '{{measure}}'
          state: '{{state}}'
      - name: create-outreach
        type: call
        call: salesforce.create-campaign
        with:
          name: HEDIS {{measure}} Gap Closure — {{state}}
          member_count: '{{identify-gaps.member_count}}'
      - name: send-reminders
        type: call
        call: whatsapp.send-broadcast
        with:
          campaign_id: '{{create-outreach.campaign_id}}'
          message: 'Important health reminder: You are due for a {{measure}} screening. Schedule your appointment today. Call us at 1-800-CENTENE for help finding a provider.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://centene.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: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-broadcast
        method: POST
Open in Framework → View in Fleet → hedis-gap-closure-outreach-pipeline.yml

Identifies members with care gaps from Snowflake analytics and sends outreach notifications via MailChimp to encourage preventive care visits.

naftiko: '0.5'
info:
  label: Care Gap Alert Notifier
  description: Identifies members with care gaps from Snowflake analytics and sends outreach notifications via MailChimp to encourage preventive care visits.
  tags:
  - healthcare
  - care-gaps
  - outreach
  - snowflake
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: care-gap-outreach
    port: 8080
    tools:
    - name: send-care-gap-alerts
      description: Identify members with care gaps and send outreach emails via MailChimp.
      inputParameters:
      - name: measure_code
        in: body
        type: string
        description: HEDIS measure code (e.g., BCS, CCS, CDC).
      - name: state
        in: body
        type: string
        description: State health plan.
      - name: template_id
        in: body
        type: string
        description: MailChimp email template ID.
      steps:
      - name: identify-gaps
        type: call
        call: snowflake.run-query
        with:
          query: SELECT member_id, first_name, email, last_service_date, days_overdue FROM care_gap_members WHERE measure_code='{{measure_code}}' AND state='{{state}}' AND email IS NOT NULL AND outreach_sent=false LIMIT 5000
      - name: send-outreach
        type: call
        call: mailchimp.create-campaign
        with:
          type: regular
          recipients_list_id: care_gap_{{state}}_{{measure_code}}
          subject_line: 'Important: Your preventive care visit is overdue'
          template_id: '{{template_id}}'
          from_name: Centene Health Plan
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://centene.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: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → care-gap-alert-notifier.yml

Retrieves the status of a regulatory compliance project in Jira by issue key, returning summary, status, and due date.

naftiko: '0.5'
info:
  label: Jira Compliance Project Status
  description: Retrieves the status of a regulatory compliance project in Jira by issue key, returning summary, status, and due date.
  tags:
  - compliance
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: compliance-projects
    port: 8080
    tools:
    - name: get-compliance-project
      description: Get a Jira compliance project status by issue key.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: due_date
        type: string
        mapping: $.fields.duedate
  consumes:
  - type: http
    namespace: jira
    baseUri: https://centene.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-compliance-project-status.yml

Searches the Workday directory for employees by name, department, or role.

naftiko: '0.5'
info:
  label: Workday Employee Directory Lookup
  description: Searches the Workday directory for employees by name, department, or role.
  tags:
  - hr
  - directory
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-directory
    port: 8080
    tools:
    - name: search-employees
      description: Search for employees in Workday by name or department.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: Search term.
      call: workday.search-workers
      with:
        search: '{{search_term}}'
      outputParameters:
      - name: employees
        type: array
        mapping: $.workers
      - name: total_count
        type: integer
        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: /workers
      operations:
      - name: search-workers
        method: GET
Open in Framework → View in Fleet → workday-employee-directory-lookup.yml

Validates a pharmacy claim against the formulary in Snowflake and checks for drug interactions before processing.

naftiko: '0.5'
info:
  label: Pharmacy Benefits Claim Validator
  description: Validates a pharmacy claim against the formulary in Snowflake and checks for drug interactions before processing.
  tags:
  - pharmacy
  - claims
  - formulary
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-claims
    port: 8080
    tools:
    - name: validate-pharmacy-claim
      description: Validate a pharmacy claim against formulary and drug interaction databases.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: ndc_code
        in: body
        type: string
        description: National Drug Code.
      - name: prescriber_npi
        in: body
        type: string
        description: Prescriber NPI.
      - name: quantity
        in: body
        type: integer
        description: Quantity dispensed.
      steps:
      - name: check-formulary
        type: call
        call: snowflake.run-query
        with:
          query: SELECT tier, requires_prior_auth, step_therapy_required, quantity_limit FROM formulary WHERE ndc_code='{{ndc_code}}' AND plan_id=(SELECT plan_id FROM member_enrollment WHERE member_id='{{member_id}}' AND status='active')
      - name: check-interactions
        type: call
        call: snowflake.run-query
        with:
          query: SELECT i.severity, i.description FROM drug_interactions i JOIN member_medications m ON i.drug_b_ndc = m.ndc_code WHERE i.drug_a_ndc='{{ndc_code}}' AND m.member_id='{{member_id}}' AND m.active=true
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://centene.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → pharmacy-benefits-claim-validator.yml

Retrieves metadata for a member appeal document from Google Drive by file ID, returning file name, status, and last modified date.

naftiko: '0.5'
info:
  label: Google Drive Member Document Lookup
  description: Retrieves metadata for a member appeal document from Google Drive by file ID, returning file name, status, and last modified date.
  tags:
  - healthcare
  - member-appeals
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: member-documents
    port: 8080
    tools:
    - name: get-member-document
      description: Look up member document metadata in Google Drive.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Google Drive file ID.
      call: gdrive.get-file
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: modified_date
        type: string
        mapping: $.modifiedTime
      - name: owner
        type: string
        mapping: $.owners[0].displayName
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → google-drive-member-document-lookup.yml

Records a HIPAA breach in ServiceNow, notifies affected members via WhatsApp, and alerts the privacy office via Microsoft Teams.

naftiko: '0.5'
info:
  label: HIPAA Breach Notification Pipeline
  description: Records a HIPAA breach in ServiceNow, notifies affected members via WhatsApp, and alerts the privacy office via Microsoft Teams.
  tags:
  - compliance
  - hipaa
  - servicenow
  - whatsapp
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hipaa-breach
    port: 8080
    tools:
    - name: process-hipaa-breach
      description: Record breach, notify members, and alert privacy office.
      inputParameters:
      - name: breach_description
        in: body
        type: string
        description: Description of the breach.
      - name: affected_count
        in: body
        type: integer
        description: Number of affected members.
      steps:
      - name: create-breach-record
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_hipaa_breach
          short_description: HIPAA Breach — {{affected_count}} members
          description: '{{breach_description}}. Affected members: {{affected_count}}.'
          priority: '1'
      - name: notify-members
        type: call
        call: whatsapp.send-broadcast
        with:
          breach_id: '{{create-breach-record.number}}'
          message: 'Important notice: A data security incident may have affected your information. Please call 1-800-CENTENE for details and free credit monitoring.'
      - name: alert-privacy
        type: call
        call: msteams.send-message
        with:
          channel_id: privacy_office
          text: 'HIPAA BREACH: {{affected_count}} members affected. {{breach_description}}. Case: {{create-breach-record.number}}. Immediate response required.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-broadcast
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hipaa-breach-notification-pipeline.yml

Creates a security incident in ServiceNow, initiates containment via Palo Alto Networks firewall rules, and alerts the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Security Incident Response Pipeline
  description: Creates a security incident in ServiceNow, initiates containment via Palo Alto Networks firewall rules, and alerts the security team via Microsoft Teams.
  tags:
  - it-security
  - incident-response
  - servicenow
  - palo-alto-networks
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-incident
    port: 8080
    tools:
    - name: respond-to-security-incident
      description: Create incident, initiate containment, and alert security team.
      inputParameters:
      - name: incident_type
        in: body
        type: string
        description: Incident type (malware, phishing, data-exfiltration, unauthorized-access).
      - name: affected_system
        in: body
        type: string
        description: Affected system or application name.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_security_incident
          short_description: Security incident — {{incident_type}} — {{affected_system}}
          description: 'Type: {{incident_type}}. System: {{affected_system}}. Containment initiated.'
          priority: '1'
      - name: initiate-containment
        type: call
        call: paloalto.create-rule
        with:
          action: block
          system: '{{affected_system}}'
      - name: alert-security
        type: call
        call: msteams.send-message
        with:
          channel_id: security_operations
          text: 'SECURITY INCIDENT: {{incident_type}} on {{affected_system}}. Containment initiated. Incident: {{create-incident.number}}. Immediate investigation required.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: paloalto
    baseUri: https://centene-fw.paloaltonetworks.com/restapi/v10.2
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
    resources:
    - name: rules
      path: /Policies/SecurityRules
      operations:
      - name: create-rule
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-security-incident-response-pipeline.yml

Runs Postman collections to test Centene's member-facing healthcare APIs for eligibility, claims, and provider directory.

naftiko: '0.5'
info:
  label: Postman Healthcare API Test Runner
  description: Runs Postman collections to test Centene's member-facing healthcare APIs for eligibility, claims, and provider directory.
  tags:
  - qa
  - api-testing
  - postman
capability:
  exposes:
  - type: mcp
    namespace: api-testing
    port: 8080
    tools:
    - name: run-api-tests
      description: Execute a Postman healthcare API test collection.
      inputParameters:
      - name: collection_id
        in: body
        type: string
        description: Postman collection UID.
      - name: environment_id
        in: body
        type: string
        description: Postman environment UID.
      call: postman.run-collection
      with:
        collection: '{{collection_id}}'
        environment: '{{environment_id}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.run.id
      - name: status
        type: string
        mapping: $.run.status
      - name: total_tests
        type: integer
        mapping: $.run.stats.tests.total
      - name: failed_tests
        type: integer
        mapping: $.run.stats.tests.failed
  consumes:
  - type: http
    namespace: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: apiKey
      key: $secrets.postman_api_key
    resources:
    - name: collection-runs
      path: /monitors/{{collection_id}}/run
      inputParameters:
      - name: collection_id
        in: path
      operations:
      - name: run-collection
        method: POST
Open in Framework → View in Fleet → postman-healthcare-api-test-runner.yml

Identifies members due for annual wellness visits from Databricks, creates outreach campaigns in Salesforce, and sends reminders via WhatsApp.

naftiko: '0.5'
info:
  label: Annual Wellness Visit Reminder Pipeline
  description: Identifies members due for annual wellness visits from Databricks, creates outreach campaigns in Salesforce, and sends reminders via WhatsApp.
  tags:
  - healthcare
  - preventive-care
  - databricks
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: wellness-reminders
    port: 8080
    tools:
    - name: send-wellness-reminders
      description: Identify due members and send wellness visit reminders.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      - name: plan_type
        in: body
        type: string
        description: Plan type (Medicaid, Medicare).
      steps:
      - name: identify-members
        type: call
        call: databricks.run-job
        with:
          job_id: awv_identification
          state: '{{state}}'
          plan_type: '{{plan_type}}'
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: AWV Outreach — {{state}} — {{plan_type}}
          member_count: '{{identify-members.member_count}}'
      - name: send-reminders
        type: call
        call: whatsapp.send-broadcast
        with:
          campaign_id: '{{create-campaign.campaign_id}}'
          message: Time for your Annual Wellness Visit! This free checkup helps keep you healthy. Call your doctor today to schedule.
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://centene.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: whatsapp
    baseUri: https://graph.facebook.com/v17.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-broadcast
        method: POST
Open in Framework → View in Fleet → annual-wellness-visit-reminder-pipeline.yml

Organizes policy documents uploaded to Google Drive into the correct state and department folders.

naftiko: '0.5'
info:
  label: Google Drive Policy Document Organizer
  description: Organizes policy documents uploaded to Google Drive into the correct state and department folders.
  tags:
  - document-management
  - policies
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: policy-documents
    port: 8080
    tools:
    - name: organize-policy-doc
      description: Move a policy document to the correct Google Drive folder.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Google Drive file ID.
      - name: state
        in: body
        type: string
        description: State abbreviation.
      - name: department
        in: body
        type: string
        description: Department name.
      call: google-drive.move-file
      with:
        file_id: '{{file_id}}'
        target_folder: policies_{{state}}_{{department}}
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: webViewLink
        type: string
        mapping: $.webViewLink
  consumes:
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: move-file
        method: PATCH
Open in Framework → View in Fleet → google-drive-policy-document-organizer.yml

Retrieves grievance data from ServiceNow, generates compliance reports in Google Sheets, and notifies leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Grievance and Appeal Tracking Pipeline
  description: Retrieves grievance data from ServiceNow, generates compliance reports in Google Sheets, and notifies leadership via Microsoft Teams.
  tags:
  - compliance
  - grievance-tracking
  - servicenow
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: grievance-tracking
    port: 8080
    tools:
    - name: track-grievances
      description: Track grievances, generate reports, and notify leadership.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: get-grievance-data
        type: call
        call: servicenow.query-records
        with:
          table: x_centene_grievance
          query: state={{state}}^period={{period}}
      - name: create-report
        type: call
        call: gsheets.create-spreadsheet
        with:
          title: Grievance Report — {{state}} — {{period}}
          data: 'Total: {{get-grievance-data.total_count}}. Open: {{get-grievance-data.open_count}}.'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: compliance_leadership
          text: 'Grievance report — {{state}} {{period}}: {{get-grievance-data.total_count}} total, {{get-grievance-data.open_count}} open. Report generated.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://centene.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: query-records
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets
      operations:
      - name: create-spreadsheet
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → grievance-and-appeal-tracking-pipeline.yml

Runs an Alteryx workflow for population health analytics that identifies high-utilization patterns and chronic condition cohorts.

naftiko: '0.5'
info:
  label: Alteryx Population Health Workflow
  description: Runs an Alteryx workflow for population health analytics that identifies high-utilization patterns and chronic condition cohorts.
  tags:
  - analytics
  - population-health
  - alteryx
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: population-health
    port: 8080
    tools:
    - name: run-population-analysis
      description: Execute the Alteryx population health analytics workflow.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State health plan.
      - name: analysis_type
        in: body
        type: string
        description: Analysis type (chronic_conditions, high_utilizers, preventive_gaps).
      steps:
      - name: trigger-workflow
        type: call
        call: alteryx.run-workflow
        with:
          workflow_id: pop_health_analytics_v2
          parameters: '{"state": "{{state}}", "type": "{{analysis_type}}"}'
      - name: load-results
        type: call
        call: snowflake.run-query
        with:
          query: CALL load_pop_health_results('{{state}}', '{{analysis_type}}')
  consumes:
  - type: http
    namespace: alteryx
    baseUri: https://alteryx.centene.com/api/v3
    authentication:
      type: bearer
      token: $secrets.alteryx_token
    resources:
    - name: workflows
      path: /workflows/{{workflow_id}}/jobs
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: run-workflow
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://centene.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → alteryx-population-health-workflow.yml

Queries Teradata for member enrollment counts by state and plan type, returning total members and growth rate.

naftiko: '0.5'
info:
  label: Teradata Enrollment Data Query
  description: Queries Teradata for member enrollment counts by state and plan type, returning total members and growth rate.
  tags:
  - analytics
  - enrollment
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: enrollment-analytics
    port: 8080
    tools:
    - name: query-enrollment-data
      description: Query Teradata for enrollment metrics.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      - name: plan_type
        in: body
        type: string
        description: Plan type (Medicaid, Medicare, Marketplace).
      call: teradata.execute-query
      with:
        state: '{{state}}'
        plan_type: '{{plan_type}}'
      outputParameters:
      - name: total_members
        type: number
        mapping: $.data[0][0]
      - name: growth_rate
        type: number
        mapping: $.data[0][1]
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://centene-td.teradata.com/api/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /queries
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → teradata-enrollment-data-query.yml

Queries Datadog for health metrics of Centene's member portal and claims processing services.

naftiko: '0.5'
info:
  label: Datadog Application Health Monitor
  description: Queries Datadog for health metrics of Centene's member portal and claims processing services.
  tags:
  - devops
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: app-monitoring
    port: 8080
    tools:
    - name: check-app-health
      description: Fetch application health metrics from Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Service name tag in Datadog.
      call: datadog.query-metrics
      with:
        query: avg:trace.servlet.request.hits{service:{{service_name}}}.rollup(sum, 300)
      outputParameters:
      - name: request_rate
        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
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-application-health-monitor.yml

Syncs provider data from Salesforce, validates against CMS requirements, and notifies the network management team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Provider Directory Update Pipeline
  description: Syncs provider data from Salesforce, validates against CMS requirements, and notifies the network management team via Microsoft Teams.
  tags:
  - healthcare
  - provider-directory
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: provider-directory
    port: 8080
    tools:
    - name: update-provider-directory
      description: Sync provider directory data and validate compliance.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code.
      steps:
      - name: get-provider-updates
        type: call
        call: salesforce.query-providers
        with:
          state: '{{state}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: network_management
          text: 'Provider directory update — {{state}}: {{get-provider-updates.update_count}} records updated. Validation: {{get-provider-updates.validation_status}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: providers
      path: /query?q=SELECT+Id+FROM+Provider__c+WHERE+State__c='{{state}}'
      inputParameters:
      - name: state
        in: query
      operations:
      - name: query-providers
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → provider-directory-update-pipeline.yml

Searches Centene's Confluence knowledge base for clinical guidelines by keyword, returning page titles and URLs.

naftiko: '0.5'
info:
  label: Confluence Clinical Guidelines Lookup
  description: Searches Centene's Confluence knowledge base for clinical guidelines by keyword, returning page titles and URLs.
  tags:
  - healthcare
  - clinical-guidelines
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: clinical-guidelines
    port: 8080
    tools:
    - name: search-clinical-guidelines
      description: Search Confluence for clinical guidelines.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: Keyword to search for.
      call: confluence.search-content
      with:
        cql: label = 'clinical-guideline' AND text ~ '{{search_term}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: total_count
        type: number
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://centene.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-clinical-guidelines-lookup.yml

Publishes updated clinical policies to Confluence, creates implementation tasks in Jira, and notifies clinical staff via Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Policy Update Workflow
  description: Publishes updated clinical policies to Confluence, creates implementation tasks in Jira, and notifies clinical staff via Microsoft Teams.
  tags:
  - healthcare
  - clinical-policy
  - confluence
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-policy-updates
    port: 8080
    tools:
    - name: update-clinical-policy
      description: Publish policy update, create tasks, and notify staff.
      inputParameters:
      - name: policy_id
        in: body
        type: string
        description: Clinical policy identifier.
      - name: effective_date
        in: body
        type: string
        description: Policy effective date.
      steps:
      - name: publish-policy
        type: call
        call: confluence.create-page
        with:
          space: CLINICAL
          title: Policy Update — {{policy_id}} — {{effective_date}}
          content: Updated clinical policy {{policy_id}} effective {{effective_date}}.
      - name: create-tasks
        type: call
        call: jira.create-issue
        with:
          project: CLIN
          issuetype: Task
          summary: Implement policy {{policy_id}} by {{effective_date}}
      - name: notify-staff
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical_operations
          text: 'Clinical policy update: {{policy_id}} effective {{effective_date}}. Implementation task: {{create-tasks.key}}.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://centene.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: jira
    baseUri: https://centene.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-policy-update-workflow.yml

Manages Cloudflare Web Application Firewall rules for Centene's public-facing member portals.

naftiko: '0.5'
info:
  label: Cloudflare WAF Rule Manager
  description: Manages Cloudflare Web Application Firewall rules for Centene's public-facing member portals.
  tags:
  - security
  - waf
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: waf-management
    port: 8080
    tools:
    - name: get-waf-rules
      description: Retrieve current WAF rules from Cloudflare for the member portal zone.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      call: cloudflare.get-waf-rules
      with:
        zone_id: '{{zone_id}}'
      outputParameters:
      - name: rules
        type: array
        mapping: $.result
      - name: total
        type: integer
        mapping: $.result_info.total_count
  consumes:
  - 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: get-waf-rules
        method: GET
Open in Framework → View in Fleet → cloudflare-waf-rule-manager.yml

Generates state Medicaid regulatory reports from Snowflake encounter data and uploads to SharePoint for compliance review before submission.

naftiko: '0.5'
info:
  label: Medicaid State Reporting Generator
  description: Generates state Medicaid regulatory reports from Snowflake encounter data and uploads to SharePoint for compliance review before submission.
  tags:
  - compliance
  - medicaid
  - reporting
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: medicaid-reporting
    port: 8080
    tools:
    - name: generate-state-report
      description: Generate a Medicaid state regulatory report and upload to SharePoint for review.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State abbreviation.
      - name: report_type
        in: body
        type: string
        description: Report type (encounter, financial, enrollment, quality).
      - name: reporting_period
        in: body
        type: string
        description: Reporting period in YYYY-MM.
      steps:
      - name: generate-data
        type: call
        call: snowflake.run-query
        with:
          query: CALL generate_medicaid_report('{{state}}', '{{report_type}}', '{{reporting_period}}')
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: regulatory_reports
          folder_path: Medicaid/{{state}}/{{reporting_period}}
          file_name: '{{report_type}}_{{state}}_{{reporting_period}}.csv'
          content: '{{generate-data.results}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://centene.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → medicaid-state-reporting-generator.yml

Identifies providers with expiring credentials from Salesforce, creates renewal tasks in ServiceNow, and notifies the credentialing team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Provider Credentialing Renewal Pipeline
  description: Identifies providers with expiring credentials from Salesforce, creates renewal tasks in ServiceNow, and notifies the credentialing team via Microsoft Teams.
  tags:
  - healthcare
  - credentialing
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: credentialing-renewal
    port: 8080
    tools:
    - name: process-credential-renewals
      description: Identify expiring credentials, create renewal tasks, and notify team.
      inputParameters:
      - name: state
        in: body
        type: string
        description: State code for provider network.
      - name: days_threshold
        in: body
        type: integer
        description: Days before expiry to flag.
      steps:
      - name: get-expiring-credentials
        type: call
        call: salesforce.query-credentials
        with:
          state: '{{state}}'
          days: '{{days_threshold}}'
      - name: create-renewal-tasks
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_credentialing
          short_description: Credential renewals — {{state}} — {{get-expiring-credentials.count}} providers
          description: '{{get-expiring-credentials.count}} providers in {{state}} have credentials expiring within {{days_threshold}} days.'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: credentialing_{{state}}
          text: 'Credential renewal alert: {{get-expiring-credentials.count}} providers in {{state}} expiring within {{days_threshold}} days. Task: {{create-renewal-tasks.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: credentials
      path: /query?q=SELECT+Count(Id)+FROM+Provider_Credential__c+WHERE+State__c='{{state}}'
      inputParameters:
      - name: state
        in: query
      operations:
      - name: query-credentials
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → provider-credentialing-renewal-pipeline.yml

Triggers a Qlik Sense app reload for provider network adequacy reporting by state and specialty.

naftiko: '0.5'
info:
  label: Qlik Sense Network Adequacy Dashboard
  description: Triggers a Qlik Sense app reload for provider network adequacy reporting by state and specialty.
  tags:
  - analytics
  - network-adequacy
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: network-analytics
    port: 8080
    tools:
    - name: reload-network-dashboard
      description: Trigger a Qlik Sense app reload for network adequacy dashboards.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: Qlik Sense app ID.
      call: qlik.reload-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: reload_id
        type: string
        mapping: $.id
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://centene.us.qlikcloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_api_key
    resources:
    - name: reloads
      path: /reloads
      operations:
      - name: reload-app
        method: POST
Open in Framework → View in Fleet → qlik-sense-network-adequacy-dashboard.yml

Receives a pharmacy PA request, validates against formulary rules in ServiceNow, and notifies the reviewing pharmacist via Microsoft Teams.

naftiko: '0.5'
info:
  label: Pharmacy Prior Authorization Pipeline
  description: Receives a pharmacy PA request, validates against formulary rules in ServiceNow, and notifies the reviewing pharmacist via Microsoft Teams.
  tags:
  - healthcare
  - pharmacy
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-pa
    port: 8080
    tools:
    - name: process-pharmacy-pa
      description: Process pharmacy prior authorization request.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: ndc_code
        in: body
        type: string
        description: National Drug Code.
      steps:
      - name: create-pa
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_pharmacy_pa
          short_description: Pharmacy PA — {{member_id}} — NDC {{ndc_code}}
          description: 'Member: {{member_id}}. Drug NDC: {{ndc_code}}.'
      - name: notify-pharmacist
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacy_review
          text: 'Pharmacy PA submitted: Member {{member_id}}, NDC {{ndc_code}}. Case: {{create-pa.number}}. Review required.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacy-prior-authorization-pipeline.yml

Identifies members needing community outreach from Databricks, assigns health workers in Salesforce, and sends dispatch details via Microsoft Teams.

naftiko: '0.5'
info:
  label: Community Health Worker Dispatch Workflow
  description: Identifies members needing community outreach from Databricks, assigns health workers in Salesforce, and sends dispatch details via Microsoft Teams.
  tags:
  - healthcare
  - community-health
  - databricks
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: chw-dispatch
    port: 8080
    tools:
    - name: dispatch-community-worker
      description: Identify members, assign workers, and send dispatch.
      inputParameters:
      - name: zip_code
        in: body
        type: string
        description: ZIP code for outreach area.
      - name: outreach_type
        in: body
        type: string
        description: Outreach type (enrollment, wellness, sdoh).
      steps:
      - name: identify-members
        type: call
        call: databricks.run-job
        with:
          job_id: chw_member_identification
          zip_code: '{{zip_code}}'
          type: '{{outreach_type}}'
      - name: assign-workers
        type: call
        call: salesforce.create-assignments
        with:
          zip_code: '{{zip_code}}'
          member_count: '{{identify-members.member_count}}'
      - name: dispatch
        type: call
        call: msteams.send-message
        with:
          channel_id: community_health
          text: 'CHW Dispatch: {{identify-members.member_count}} members in ZIP {{zip_code}} need {{outreach_type}} outreach. Assignments created.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: assignments
      path: /sobjects/CHW_Assignment__c
      operations:
      - name: create-assignments
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → community-health-worker-dispatch-workflow.yml

Triggers a GitHub Actions security scanning workflow for Centene's healthcare applications and reports findings to Teams.

naftiko: '0.5'
info:
  label: GitHub Actions Security Scan Trigger
  description: Triggers a GitHub Actions security scanning workflow for Centene's healthcare applications and reports findings to Teams.
  tags:
  - security
  - devops
  - github-actions
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security-scanning
    port: 8080
    tools:
    - name: trigger-security-scan
      description: Trigger a security scanning workflow via GitHub Actions and notify the security team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository (org/repo).
      - name: workflow_id
        in: body
        type: string
        description: Security scan workflow ID.
      steps:
      - name: dispatch-scan
        type: call
        call: github.dispatch-workflow
        with:
          owner_repo: '{{repo}}'
          workflow_id: '{{workflow_id}}'
          ref: main
      - name: notify-security
        type: call
        call: msteams.send-message
        with:
          channel_id: appsec
          text: 'Security scan initiated for {{repo}}. Workflow: {{workflow_id}}. Results will be posted upon completion.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-dispatches
      path: /repos/{{owner_repo}}/actions/workflows/{{workflow_id}}/dispatches
      inputParameters:
      - name: owner_repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: dispatch-workflow
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-actions-security-scan-trigger.yml

Retrieves employee benefits enrollment details from Workday by employee ID, returning plan name, coverage level, and effective date.

naftiko: '0.5'
info:
  label: Workday Employee Benefits Lookup
  description: Retrieves employee benefits enrollment details from Workday by employee ID, returning plan name, coverage level, and effective date.
  tags:
  - human-resources
  - benefits
  - workday
capability:
  exposes:
  - type: mcp
    namespace: employee-benefits
    port: 8080
    tools:
    - name: get-benefits
      description: Look up employee benefits enrollment in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-benefits
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: plan_name
        type: string
        mapping: $.Benefits.PlanName
      - name: coverage_level
        type: string
        mapping: $.Benefits.CoverageLevel
  consumes:
  - type: http
    namespace: workday
    baseUri: https://centene.workday.com/api/benefits/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: enrollments
      path: /workers/{{employee_id}}/benefits
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-benefits
        method: GET
Open in Framework → View in Fleet → workday-employee-benefits-lookup.yml

Checks the latest build and release pipeline status in Azure DevOps for Centene's digital health platform.

naftiko: '0.5'
info:
  label: Azure DevOps Pipeline Status Checker
  description: Checks the latest build and release pipeline status in Azure DevOps for Centene's digital health platform.
  tags:
  - devops
  - ci-cd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: cicd-status
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Get the latest Azure DevOps pipeline run status.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline ID.
      call: azuredevops.get-pipeline-runs
      with:
        project: '{{project}}'
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: run_id
        type: integer
        mapping: $.value[0].id
      - name: status
        type: string
        mapping: $.value[0].state
      - name: result
        type: string
        mapping: $.value[0].result
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/centene
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: pipeline-runs
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-pipeline-runs
        method: GET
Open in Framework → View in Fleet → azure-devops-pipeline-status-checker.yml

Retrieves an IT incident from ServiceNow and returns current status, assignee, and resolution details.

naftiko: '0.5'
info:
  label: ServiceNow IT Incident Tracker
  description: Retrieves an IT incident from ServiceNow and returns current status, assignee, and resolution details.
  tags:
  - it-support
  - incident-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-support
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow IT incident by number.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      call: servicenow.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result[0].state
      - name: assigned_to
        type: string
        mapping: $.result[0].assigned_to.display_value
      - name: short_description
        type: string
        mapping: $.result[0].short_description
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://centene.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
Open in Framework → View in Fleet → servicenow-it-incident-tracker.yml

Searches the Salesforce provider directory for in-network providers by specialty and location for member services.

naftiko: '0.5'
info:
  label: Salesforce Provider Directory Search
  description: Searches the Salesforce provider directory for in-network providers by specialty and location for member services.
  tags:
  - provider-network
  - directory
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: provider-directory
    port: 8080
    tools:
    - name: search-providers
      description: Search for in-network providers by specialty and location in Salesforce.
      inputParameters:
      - name: specialty
        in: body
        type: string
        description: Medical specialty.
      - name: zip_code
        in: body
        type: string
        description: ZIP code for location search.
      - name: radius_miles
        in: body
        type: integer
        description: Search radius in miles.
      - name: plan_code
        in: body
        type: string
        description: Health plan code.
      call: salesforce.query
      with:
        q: SELECT Name, Specialty__c, Address__c, Phone__c, Accepting_New_Patients__c FROM Provider__c WHERE Specialty__c = '{{specialty}}' AND Plan_Codes__c INCLUDES ('{{plan_code}}') AND Network_Status__c = 'Active' AND DISTANCE(Location__c, GEOLOCATION({{zip_code}}), 'mi') < {{radius_miles}} ORDER BY DISTANCE(Location__c, GEOLOCATION({{zip_code}}), 'mi') LIMIT 20
      outputParameters:
      - name: providers
        type: array
        mapping: $.records
      - name: total_found
        type: integer
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query
        method: GET
Open in Framework → View in Fleet → salesforce-provider-directory-search.yml

Checks the last refresh status of the claims analytics Power BI dataset, returning refresh type, status, and end time.

naftiko: '0.5'
info:
  label: Power BI Claims Dashboard Status
  description: Checks the last refresh status of the claims analytics Power BI dataset, returning refresh type, status, and end time.
  tags:
  - analytics
  - claims
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: claims-reporting
    port: 8080
    tools:
    - name: get-claims-dashboard-status
      description: Get the last refresh status for the claims Power BI dataset.
      inputParameters:
      - name: group_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:
        group_id: '{{group_id}}'
        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: refreshes
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-claims-dashboard-status.yml

Checks F5 load balancer pool health for Centene's member portal and claims processing services.

naftiko: '0.5'
info:
  label: F5 Networks Load Balancer Health
  description: Checks F5 load balancer pool health for Centene's member portal and claims processing services.
  tags:
  - infrastructure
  - networking
  - f5-networks
capability:
  exposes:
  - type: mcp
    namespace: network-health
    port: 8080
    tools:
    - name: check-lb-health
      description: Check F5 load balancer pool member health.
      inputParameters:
      - name: pool_name
        in: body
        type: string
        description: F5 pool name.
      call: f5.get-pool-members
      with:
        pool_name: '{{pool_name}}'
      outputParameters:
      - name: available_count
        type: integer
        mapping: $.available_count
      - name: total_count
        type: integer
        mapping: $.total_count
  consumes:
  - type: http
    namespace: f5
    baseUri: https://f5.centene.com/mgmt/tm/ltm
    authentication:
      type: basic
      username: $secrets.f5_user
      password: $secrets.f5_password
    resources:
    - name: pool-members
      path: /pool/{{pool_name}}/members
      inputParameters:
      - name: pool_name
        in: path
      operations:
      - name: get-pool-members
        method: GET
Open in Framework → View in Fleet → f5-networks-load-balancer-health.yml

Sends appointment reminders to members via WhatsApp Business API for upcoming healthcare visits.

naftiko: '0.5'
info:
  label: WhatsApp Member Appointment Reminder
  description: Sends appointment reminders to members via WhatsApp Business API for upcoming healthcare visits.
  tags:
  - member-engagement
  - notifications
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: member-reminders
    port: 8080
    tools:
    - name: send-appointment-reminder
      description: Send a WhatsApp appointment reminder to a member.
      inputParameters:
      - name: phone_number
        in: body
        type: string
        description: Member phone in E.164 format.
      - name: appointment_date
        in: body
        type: string
        description: Appointment date.
      - name: provider_name
        in: body
        type: string
        description: Provider name.
      - name: appointment_type
        in: body
        type: string
        description: Appointment type.
      call: whatsapp.send-message
      with:
        to: '{{phone_number}}'
        template: appointment_reminder
        parameters: '["{{appointment_date}}", "{{provider_name}}", "{{appointment_type}}"]'
      outputParameters:
      - name: message_id
        type: string
        mapping: $.messages[0].id
  consumes:
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v18.0/{{phone_number_id}}
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → whatsapp-member-appointment-reminder.yml

Creates a behavioral health referral in ServiceNow, matches providers from Salesforce, and notifies the care coordinator via Microsoft Teams.

naftiko: '0.5'
info:
  label: Behavioral Health Referral Workflow
  description: Creates a behavioral health referral in ServiceNow, matches providers from Salesforce, and notifies the care coordinator via Microsoft Teams.
  tags:
  - healthcare
  - behavioral-health
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bh-referrals
    port: 8080
    tools:
    - name: create-bh-referral
      description: Create behavioral health referral and match providers.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: service_needed
        in: body
        type: string
        description: Type of behavioral health service needed.
      steps:
      - name: find-providers
        type: call
        call: salesforce.search-bh-providers
        with:
          member_id: '{{member_id}}'
          service: '{{service_needed}}'
      - name: create-referral
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_bh_referral
          short_description: BH Referral — {{member_id}} — {{service_needed}}
          description: 'Service: {{service_needed}}. Matched providers: {{find-providers.provider_count}}.'
      - name: notify-coordinator
        type: call
        call: msteams.send-message
        with:
          channel_id: care_coordination
          text: 'BH Referral: Member {{member_id}} needs {{service_needed}}. {{find-providers.provider_count}} providers matched. Referral: {{create-referral.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://centene.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: providers
      path: /query?q=SELECT+Id,Name+FROM+Provider__c+WHERE+Specialty__c='{{service}}'
      inputParameters:
      - name: service
        in: query
      operations:
      - name: search-bh-providers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → behavioral-health-referral-workflow.yml

Processes a prior authorization request by validating medical necessity against clinical guidelines in Snowflake and creating a ServiceNow case for clinical review.

naftiko: '0.5'
info:
  label: Prior Authorization Request Processor
  description: Processes a prior authorization request by validating medical necessity against clinical guidelines in Snowflake and creating a ServiceNow case for clinical review.
  tags:
  - healthcare
  - prior-authorization
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: prior-auth
    port: 8080
    tools:
    - name: process-prior-auth
      description: Validate a prior authorization request against clinical guidelines and route for clinical review.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: procedure_code
        in: body
        type: string
        description: CPT/HCPCS procedure code.
      - name: diagnosis_code
        in: body
        type: string
        description: ICD-10 diagnosis code.
      - name: requesting_provider_npi
        in: body
        type: string
        description: Requesting provider NPI.
      steps:
      - name: check-guidelines
        type: call
        call: snowflake.run-query
        with:
          query: SELECT guideline_id, auto_approve, clinical_review_required FROM clinical_guidelines WHERE procedure_code='{{procedure_code}}' AND diagnosis_code='{{diagnosis_code}}'
      - name: create-review-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Prior Auth: {{procedure_code}} for member {{member_id}}'
          category: prior_authorization
          assigned_group: Clinical_Review
          description: 'Prior authorization for procedure {{procedure_code}} (dx: {{diagnosis_code}}) for member {{member_id}}. Provider NPI: {{requesting_provider_npi}}. Guideline: {{check-guidelines.guideline_id}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://centene.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: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → prior-authorization-request-processor.yml

Runs FWA detection models in Databricks against claims data, creates investigation cases in ServiceNow, and alerts the SIU via Microsoft Teams.

naftiko: '0.5'
info:
  label: Fraud Waste and Abuse Detection Pipeline
  description: Runs FWA detection models in Databricks against claims data, creates investigation cases in ServiceNow, and alerts the SIU via Microsoft Teams.
  tags:
  - compliance
  - fraud-detection
  - databricks
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fwa-detection
    port: 8080
    tools:
    - name: detect-fwa
      description: Run fraud detection models and create investigation cases.
      inputParameters:
      - name: provider_id
        in: body
        type: string
        description: Provider ID to investigate.
      - name: claim_period
        in: body
        type: string
        description: Claims period to analyze.
      steps:
      - name: run-detection
        type: call
        call: databricks.run-job
        with:
          job_id: fwa_detection
          provider_id: '{{provider_id}}'
          period: '{{claim_period}}'
      - name: create-investigation
        type: call
        call: servicenow.create-record
        with:
          table: x_centene_fwa_investigation
          short_description: FWA Investigation — Provider {{provider_id}}
          description: 'Risk score: {{run-detection.risk_score}}. Anomalies: {{run-detection.anomaly_count}}. Period: {{claim_period}}.'
          priority: '2'
      - name: alert-siu
        type: call
        call: msteams.send-message
        with:
          channel_id: special_investigations
          text: 'FWA Alert: Provider {{provider_id}} flagged. Risk score: {{run-detection.risk_score}}. Investigation: {{create-investigation.number}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://centene.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://centene.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fraud-waste-and-abuse-detection-pipeline.yml

Retrieves regulatory compliance document metadata from SharePoint by document ID, returning version, author, and status.

naftiko: '0.5'
info:
  label: SharePoint Compliance Document Lookup
  description: Retrieves regulatory compliance document metadata from SharePoint by document ID, returning version, author, and status.
  tags:
  - compliance
  - document-management
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: compliance-documents
    port: 8080
    tools:
    - name: get-compliance-document
      description: Look up compliance document metadata in SharePoint.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: SharePoint document ID.
      call: sharepoint.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: version
        type: string
        mapping: $.version
      - name: modified_by
        type: string
        mapping: $.lastModifiedBy.user.displayName
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites/centene.sharepoint.com
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /drive/items/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → sharepoint-compliance-document-lookup.yml

Verifies a member's benefits eligibility for a specific service type and returns coverage details, copay amounts, and deductible status.

naftiko: '0.5'
info:
  label: Member Benefits Eligibility Checker
  description: Verifies a member's benefits eligibility for a specific service type and returns coverage details, copay amounts, and deductible status.
  tags:
  - healthcare
  - eligibility
  - benefits
capability:
  exposes:
  - type: mcp
    namespace: benefits-eligibility
    port: 8080
    tools:
    - name: check-eligibility
      description: Check a member's benefits eligibility for a given service type.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: service_type
        in: body
        type: string
        description: Service type code (e.g., inpatient, outpatient, pharmacy, behavioral_health).
      - name: service_date
        in: body
        type: string
        description: Date of service in YYYY-MM-DD.
      call: eligibility.check
      with:
        member_id: '{{member_id}}'
        service_type: '{{service_type}}'
        date: '{{service_date}}'
      outputParameters:
      - name: is_eligible
        type: boolean
        mapping: $.eligible
      - name: copay
        type: number
        mapping: $.cost_share.copay
      - name: deductible_met
        type: boolean
        mapping: $.deductible.met
      - name: deductible_remaining
        type: number
        mapping: $.deductible.remaining
      - name: plan_name
        type: string
        mapping: $.plan.name
  consumes:
  - type: http
    namespace: eligibility
    baseUri: https://eligibility-api.centene.com/v2
    authentication:
      type: bearer
      token: $secrets.eligibility_api_token
    resources:
    - name: eligibility
      path: /members/{{member_id}}/eligibility
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: check
        method: GET
Open in Framework → View in Fleet → member-benefits-eligibility-checker.yml

Reconciles claims payment data between the claims system and Oracle E-Business Suite accounts payable.

naftiko: '0.5'
info:
  label: Oracle E-Business Suite Claims Payment Reconciliation
  description: Reconciles claims payment data between the claims system and Oracle E-Business Suite accounts payable.
  tags:
  - finance
  - reconciliation
  - oracle-ebs
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: claims-reconciliation
    port: 8080
    tools:
    - name: reconcile-claims-payments
      description: Compare claims payment data with Oracle EBS AP records to identify discrepancies.
      inputParameters:
      - name: payment_batch
        in: body
        type: string
        description: Payment batch identifier.
      - name: payment_date
        in: body
        type: string
        description: Payment date in YYYY-MM-DD.
      steps:
      - name: get-claims-data
        type: call
        call: snowflake.run-query
        with:
          query: SELECT claim_number, paid_amount, provider_id, payment_date FROM claims_payments WHERE batch_id='{{payment_batch}}' AND payment_date='{{payment_date}}'
      - name: get-ap-data
        type: call
        call: oracle-ebs.get-payments
        with:
          batch_id: '{{payment_batch}}'
          payment_date: '{{payment_date}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://centene.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: oracle-ebs
    baseUri: https://erp.centene.com/webservices/rest/ap_payments
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: payments
      path: /v1/payments
      operations:
      - name: get-payments
        method: GET
Open in Framework → View in Fleet → oracle-e-business-suite-claims-payment-reconciliation.yml

Retrieves prior authorization supporting document metadata from Box by file ID, returning file name, version, and shared link.

naftiko: '0.5'
info:
  label: Box Prior Auth Document Lookup
  description: Retrieves prior authorization supporting document metadata from Box by file ID, returning file name, version, and shared link.
  tags:
  - healthcare
  - prior-authorization
  - box
capability:
  exposes:
  - type: mcp
    namespace: prior-auth-documents
    port: 8080
    tools:
    - name: get-prior-auth-document
      description: Look up prior auth document metadata in Box.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Box file ID.
      call: box.get-file-info
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: version
        type: string
        mapping: $.file_version.id
      - name: shared_link
        type: string
        mapping: $.shared_link.url
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file-info
        method: GET
Open in Framework → View in Fleet → box-prior-auth-document-lookup.yml

Retrieves eligible employees from Workday for the open enrollment period and sends personalized Microsoft 365 email communications with benefits selection deadlines and enrollment links.

naftiko: '0.5'
info:
  label: Annual Open Enrollment Benefits Communication
  description: Retrieves eligible employees from Workday for the open enrollment period and sends personalized Microsoft 365 email communications with benefits selection deadlines and enrollment links.
  tags:
  - hr
  - benefits
  - workday
  - open-enrollment
  - microsoft-365
capability:
  exposes:
  - type: mcp
    namespace: benefits-ops
    port: 8080
    tools:
    - name: send-open-enrollment-notifications
      description: Given an open enrollment period ID and deadline date, retrieve all eligible employees from Workday and send personalized open enrollment email notifications via Microsoft 365. Use at the start of annual benefits enrollment to ensure all eligible employees receive enrollment instructions.
      inputParameters:
      - name: enrollment_period_id
        in: body
        type: string
        description: Workday open enrollment period ID.
      - name: enrollment_deadline
        in: body
        type: string
        description: Benefits enrollment deadline date in YYYY-MM-DD format.
      - name: enrollment_portal_url
        in: body
        type: string
        description: URL to the benefits enrollment portal for employees.
      steps:
      - name: get-eligible-employees
        type: call
        call: workday-benefits.get-eligible-employees
        with:
          enrollment_period_id: '{{enrollment_period_id}}'
      - name: send-enrollment-notification
        type: call
        call: msgraph-benefits.send-email
        with:
          to: all-employees@cvshealth.com
          subject: 'Action Required: Open Enrollment Closes {{enrollment_deadline}}'
          body: 'CVS Health Open Enrollment is now open. Eligible employees ({{get-eligible-employees.count}} total): Please select your benefits by {{enrollment_deadline}} at {{enrollment_portal_url}}. No action means you keep your current elections.'
  consumes:
  - type: http
    namespace: workday-benefits
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: eligible-employees
      path: /cvs-health/openEnrollment/{{enrollment_period_id}}/eligibleEmployees
      inputParameters:
      - name: enrollment_period_id
        in: path
      operations:
      - name: get-eligible-employees
        method: GET
  - type: http
    namespace: msgraph-benefits
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/hr@cvshealth.com/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → annual-open-enrollment-benefits-communication.yml

Queries the pharmacy inventory management system for drugs below reorder threshold and creates a replenishment request in SAP, notifying the pharmacy operations team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Pharmacy Inventory Low Stock Alert
  description: Queries the pharmacy inventory management system for drugs below reorder threshold and creates a replenishment request in SAP, notifying the pharmacy operations team in Microsoft Teams.
  tags:
  - pharmacy
  - inventory
  - sap
  - microsoft-teams
  - operations
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-inventory
    port: 8080
    tools:
    - name: trigger-inventory-replenishment
      description: Given a store ID, query the pharmacy inventory system for drugs below the reorder point, create SAP purchase requisitions for each low-stock drug, and notify the pharmacy operations team in Teams. Use for automated daily inventory replenishment checks.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: CVS pharmacy store ID to check inventory for.
      - name: reorder_threshold_days
        in: body
        type: integer
        description: Days of supply threshold below which a reorder is triggered.
      steps:
      - name: get-low-stock-items
        type: call
        call: pharmacy-inv.get-low-stock
        with:
          store_id: '{{store_id}}'
          threshold_days: '{{reorder_threshold_days}}'
      - name: create-purchase-requisition
        type: call
        call: sap-inventory.create-requisition
        with:
          store_id: '{{store_id}}'
          item_count: '{{get-low-stock-items.count}}'
          items: '{{get-low-stock-items.drug_ids}}'
      - name: notify-pharmacy-ops
        type: call
        call: msteams-pharmacy.send-message
        with:
          channel_id: pharmacy-operations
          message: 'Inventory Alert — Store {{store_id}}: {{get-low-stock-items.count}} drugs below {{reorder_threshold_days}}-day supply. SAP Purchase Requisition: {{create-purchase-requisition.requisition_number}}'
  consumes:
  - type: http
    namespace: pharmacy-inv
    baseUri: https://api.cvshealth.com/pharmacy/v1
    authentication:
      type: bearer
      token: $secrets.cvs_platform_token
    resources:
    - name: inventory
      path: /stores/{{store_id}}/inventory/low-stock
      inputParameters:
      - name: store_id
        in: path
      - name: threshold_days
        in: query
      operations:
      - name: get-low-stock
        method: GET
  - type: http
    namespace: sap-inventory
    baseUri: https://cvs-s4.sap.com/sap/opu/odata/sap/MM_PUR_PR_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: requisitions
      path: /A_PurchaseRequisitionHeader
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: msteams-pharmacy
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacy-inventory-low-stock-alert.yml

Initiates the annual performance review cycle in Workday for a specified business unit, sending review completion reminders via Microsoft Teams to all managers with pending reviews.

naftiko: '0.5'
info:
  label: Workday Annual Performance Review Cycle Launch
  description: Initiates the annual performance review cycle in Workday for a specified business unit, sending review completion reminders via Microsoft Teams to all managers with pending reviews.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: performance-management
    port: 8080
    tools:
    - name: launch-performance-review-cycle
      description: Given a business unit ID and review period, retrieve the list of managers with pending performance reviews in Workday, then send Microsoft Teams reminder messages to each manager. Use at the start of the annual performance review cycle.
      inputParameters:
      - name: business_unit_id
        in: body
        type: string
        description: Workday business unit ID for the performance review cycle.
      - name: review_period
        in: body
        type: string
        description: Performance review period label (e.g., 'FY2025 Annual Review').
      - name: submission_deadline
        in: body
        type: string
        description: Review submission deadline date in YYYY-MM-DD format.
      steps:
      - name: get-pending-managers
        type: call
        call: workday-perf.list-pending-reviews
        with:
          business_unit_id: '{{business_unit_id}}'
          review_period: '{{review_period}}'
      - name: send-manager-reminder
        type: call
        call: msteams-perf.send-message
        with:
          channel_id: hr-announcements
          message: 'Performance Review Reminder: {{review_period}} reviews are due by {{submission_deadline}}. {{get-pending-managers.count}} managers have pending reviews in your business unit. Please complete in Workday.'
  consumes:
  - type: http
    namespace: workday-perf
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: performance-reviews
      path: /cvs-health/performanceReviews/pending
      inputParameters:
      - name: business_unit_id
        in: query
      - name: review_period
        in: query
      operations:
      - name: list-pending-reviews
        method: GET
  - type: http
    namespace: msteams-perf
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-annual-performance-review-cycle-launch.yml

Triggers a Snowflake query to compute same-day prescription fill rates across CVS pharmacy locations and refreshes the Tableau dashboard used by pharmacy operations leadership.

naftiko: '0.5'
info:
  label: Pharmacy Prescription Fill Rate Dashboard Refresh
  description: Triggers a Snowflake query to compute same-day prescription fill rates across CVS pharmacy locations and refreshes the Tableau dashboard used by pharmacy operations leadership.
  tags:
  - pharmacy
  - data
  - snowflake
  - tableau
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-reporting
    port: 8080
    tools:
    - name: refresh-fill-rate-dashboard
      description: Execute a Snowflake query to aggregate daily prescription fill rates by store and region, then trigger a Tableau workbook refresh for the pharmacy operations leadership dashboard. Use for daily operational reviews.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: Date for the fill rate report in YYYY-MM-DD format.
      - name: tableau_datasource_id
        in: body
        type: string
        description: Tableau datasource LUID to refresh.
      steps:
      - name: compute-fill-rates
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT store_id, region, COUNT(*) as total_rx, SUM(CASE WHEN status='filled' THEN 1 ELSE 0 END) as filled_rx, ROUND(filled_rx/total_rx*100,2) as fill_rate FROM pharmacy.rx_transactions WHERE fill_date='{{report_date}}' GROUP BY 1,2
      - name: refresh-tableau
        type: call
        call: tableau.refresh-datasource
        with:
          datasource_id: '{{tableau_datasource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cvs.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: tableau
    baseUri: https://tableau.cvshealth.com/api/2.8
    authentication:
      type: apikey
      key: X-Tableau-Auth
      value: $secrets.tableau_token
      placement: header
    resources:
    - name: datasource-refreshes
      path: /sites/{{site_id}}/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
Open in Framework → View in Fleet → pharmacy-prescription-fill-rate-dashboard-refresh.yml

Retrieves current headcount and FTE distribution by department and business unit from Workday for HR and finance planning cycles.

naftiko: '0.5'
info:
  label: Workday Payroll Headcount Snapshot
  description: Retrieves current headcount and FTE distribution by department and business unit from Workday for HR and finance planning cycles.
  tags:
  - hr
  - finance
  - workday
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-finance
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Retrieve the current headcount and FTE breakdown by department, business unit, and employment type from Workday. Use for monthly HR reporting, headcount planning, and budget variance analysis.
      call: workday-hc.headcount-report
      outputParameters:
      - name: total_headcount
        type: string
        mapping: $.report.totalHeadcount
      - name: total_fte
        type: number
        mapping: $.report.totalFTE
      - name: departments
        type: array
        mapping: $.report.departments
        items:
        - name: department_name
          type: string
          mapping: $.name
        - name: fte_count
          type: number
          mapping: $.fteCount
        - name: headcount
          type: number
          mapping: $.headcount
  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-report
      path: /cvs-health/reports/headcount
      operations:
      - name: headcount-report
        method: GET
Open in Framework → View in Fleet → workday-payroll-headcount-snapshot.yml

Creates a MinuteClinic patient appointment in the scheduling system and sends a confirmation notification to the patient via email using Microsoft Graph.

naftiko: '0.5'
info:
  label: MinuteClinic Appointment Scheduling
  description: Creates a MinuteClinic patient appointment in the scheduling system and sends a confirmation notification to the patient via email using Microsoft Graph.
  tags:
  - healthcare
  - minuteclinic
  - scheduling
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinic-scheduling
    port: 8080
    tools:
    - name: schedule-clinic-appointment
      description: Given a patient ID, clinic location, appointment type, and requested date/time, create a MinuteClinic appointment and send a confirmation email to the patient. Use for online appointment booking and telehealth scheduling workflows.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: CVS Health patient ID.
      - name: clinic_location_id
        in: body
        type: string
        description: MinuteClinic location ID.
      - name: appointment_type
        in: body
        type: string
        description: Appointment type code (e.g., 'WELLNESS', 'ILLNESS', 'VACCINATION').
      - name: requested_datetime
        in: body
        type: string
        description: Requested appointment datetime in ISO 8601 format.
      - name: patient_email
        in: body
        type: string
        description: Patient email address for confirmation.
      steps:
      - name: create-appointment
        type: call
        call: minuteclinic.create-appointment
        with:
          patient_id: '{{patient_id}}'
          location_id: '{{clinic_location_id}}'
          appointment_type: '{{appointment_type}}'
          scheduled_at: '{{requested_datetime}}'
      - name: send-confirmation
        type: call
        call: msgraph-clinic.send-email
        with:
          to: '{{patient_email}}'
          subject: Your MinuteClinic Appointment Confirmation
          body: 'Appointment ID: {{create-appointment.appointment_id}}

            Date/Time: {{requested_datetime}}

            Type: {{appointment_type}}

            Location: {{clinic_location_id}}'
  consumes:
  - type: http
    namespace: minuteclinic
    baseUri: https://api.cvshealth.com/minuteclinic/v1
    authentication:
      type: bearer
      token: $secrets.cvs_platform_token
    resources:
    - name: appointments
      path: /appointments
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: msgraph-clinic
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/noreply@cvshealth.com/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → minuteclinic-appointment-scheduling.yml

When a new prospective member lead is created in Salesforce, enriches the lead record with prescription benefit eligibility and plan tier data from the Caremark API.

naftiko: '0.5'
info:
  label: Salesforce Healthcare Member Lead Enrichment
  description: When a new prospective member lead is created in Salesforce, enriches the lead record with prescription benefit eligibility and plan tier data from the Caremark API.
  tags:
  - crm
  - sales
  - salesforce
  - caremark
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: member-acquisition
    port: 8080
    tools:
    - name: enrich-member-lead
      description: Given a Salesforce lead ID for a prospective health plan member, retrieve their current prescription benefit eligibility from Caremark and update the lead record with plan tier, benefit level, and estimated premium data. Use during member acquisition campaigns.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Salesforce lead record ID.
      - name: member_dob
        in: body
        type: string
        description: Prospective member date of birth in YYYY-MM-DD format for eligibility lookup.
      - name: zip_code
        in: body
        type: string
        description: Prospective member ZIP code for plan availability lookup.
      steps:
      - name: get-lead
        type: call
        call: salesforce-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: check-eligibility
        type: call
        call: caremark-eligibility.check-eligibility
        with:
          date_of_birth: '{{member_dob}}'
          zip_code: '{{zip_code}}'
      - name: update-lead
        type: call
        call: salesforce-lead-enrich.update-lead
        with:
          lead_id: '{{lead_id}}'
          benefit_level: '{{check-eligibility.benefit_level}}'
          plan_tier: '{{check-eligibility.plan_tier}}'
          estimated_premium: '{{check-eligibility.estimated_monthly_premium}}'
  consumes:
  - type: http
    namespace: salesforce-lead
    baseUri: https://cvs-health.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: caremark-eligibility
    baseUri: https://api.caremark.com/pbm/v2
    authentication:
      type: bearer
      token: $secrets.caremark_api_token
    resources:
    - name: eligibility
      path: /eligibility/check
      inputParameters:
      - name: date_of_birth
        in: query
      - name: zip_code
        in: query
      operations:
      - name: check-eligibility
        method: GET
  - type: http
    namespace: salesforce-lead-enrich
    baseUri: https://cvs-health.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-healthcare-member-lead-enrichment.yml

Looks up a drug's formulary tier, prior authorization requirements, and step therapy protocol in the CVS Caremark pharmacy benefit management system.

naftiko: '0.5'
info:
  label: Caremark PBM Drug Formulary Lookup
  description: Looks up a drug's formulary tier, prior authorization requirements, and step therapy protocol in the CVS Caremark pharmacy benefit management system.
  tags:
  - pharmacy
  - pbm
  - caremark
  - formulary
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: pbm-formulary
    port: 8080
    tools:
    - name: get-drug-formulary-status
      description: Given a drug NDC code and a plan ID, retrieve the formulary tier, PA requirements, quantity limits, and step therapy requirements from CVS Caremark PBM. Use for pharmacist clinical decision support and member benefit inquiries.
      inputParameters:
      - name: ndc_code
        in: body
        type: string
        description: National Drug Code (NDC) in 11-digit format.
      - name: plan_id
        in: body
        type: string
        description: Caremark benefit plan ID.
      call: caremark.get-formulary-status
      with:
        ndc: '{{ndc_code}}'
        plan_id: '{{plan_id}}'
      outputParameters:
      - name: formulary_tier
        type: string
        mapping: $.formulary.tier
      - name: requires_pa
        type: string
        mapping: $.formulary.priorAuthorizationRequired
      - name: step_therapy_required
        type: string
        mapping: $.formulary.stepTherapyRequired
      - name: quantity_limit
        type: string
        mapping: $.formulary.quantityLimit
  consumes:
  - type: http
    namespace: caremark
    baseUri: https://api.caremark.com/pbm/v2
    authentication:
      type: bearer
      token: $secrets.caremark_api_token
    resources:
    - name: formulary
      path: /formulary/drugs/{{ndc}}
      inputParameters:
      - name: ndc
        in: path
      - name: plan_id
        in: query
      operations:
      - name: get-formulary-status
        method: GET
Open in Framework → View in Fleet → caremark-pbm-drug-formulary-lookup.yml

On a GitHub Actions pipeline failure on the main branch, creates a Jira bug, posts an alert to the engineering Microsoft Teams channel, and records the failure in Snowflake for trend analysis.

naftiko: '0.5'
info:
  label: GitHub CI Pipeline Failure Alert
  description: On a GitHub Actions pipeline failure on the main branch, creates a Jira bug, posts an alert to the engineering Microsoft Teams channel, and records the failure in Snowflake for trend analysis.
  tags:
  - devops
  - cicd
  - github
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow failure on the main branch, create a Jira bug for the engineering team, post an alert to the Teams engineering channel, and log the failure event in Snowflake for pipeline reliability tracking. Use as part of the CI/CD failure notification pipeline.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name where the pipeline failed.
      - name: workflow_name
        in: body
        type: string
        description: GitHub Actions workflow name that failed.
      - name: run_id
        in: body
        type: string
        description: GitHub Actions workflow run ID.
      - name: commit_sha
        in: body
        type: string
        description: Commit SHA that triggered the failed run.
      - name: log_url
        in: body
        type: string
        description: URL to the GitHub Actions run log.
      steps:
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: 'CI Failure: {{workflow_name}} on {{repo_name}}'
          description: 'Repository: {{repo_name}}

            Workflow: {{workflow_name}}

            Run ID: {{run_id}}

            Commit: {{commit_sha}}

            Log: {{log_url}}'
      - name: notify-engineering
        type: call
        call: msteams-eng.send-message
        with:
          channel_id: engineering-alerts
          message: 'CI FAILURE: {{workflow_name}} on {{repo_name}} | Commit: {{commit_sha}} | Jira: {{create-jira-bug.key}} | Logs: {{log_url}}'
      - name: log-failure
        type: call
        call: snowflake-devops.run-query
        with:
          statement: INSERT INTO devops.pipeline_failures (repo_name, workflow_name, run_id, commit_sha, failed_at, jira_key) VALUES ('{{repo_name}}', '{{workflow_name}}', '{{run_id}}', '{{commit_sha}}', CURRENT_TIMESTAMP(), '{{create-jira-bug.key}}')
  consumes:
  - type: http
    namespace: jira
    baseUri: https://cvshealth.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: snowflake-devops
    baseUri: https://cvs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → github-ci-pipeline-failure-alert.yml

Retrieves all completed and incomplete Jira stories from the current sprint for a healthcare IT project and publishes a sprint review summary to the SharePoint project site.

naftiko: '0.5'
info:
  label: Jira Healthcare IT Project Sprint Review
  description: Retrieves all completed and incomplete Jira stories from the current sprint for a healthcare IT project and publishes a sprint review summary to the SharePoint project site.
  tags:
  - devops
  - project-management
  - jira
  - sharepoint
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: project-reporting
    port: 8080
    tools:
    - name: publish-sprint-review
      description: Given a Jira project key and SharePoint site ID, retrieve all stories from the current active sprint, compute completion rate, and publish a sprint review page to SharePoint. Use at the end of each two-week sprint for stakeholder communication.
      inputParameters:
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for the healthcare IT project (e.g., 'PHARM', 'AETNA', 'HIT').
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint Online site ID for the project site.
      steps:
      - name: get-sprint-stories
        type: call
        call: jira-sprint.search-issues
        with:
          jql: project={{jira_project_key}} AND sprint in openSprints() ORDER BY status ASC
      - name: publish-to-sharepoint
        type: call
        call: sharepoint.create-page
        with:
          site_id: '{{sharepoint_site_id}}'
          title: Sprint Review — {{jira_project_key}}
          content: 'Total Stories: {{get-sprint-stories.total}} | Completed: {{get-sprint-stories.done_count}} | In Progress: {{get-sprint-stories.in_progress_count}} | Completion Rate: {{get-sprint-stories.completion_pct}}%'
  consumes:
  - type: http
    namespace: jira-sprint
    baseUri: https://cvshealth.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues-search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: site-pages
      path: /sites/{{site_id}}/pages
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → jira-healthcare-it-project-sprint-review.yml

Triggers a Power BI dataset refresh for the enterprise finance dashboard and sends a Microsoft Teams notification to the CFO office when the refresh completes.

naftiko: '0.5'
info:
  label: Power BI Finance Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the enterprise finance dashboard and sends a Microsoft Teams notification to the CFO office when the refresh completes.
  tags:
  - finance
  - reporting
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: refresh-finance-dashboard
      description: Trigger a Power BI dataset refresh for the enterprise finance dashboard and notify the finance leadership team in Microsoft Teams when complete. Use before monthly close reporting and board presentations.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the finance dashboard.
      - name: workspace_id
        in: body
        type: string
        description: Power BI workspace ID containing the dataset.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-finance-team
        type: call
        call: msteams-finance.send-message
        with:
          channel_id: finance-leadership
          message: Finance Dashboard refresh triggered for dataset {{dataset_id}}. Results will be available within 20 minutes.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams-finance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-finance-dashboard-refresh.yml

When a Salesforce customer service case for a pharmacy issue is escalated to priority 1, creates a ServiceNow operational incident and notifies the pharmacy operations duty manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Case Escalation to Pharmacy Operations
  description: When a Salesforce customer service case for a pharmacy issue is escalated to priority 1, creates a ServiceNow operational incident and notifies the pharmacy operations duty manager in Microsoft Teams.
  tags:
  - customer-service
  - pharmacy
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-service
    port: 8080
    tools:
    - name: escalate-pharmacy-case
      description: Given a Salesforce case ID escalated to P1, retrieve the case details, create a ServiceNow operational incident for pharmacy operations, and notify the duty manager in Microsoft Teams. Use when pharmacy dispensing errors or critical member complaints are escalated.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce case record ID.
      steps:
      - name: get-case
        type: call
        call: salesforce-case.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-ops-incident
        type: call
        call: servicenow-pharmacy.create-incident
        with:
          short_description: 'Pharmacy P1 Escalation: {{get-case.subject}}'
          category: Pharmacy Operations
          urgency: '1'
          description: 'Salesforce Case: {{case_id}}

            Subject: {{get-case.subject}}

            Member ID: {{get-case.member_id}}

            Store: {{get-case.store_id}}

            Description: {{get-case.description}}'
      - name: notify-duty-manager
        type: call
        call: msteams-ops.send-message
        with:
          channel_id: pharmacy-ops-escalations
          message: 'P1 PHARMACY ESCALATION: {{get-case.subject}} | Case: {{case_id}} | Store: {{get-case.store_id}} | SNOW: {{create-ops-incident.number}}'
  consumes:
  - type: http
    namespace: salesforce-case
    baseUri: https://cvs-health.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-pharmacy
    baseUri: https://cvshealth.service-now.com/api/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-ops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-case-escalation-to-pharmacy-operations.yml

Submits a prior authorization request to Aetna's utilization management system, creates a ServiceNow case to track the PA review, and notifies the requesting provider via email.

naftiko: '0.5'
info:
  label: Aetna Member Prior Authorization Request
  description: Submits a prior authorization request to Aetna's utilization management system, creates a ServiceNow case to track the PA review, and notifies the requesting provider via email.
  tags:
  - healthcare
  - insurance
  - aetna
  - prior-authorization
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: utilization-management
    port: 8080
    tools:
    - name: submit-prior-authorization
      description: Given a member ID, provider NPI, requested procedure/drug code, and clinical justification, submit a prior authorization request to Aetna and create a tracking case in ServiceNow. Use for provider portal PA submissions and care management workflows.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Aetna member ID.
      - name: provider_npi
        in: body
        type: string
        description: National Provider Identifier of the requesting provider.
      - name: procedure_code
        in: body
        type: string
        description: CPT or HCPCS procedure code requiring authorization.
      - name: diagnosis_code
        in: body
        type: string
        description: ICD-10 diagnosis code supporting the request.
      - name: clinical_notes
        in: body
        type: string
        description: Clinical justification summary for the authorization request.
      steps:
      - name: submit-pa-request
        type: call
        call: aetna-pa.create-authorization
        with:
          member_id: '{{member_id}}'
          provider_npi: '{{provider_npi}}'
          procedure_code: '{{procedure_code}}'
          diagnosis_code: '{{diagnosis_code}}'
          clinical_notes: '{{clinical_notes}}'
      - name: create-tracking-case
        type: call
        call: servicenow-pa.create-incident
        with:
          short_description: 'Prior Authorization: {{procedure_code}} for member {{member_id}}'
          category: Utilization Management
          description: 'PA Request ID: {{submit-pa-request.pa_request_id}}

            Member: {{member_id}}

            Provider NPI: {{provider_npi}}

            Procedure: {{procedure_code}}

            Diagnosis: {{diagnosis_code}}

            Status: {{submit-pa-request.status}}'
  consumes:
  - type: http
    namespace: aetna-pa
    baseUri: https://api.aetna.com/health/v1
    authentication:
      type: bearer
      token: $secrets.aetna_api_token
    resources:
    - name: authorizations
      path: /authorizations
      operations:
      - name: create-authorization
        method: POST
  - type: http
    namespace: servicenow-pa
    baseUri: https://cvshealth.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → aetna-member-prior-authorization-request.yml

After a Caremark PBM prescription transaction is completed, triggers a member satisfaction survey via email and logs survey responses in Snowflake for NPS trend analysis.

naftiko: '0.5'
info:
  label: Pharmacy Benefit Member Satisfaction Survey
  description: After a Caremark PBM prescription transaction is completed, triggers a member satisfaction survey via email and logs survey responses in Snowflake for NPS trend analysis.
  tags:
  - customer-experience
  - caremark
  - snowflake
  - pharmacy
  - nps
capability:
  exposes:
  - type: mcp
    namespace: member-experience
    port: 8080
    tools:
    - name: send-prescription-satisfaction-survey
      description: Given a completed Caremark prescription transaction ID and member email, send a satisfaction survey email to the member and log the survey dispatch record in Snowflake for NPS tracking. Use 24 hours after prescription fill completion.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: Caremark prescription transaction ID.
      - name: member_email
        in: body
        type: string
        description: Member email address to send the survey to.
      - name: member_id
        in: body
        type: string
        description: Caremark member ID.
      steps:
      - name: send-survey-email
        type: call
        call: msgraph-survey.send-email
        with:
          to: '{{member_email}}'
          subject: How was your CVS Caremark experience?
          body: Thank you for using CVS Caremark! Please rate your prescription experience for transaction {{transaction_id}}. Your feedback helps us improve.
      - name: log-survey-dispatch
        type: call
        call: snowflake-nps.run-query
        with:
          statement: INSERT INTO member_experience.survey_dispatches (transaction_id, member_id, member_email, dispatched_at) VALUES ('{{transaction_id}}', '{{member_id}}', '{{member_email}}', CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: msgraph-survey
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/noreply@caremark.com/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: snowflake-nps
    baseUri: https://cvs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → pharmacy-benefit-member-satisfaction-survey.yml

When a Workday leave of absence request is approved, updates the employee's Microsoft 365 account with an out-of-office reply, reassigns Salesforce cases to a backup agent, and creates a ServiceNow leave tracking task.

naftiko: '0.5'
info:
  label: Workday Leave of Absence Processing
  description: When a Workday leave of absence request is approved, updates the employee's Microsoft 365 account with an out-of-office reply, reassigns Salesforce cases to a backup agent, and creates a ServiceNow leave tracking task.
  tags:
  - hr
  - leave-management
  - workday
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: leave-management
    port: 8080
    tools:
    - name: process-leave-of-absence
      description: Given a Workday leave request for a customer service employee, configure an out-of-office auto-reply in Microsoft 365, reassign their open Salesforce cases to a backup agent, and create a ServiceNow leave management task. Use when customer-facing employees take approved LOA.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID of the employee taking leave.
      - name: leave_start_date
        in: body
        type: string
        description: Leave start date in YYYY-MM-DD format.
      - name: leave_end_date
        in: body
        type: string
        description: Expected leave end date in YYYY-MM-DD format.
      - name: backup_agent_id
        in: body
        type: string
        description: Salesforce user ID of the backup agent to receive reassigned cases.
      steps:
      - name: get-worker
        type: call
        call: workday-leave.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: set-oof-reply
        type: call
        call: msgraph-leave.set-auto-reply
        with:
          user_principal_name: '{{get-worker.work_email}}'
          message: I am on approved leave from {{leave_start_date}} to {{leave_end_date}}. Please contact my team for urgent matters.
      - name: create-leave-task
        type: call
        call: servicenow-leave.create-incident
        with:
          short_description: 'Leave of Absence: {{get-worker.full_name}} ({{leave_start_date}} to {{leave_end_date}})'
          category: HR Leave Management
          description: 'Worker: {{worker_id}}

            Employee: {{get-worker.full_name}}

            Leave: {{leave_start_date}} to {{leave_end_date}}

            Backup Agent: {{backup_agent_id}}'
  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: workers
      path: /cvs-health/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph-leave
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: auto-reply
      path: /users/{{user_principal_name}}/mailboxSettings
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: set-auto-reply
        method: PATCH
  - type: http
    namespace: servicenow-leave
    baseUri: https://cvshealth.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → workday-leave-of-absence-processing.yml

Retrieves an open vendor invoice from SAP S/4HANA, validates it against the purchase order, and routes it for three-way match approval via ServiceNow.

naftiko: '0.5'
info:
  label: SAP Vendor Invoice Processing
  description: Retrieves an open vendor invoice from SAP S/4HANA, validates it against the purchase order, and routes it for three-way match approval via ServiceNow.
  tags:
  - finance
  - accounts-payable
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: accounts-payable
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Given a SAP vendor invoice ID, retrieve the invoice and matching PO from SAP, perform three-way match validation, and create a ServiceNow approval task if the invoice requires manual review. Use for AP invoice processing automation.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: SAP vendor invoice document number.
      - name: fiscal_year
        in: body
        type: string
        description: SAP fiscal year for the invoice (e.g., '2025').
      steps:
      - name: get-invoice
        type: call
        call: sap-ap.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
          fiscal_year: '{{fiscal_year}}'
      - name: create-approval-task
        type: call
        call: servicenow-ap.create-incident
        with:
          short_description: 'Invoice Approval: {{invoice_id}} — {{get-invoice.vendor_name}} ${{get-invoice.amount}}'
          category: Accounts Payable
          description: 'Invoice: {{invoice_id}}

            Vendor: {{get-invoice.vendor_name}}

            Amount: ${{get-invoice.amount}} {{get-invoice.currency}}

            PO: {{get-invoice.po_number}}

            Payment Terms: {{get-invoice.payment_terms}}'
  consumes:
  - type: http
    namespace: sap-ap
    baseUri: https://cvs-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice(SupplierInvoice='{{invoice_id}}',FiscalYear='{{fiscal_year}}')
      inputParameters:
      - name: invoice_id
        in: path
      - name: fiscal_year
        in: path
      operations:
      - name: get-invoice
        method: GET
        outputRawFormat: xml
  - type: http
    namespace: servicenow-ap
    baseUri: https://cvshealth.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sap-vendor-invoice-processing.yml

Retrieves updated provider network roster data from Aetna and loads it into Snowflake for analytics and member-facing provider directory applications.

naftiko: '0.5'
info:
  label: Aetna Network Provider Roster Sync
  description: Retrieves updated provider network roster data from Aetna and loads it into Snowflake for analytics and member-facing provider directory applications.
  tags:
  - healthcare
  - aetna
  - snowflake
  - data
  - provider-network
capability:
  exposes:
  - type: mcp
    namespace: provider-network
    port: 8080
    tools:
    - name: sync-provider-roster
      description: Retrieve the latest provider network roster delta from Aetna's provider management API and load changed records into the Snowflake provider directory table. Use for nightly provider network synchronization to keep member-facing directories current.
      inputParameters:
      - name: network_id
        in: body
        type: string
        description: Aetna network plan ID to sync (e.g., 'OPEN_CHOICE', 'HMO_PLUS').
      - name: since_date
        in: body
        type: string
        description: Sync delta since this date in YYYY-MM-DD format.
      steps:
      - name: get-roster-delta
        type: call
        call: aetna-providers.get-provider-roster
        with:
          network_id: '{{network_id}}'
          modified_since: '{{since_date}}'
      - name: load-to-snowflake
        type: call
        call: snowflake-providers.run-query
        with:
          statement: MERGE INTO provider_directory.providers USING (SELECT * FROM TABLE(PARSE_JSON('{{get-roster-delta.providers}}'))) AS src ON providers.npi = src.npi WHEN MATCHED THEN UPDATE SET network_status=src.network_status, last_updated=CURRENT_TIMESTAMP() WHEN NOT MATCHED THEN INSERT (npi, name, specialty, network_id, network_status) VALUES (src.npi, src.name, src.specialty, '{{network_id}}', src.network_status)
  consumes:
  - type: http
    namespace: aetna-providers
    baseUri: https://api.aetna.com/health/v1
    authentication:
      type: bearer
      token: $secrets.aetna_api_token
    resources:
    - name: provider-roster
      path: /networks/{{network_id}}/providers
      inputParameters:
      - name: network_id
        in: path
      - name: modified_since
        in: query
      operations:
      - name: get-provider-roster
        method: GET
  - type: http
    namespace: snowflake-providers
    baseUri: https://cvs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → aetna-network-provider-roster-sync.yml

When a P1 IT incident is raised in ServiceNow, pages the on-call engineer via PagerDuty and creates a Microsoft Teams war room channel for incident coordination.

naftiko: '0.5'
info:
  label: ServiceNow IT Incident Response Escalation
  description: When a P1 IT incident is raised in ServiceNow, pages the on-call engineer via PagerDuty and creates a Microsoft Teams war room channel for incident coordination.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: escalate-p1-incident
      description: Given a ServiceNow P1 incident number, retrieve incident details, trigger a PagerDuty alert for the on-call engineer, and create a Microsoft Teams channel for war room coordination. Use when critical IT incidents require immediate cross-team response.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number (e.g., 'INC0012345').
      steps:
      - name: get-incident
        type: call
        call: servicenow-p1.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: page-on-call
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1 Incident: {{get-incident.short_description}}'
          severity: critical
          body: 'SNOW: {{incident_number}} | {{get-incident.short_description}} | Category: {{get-incident.category}}'
      - name: create-teams-channel
        type: call
        call: msteams-incident.create-channel
        with:
          display_name: INC-{{incident_number}}-war-room
          description: 'War room for P1 incident {{incident_number}}: {{get-incident.short_description}}'
  consumes:
  - type: http
    namespace: servicenow-p1
    baseUri: https://cvshealth.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: 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: msteams-incident
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: create-channel
        method: POST
Open in Framework → View in Fleet → servicenow-it-incident-response-escalation.yml

When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions Microsoft 365 access via Microsoft Graph, and sends a Microsoft Teams welcome message to the hiring manager.

naftiko: '0.5'
info:
  label: Workday New Hire Onboarding Orchestration
  description: When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions Microsoft 365 access via Microsoft Graph, and sends a Microsoft Teams welcome message to the hiring manager.
  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, retrieve worker details, create a ServiceNow onboarding ticket, provision Microsoft 365 access, and send a Teams welcome notification to the hiring manager. Use when new hires are confirmed in Workday.
      inputParameters:
      - name: worker_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 ISO 8601 format (YYYY-MM-DD).
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: open-onboarding-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-worker.full_name}}'
          category: HR
          description: 'Worker ID: {{worker_id}}

            Start Date: {{start_date}}

            Department: {{get-worker.department}}

            Manager: {{get-worker.manager_name}}'
      - name: provision-m365
        type: call
        call: msgraph.create-user
        with:
          user_principal_name: '{{get-worker.work_email}}'
          display_name: '{{get-worker.full_name}}'
          department: '{{get-worker.department}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-worker.manager_email}}'
          message: 'Your new team member {{get-worker.full_name}} starts on {{start_date}}. Onboarding ticket: {{open-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: /cvs-health/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cvshealth.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-new-hire-onboarding-orchestration.yml

When a manager submits a compensation adjustment in Workday, retrieves the adjustment details and routes it through a ServiceNow approval workflow based on the percentage change threshold.

naftiko: '0.5'
info:
  label: Workday Compensation Adjustment Approval
  description: When a manager submits a compensation adjustment in Workday, retrieves the adjustment details and routes it through a ServiceNow approval workflow based on the percentage change threshold.
  tags:
  - hr
  - compensation
  - workday
  - servicenow
  - approval
capability:
  exposes:
  - type: mcp
    namespace: compensation-ops
    port: 8080
    tools:
    - name: route-compensation-adjustment
      description: Given a Workday compensation adjustment event ID, retrieve the change details and route to the appropriate approval level in ServiceNow based on the percentage change (standard, director, or executive approval). Use for merit cycle and off-cycle compensation change processing.
      inputParameters:
      - name: adjustment_event_id
        in: body
        type: string
        description: Workday compensation change event ID.
      - name: approver_upn
        in: body
        type: string
        description: UPN of the required approver for the compensation change.
      steps:
      - name: get-adjustment
        type: call
        call: workday-comp.get-comp-change
        with:
          event_id: '{{adjustment_event_id}}'
      - name: create-approval-request
        type: call
        call: servicenow-comp.create-incident
        with:
          short_description: 'Compensation Adjustment Approval: {{get-adjustment.worker_name}} — {{get-adjustment.change_pct}}% increase'
          category: HR Compensation
          description: 'Worker: {{get-adjustment.worker_name}}

            Event: {{adjustment_event_id}}

            Current Base: ${{get-adjustment.current_salary}}

            Proposed Base: ${{get-adjustment.proposed_salary}}

            Change: {{get-adjustment.change_pct}}%

            Effective Date: {{get-adjustment.effective_date}}'
  consumes:
  - type: http
    namespace: workday-comp
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation-changes
      path: /cvs-health/compensationChanges/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-comp-change
        method: GET
  - type: http
    namespace: servicenow-comp
    baseUri: https://cvshealth.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → workday-compensation-adjustment-approval.yml

Retrieves a Salesforce health plan member account summary including open cases, recent interactions, and plan details for customer service representatives handling escalations.

naftiko: '0.5'
info:
  label: Salesforce Customer Account Health Review
  description: Retrieves a Salesforce health plan member account summary including open cases, recent interactions, and plan details for customer service representatives handling escalations.
  tags:
  - crm
  - customer-service
  - salesforce
  - healthcare
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: customer-service
    port: 8080
    tools:
    - name: get-member-account-summary
      description: Given a Salesforce account ID for a health plan member, retrieve account details, open service cases, recent interaction history, and current plan enrollment. Use when customer service agents need a 360-degree member view before handling an escalation.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID for the health plan member.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-open-cases
        type: call
        call: salesforce-cases.list-cases
        with:
          account_id: '{{account_id}}'
          status: Open
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://cvs-health.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: salesforce-cases
    baseUri: https://cvs-health.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      inputParameters:
      - name: account_id
        in: query
      - name: status
        in: query
      operations:
      - name: list-cases
        method: GET
Open in Framework → View in Fleet → salesforce-customer-account-health-review.yml

When a HIPAA or CMS regulatory incident is identified, creates a high-priority ServiceNow compliance incident, notifies the Chief Compliance Officer via Microsoft Teams, and logs it in the Snowflake compliance audit trail.

naftiko: '0.5'
info:
  label: Healthcare Regulatory Compliance Incident Report
  description: When a HIPAA or CMS regulatory incident is identified, creates a high-priority ServiceNow compliance incident, notifies the Chief Compliance Officer via Microsoft Teams, and logs it in the Snowflake compliance audit trail.
  tags:
  - compliance
  - healthcare
  - hipaa
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-ops
    port: 8080
    tools:
    - name: report-regulatory-incident
      description: Given a regulatory incident description, affected data type, and incident category, create a ServiceNow compliance incident, notify the CCO via Teams, and insert an audit record into Snowflake. Use for HIPAA breaches, CMS violations, or state insurance regulatory events.
      inputParameters:
      - name: incident_description
        in: body
        type: string
        description: Description of the regulatory incident, including what occurred and initial scope.
      - name: regulation_type
        in: body
        type: string
        description: 'Regulation applicable to the incident: HIPAA, CMS, STATE, or ERISA.'
      - name: affected_member_count
        in: body
        type: integer
        description: Estimated number of members or records affected.
      - name: business_unit
        in: body
        type: string
        description: CVS Health business unit where the incident originated (e.g., Aetna, Caremark, Pharmacy).
      steps:
      - name: create-compliance-incident
        type: call
        call: servicenow-compliance.create-incident
        with:
          short_description: 'Regulatory Incident: {{regulation_type}} — {{business_unit}}'
          category: Regulatory Compliance
          urgency: '1'
          description: 'Regulation: {{regulation_type}}

            Business Unit: {{business_unit}}

            Affected Records: {{affected_member_count}}

            Description: {{incident_description}}'
      - name: log-audit-record
        type: call
        call: snowflake-compliance.run-query
        with:
          statement: INSERT INTO compliance.regulatory_incidents (incident_number, regulation_type, business_unit, affected_count, description, reported_at) VALUES ('{{create-compliance-incident.number}}', '{{regulation_type}}', '{{business_unit}}', {{affected_member_count}}, '{{incident_description}}', CURRENT_TIMESTAMP())
      - name: notify-cco
        type: call
        call: msteams-compliance.send-message
        with:
          channel_id: compliance-leadership
          message: 'REGULATORY INCIDENT FILED: {{regulation_type}} | Business Unit: {{business_unit}} | Members Affected: {{affected_member_count}} | SNOW: {{create-compliance-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow-compliance
    baseUri: https://cvshealth.service-now.com/api/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: snowflake-compliance
    baseUri: https://cvs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams-compliance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → healthcare-regulatory-compliance-incident-report.yml

When a purchase order in SAP S/4HANA awaits approval, retrieves PO details and routes it to the appropriate approver via ServiceNow workflow, notifying the approver in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Purchase Order Approval Workflow
  description: When a purchase order in SAP S/4HANA awaits approval, retrieves PO details and routes it to the appropriate approver via ServiceNow workflow, notifying the approver in Microsoft Teams.
  tags:
  - finance
  - procurement
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: route-po-for-approval
      description: Given a SAP purchase order number pending approval, retrieve the PO header and line items, create a ServiceNow approval request, and notify the approver via Microsoft Teams. Use for POs above the auto-approval threshold requiring human review.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number (e.g., '4500012345').
      - name: approver_upn
        in: body
        type: string
        description: UPN of the designated approver.
      steps:
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: create-approval-request
        type: call
        call: servicenow-approval.create-incident
        with:
          short_description: 'PO Approval Required: {{po_number}} — ${{get-po.total_amount}}'
          category: Procurement
          description: 'PO: {{po_number}}

            Vendor: {{get-po.vendor_name}}

            Amount: ${{get-po.total_amount}} {{get-po.currency}}

            Requester: {{get-po.created_by}}'
      - name: notify-approver
        type: call
        call: msteams-approval.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          message: 'Purchase Order {{po_number}} for ${{get-po.total_amount}} requires your approval. Vendor: {{get-po.vendor_name}}. ServiceNow: {{create-approval-request.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://cvs-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
  - type: http
    namespace: servicenow-approval
    baseUri: https://cvshealth.service-now.com/api/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-approval
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-purchase-order-approval-workflow.yml

When an employee is terminated in Workday, disables the Microsoft 365 account, revokes Salesforce license, and creates a ServiceNow offboarding checklist task.

naftiko: '0.5'
info:
  label: Employee Offboarding Access Revocation
  description: When an employee is terminated in Workday, disables the Microsoft 365 account, revokes Salesforce license, and creates a ServiceNow offboarding checklist task.
  tags:
  - hr
  - offboarding
  - workday
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: deprovision-terminated-employee
      description: Given a Workday worker ID for a terminated employee, disable the Microsoft 365 account, remove Salesforce license assignment, and create a ServiceNow offboarding checklist. Use immediately upon confirmed termination to ensure access revocation.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID of the terminated employee.
      steps:
      - name: get-worker
        type: call
        call: workday-offboard.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: disable-m365-account
        type: call
        call: msgraph-offboard.disable-user
        with:
          user_principal_name: '{{get-worker.work_email}}'
          account_enabled: 'false'
      - name: create-offboarding-task
        type: call
        call: servicenow-offboard.create-incident
        with:
          short_description: 'Employee Offboarding: {{get-worker.full_name}}'
          category: HR
          description: 'Worker: {{worker_id}}

            Employee: {{get-worker.full_name}}

            Last Day: {{get-worker.termination_date}}

            Department: {{get-worker.department}}

            M365 disabled: {{disable-m365-account.status}}'
  consumes:
  - type: http
    namespace: workday-offboard
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /cvs-health/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph-offboard
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_principal_name}}
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow-offboard
    baseUri: https://cvshealth.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → employee-offboarding-access-revocation.yml

When a critical defect is filed in Jira for CVS Health digital platforms (app or website), automatically creates a ServiceNow P1 incident and alerts the digital engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Digital Health App Defect Triage
  description: When a critical defect is filed in Jira for CVS Health digital platforms (app or website), automatically creates a ServiceNow P1 incident and alerts the digital engineering team in Microsoft Teams.
  tags:
  - devops
  - digital-health
  - jira
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: digital-ops
    port: 8080
    tools:
    - name: triage-digital-defect
      description: Given a Jira critical defect ID for the CVS digital platform, create a corresponding ServiceNow incident for operations tracking and notify the digital engineering on-call channel in Teams. Use when the CVS mobile app, website, or digital pharmacy portal has a critical production defect.
      inputParameters:
      - name: jira_issue_key
        in: body
        type: string
        description: Jira issue key for the critical digital defect (e.g., 'DIGI-5432').
      - name: platform
        in: body
        type: string
        description: 'Affected digital platform: MOBILE_APP, WEBSITE, or PHARMACY_PORTAL.'
      steps:
      - name: get-defect
        type: call
        call: jira-digital.get-issue
        with:
          issue_key: '{{jira_issue_key}}'
      - name: create-ops-incident
        type: call
        call: servicenow-digital.create-incident
        with:
          short_description: 'Digital P1: {{get-defect.summary}} on {{platform}}'
          category: Digital Platform
          urgency: '1'
          description: 'Jira: {{jira_issue_key}}

            Platform: {{platform}}

            Summary: {{get-defect.summary}}

            Reporter: {{get-defect.reporter}}

            Affected Users: {{get-defect.affected_users}}'
      - name: alert-digital-team
        type: call
        call: msteams-digital.send-message
        with:
          channel_id: digital-oncall
          message: 'CRITICAL DIGITAL DEFECT: {{get-defect.summary}} | Platform: {{platform}} | Jira: {{jira_issue_key}} | SNOW: {{create-ops-incident.number}}'
  consumes:
  - type: http
    namespace: jira-digital
    baseUri: https://cvshealth.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: servicenow-digital
    baseUri: https://cvshealth.service-now.com/api/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-digital
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-health-app-defect-triage.yml

When AWS Cost Anomaly Detection identifies an unexpected spend spike, creates a ServiceNow incident and notifies the cloud FinOps team in Microsoft Teams with cost breakdown details.

naftiko: '0.5'
info:
  label: AWS Cost Anomaly Alert and Ticket
  description: When AWS Cost Anomaly Detection identifies an unexpected spend spike, creates a ServiceNow incident and notifies the cloud FinOps team in Microsoft Teams with cost breakdown details.
  tags:
  - cloud
  - finops
  - aws
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops-ops
    port: 8080
    tools:
    - name: handle-aws-cost-anomaly
      description: Given an AWS cost anomaly alert with account ID, service, and excess spend amount, create a ServiceNow incident for the FinOps team and notify the cloud operations Microsoft Teams channel. Use when AWS anomaly detection fires on unexpected spending.
      inputParameters:
      - name: aws_account_id
        in: body
        type: string
        description: AWS account ID where the cost anomaly was detected.
      - name: service_name
        in: body
        type: string
        description: AWS service with the cost anomaly (e.g., 'Amazon EC2', 'Amazon S3').
      - name: excess_spend
        in: body
        type: string
        description: Estimated excess spend amount in USD.
      - name: anomaly_id
        in: body
        type: string
        description: AWS Cost Anomaly ID.
      steps:
      - name: create-finops-ticket
        type: call
        call: servicenow-finops.create-incident
        with:
          short_description: 'AWS Cost Anomaly: {{service_name}} in {{aws_account_id}} — ${{excess_spend}} overage'
          category: Cloud FinOps
          urgency: '2'
          description: 'Anomaly ID: {{anomaly_id}}

            Account: {{aws_account_id}}

            Service: {{service_name}}

            Excess Spend: ${{excess_spend}}'
      - name: notify-finops-team
        type: call
        call: msteams-finops.send-message
        with:
          channel_id: cloud-finops-alerts
          message: 'AWS COST ANOMALY: {{service_name}} in account {{aws_account_id}} — ${{excess_spend}} above expected. SNOW: {{create-finops-ticket.number}} | Anomaly: {{anomaly_id}}'
  consumes:
  - type: http
    namespace: servicenow-finops
    baseUri: https://cvshealth.service-now.com/api/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-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aws-cost-anomaly-alert-and-ticket.yml

Monitors the Snowflake data pipeline that feeds the retail pharmacy sales reporting layer and alerts the data engineering team via Microsoft Teams if any partition load fails or is delayed.

naftiko: '0.5'
info:
  label: Snowflake Retail Pharmacy Sales Pipeline Monitoring
  description: Monitors the Snowflake data pipeline that feeds the retail pharmacy sales reporting layer and alerts the data engineering team via Microsoft Teams if any partition load fails or is delayed.
  tags:
  - data
  - monitoring
  - snowflake
  - microsoft-teams
  - pharmacy
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-ops
    port: 8080
    tools:
    - name: monitor-pharmacy-sales-pipeline
      description: Query Snowflake pipeline metadata to identify any failed or stale partition loads in the retail pharmacy sales data pipeline. Alert the data engineering team in Teams if load SLA is breached. Use in scheduled pipeline health monitoring.
      inputParameters:
      - name: sla_minutes
        in: body
        type: integer
        description: Maximum acceptable minutes since last successful partition load.
      steps:
      - name: check-pipeline-status
        type: call
        call: snowflake-pipeline.run-query
        with:
          statement: SELECT pipeline_name, partition_date, MAX(loaded_at) as last_load, DATEDIFF(minute, MAX(loaded_at), CURRENT_TIMESTAMP()) as minutes_stale FROM pharmacy.etl_pipeline_log WHERE loaded_at < DATEADD(minute, -{{sla_minutes}}, CURRENT_TIMESTAMP()) GROUP BY 1,2 ORDER BY minutes_stale DESC LIMIT 10
      - name: alert-data-team
        type: call
        call: msteams-data.send-message
        with:
          channel_id: data-engineering-alerts
          message: 'PIPELINE ALERT: Pharmacy sales pipeline stale. Pipeline: {{check-pipeline-status.pipeline_name}} | Last load: {{check-pipeline-status.last_load}} | Stale by: {{check-pipeline-status.minutes_stale}} minutes'
  consumes:
  - type: http
    namespace: snowflake-pipeline
    baseUri: https://cvs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams-data
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-retail-pharmacy-sales-pipeline-monitoring.yml

Validates the completeness and accuracy of Medicare Star Ratings performance data in Snowflake against CMS submission deadlines and alerts the quality team if data gaps are found.

naftiko: '0.5'
info:
  label: Medicare Star Ratings Data Quality Check
  description: Validates the completeness and accuracy of Medicare Star Ratings performance data in Snowflake against CMS submission deadlines and alerts the quality team if data gaps are found.
  tags:
  - healthcare
  - compliance
  - snowflake
  - cms
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: stars-quality
    port: 8080
    tools:
    - name: validate-star-ratings-data
      description: Query Snowflake to validate completeness of Medicare Star Ratings measure data for the current performance year. Alert the quality analytics team if any required measures are missing or below completeness thresholds. Use ahead of CMS submission deadlines.
      inputParameters:
      - name: performance_year
        in: body
        type: integer
        description: Medicare performance year to validate (e.g., 2025).
      - name: alert_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID to alert if data gaps are found.
      steps:
      - name: check-measure-completeness
        type: call
        call: snowflake-stars.run-query
        with:
          statement: SELECT measure_id, measure_name, COUNT(*) as record_count, AVG(completeness_pct) as avg_completeness FROM cms_stars.measure_data WHERE performance_year={{performance_year}} GROUP BY 1,2 HAVING avg_completeness < 95 ORDER BY avg_completeness ASC
      - name: alert-quality-team
        type: call
        call: msteams-quality.send-message
        with:
          channel_id: '{{alert_channel_id}}'
          message: 'STAR RATINGS DATA ALERT ({{performance_year}}): {{check-measure-completeness.row_count}} measures below 95% completeness. Top gap: {{check-measure-completeness.measure_name}} at {{check-measure-completeness.avg_completeness}}%'
  consumes:
  - type: http
    namespace: snowflake-stars
    baseUri: https://cvs.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams-quality
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medicare-star-ratings-data-quality-check.yml

Looks up the current processing status of a health insurance claim in Aetna's claims management system and returns the adjudication status, denial reason if applicable, and payment details.

naftiko: '0.5'
info:
  label: Aetna Claims Processing Status Lookup
  description: Looks up the current processing status of a health insurance claim in Aetna's claims management system and returns the adjudication status, denial reason if applicable, and payment details.
  tags:
  - healthcare
  - insurance
  - claims
  - aetna
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: claims-management
    port: 8080
    tools:
    - name: get-claim-status
      description: Given an Aetna claim ID, retrieve the adjudication status, payment amount, EOB date, and denial reason if the claim was denied. Use for member services inquiries and provider billing dispute resolution.
      inputParameters:
      - name: claim_id
        in: body
        type: string
        description: Aetna claim ID in the format CLM-XXXXXXXXX.
      - name: member_id
        in: body
        type: string
        description: Aetna member ID for authorization validation.
      call: aetna.get-claim
      with:
        claim_id: '{{claim_id}}'
        member_id: '{{member_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.claim.adjudicationStatus
      - name: payment_amount
        type: string
        mapping: $.claim.paymentAmount
      - name: eob_date
        type: string
        mapping: $.claim.explanationOfBenefitsDate
      - name: denial_reason
        type: string
        mapping: $.claim.denialReason
  consumes:
  - type: http
    namespace: aetna
    baseUri: https://api.aetna.com/health/v1
    authentication:
      type: bearer
      token: $secrets.aetna_api_token
    resources:
    - name: claims
      path: /claims/{{claim_id}}
      inputParameters:
      - name: claim_id
        in: path
      - name: member_id
        in: query
      operations:
      - name: get-claim
        method: GET
Open in Framework → View in Fleet → aetna-claims-processing-status-lookup.yml

When a Salesforce opportunity reaches Closed Won, retrieves the deal details and creates a corresponding contract record in SAP S/4HANA for revenue recognition and finance processing.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to SAP Contract Creation
  description: When a Salesforce opportunity reaches Closed Won, retrieves the deal details and creates a corresponding contract record in SAP S/4HANA for revenue recognition and finance processing.
  tags:
  - sales
  - finance
  - salesforce
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: revenue-ops
    port: 8080
    tools:
    - name: create-sap-contract-from-opportunity
      description: Given a Salesforce Closed Won opportunity ID, retrieve the opportunity and account details, then create a corresponding SAP customer contract for revenue recognition. Use in the quote-to-cash process when health plan or enterprise deals close.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID for the Closed Won deal.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opp.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-contract
        type: call
        call: sap-contracts.create-contract
        with:
          customer_name: '{{get-opportunity.account_name}}'
          contract_value: '{{get-opportunity.amount}}'
          currency: USD
          start_date: '{{get-opportunity.close_date}}'
          description: 'Salesforce Opportunity: {{opportunity_id}} — {{get-opportunity.name}}'
  consumes:
  - type: http
    namespace: salesforce-opp
    baseUri: https://cvs-health.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-contracts
    baseUri: https://cvs-s4.sap.com/sap/opu/odata/sap/API_CUSTOMER_CONTRACT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: contracts
      path: /A_CustomerContract
      operations:
      - name: create-contract
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-sap-contract-creation.yml

When an employee termination is processed in Workday, disables the Microsoft 365 account, removes Salesforce license, and creates a ServiceNow offboarding checklist across all Danaher systems.

naftiko: '0.5'
info:
  label: Employee Offboarding Deprovision
  description: When an employee termination is processed in Workday, disables the Microsoft 365 account, removes Salesforce license, and creates a ServiceNow offboarding checklist across all Danaher systems.
  tags:
  - hr
  - offboarding
  - workday
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: deprovision-terminated-employee
      description: Given a Workday worker ID for a terminated employee, disable the Microsoft 365 account, remove the Salesforce user license, and create a comprehensive ServiceNow offboarding task covering all Danaher system access. Use immediately upon confirmed termination.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID of the terminated employee.
      steps:
      - name: get-worker
        type: call
        call: workday-offboard.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: disable-m365
        type: call
        call: msgraph-offboard.disable-user
        with:
          user_principal_name: '{{get-worker.work_email}}'
          account_enabled: 'false'
      - name: create-offboarding-task
        type: call
        call: servicenow-offboard.create-incident
        with:
          short_description: 'Employee Offboarding: {{get-worker.full_name}} ({{get-worker.opco}})'
          category: HR Offboarding
          description: 'Worker: {{worker_id}}

            Employee: {{get-worker.full_name}}

            OpCo: {{get-worker.opco}}

            Termination Date: {{get-worker.termination_date}}

            M365 Disabled: {{disable-m365.status}}'
  consumes:
  - type: http
    namespace: workday-offboard
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /danaher/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph-offboard
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_principal_name}}
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow-offboard
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → employee-offboarding-deprovision.yml

Triggers Tableau dashboard refresh for operating company analytics.

naftiko: '0.5'
info:
  label: Tableau OpCo Dashboard Refresh
  description: Triggers Tableau dashboard refresh for operating company analytics.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: refresh-dashboard
      description: Given workbook, trigger refresh. Use for updated metrics.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: Workbook name.
      call: tableau.trigger-refresh
      with:
        workbook: '{{workbook_name}}'
      outputParameters:
      - name: job_id
        type: string
        mapping: $.job.id
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://danaher.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook}}/refresh
      inputParameters:
      - name: workbook
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → tableau-opco-dashboard-refresh.yml

Reconciles revenue across operating companies by pulling SAP data, comparing to Salesforce, and generating discrepancy reports.

naftiko: '0.5'
info:
  label: OpCo Revenue Reconciliation Orchestration
  description: Reconciles revenue across operating companies by pulling SAP data, comparing to Salesforce, and generating discrepancy reports.
  tags:
  - finance
  - erp
  - sap
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: revenue-recon
    port: 8080
    tools:
    - name: reconcile-revenue
      description: Given OpCo and period, pull SAP and CRM data, compare, and report. Use for revenue reconciliation.
      inputParameters:
      - name: opco_code
        in: body
        type: string
        description: OpCo code.
      - name: fiscal_period
        in: body
        type: string
        description: Period.
      steps:
      - name: sap-revenue
        type: call
        call: sap-erp.get-revenue
        with:
          unit: '{{opco_code}}'
          period: '{{fiscal_period}}'
      - name: crm-revenue
        type: call
        call: salesforce.get-closed-won
        with:
          unit: '{{opco_code}}'
          period: '{{fiscal_period}}'
      - name: reconcile
        type: call
        call: snowflake.execute-query
        with:
          query_name: revenue_reconciliation
          params: '{{opco_code}},{{fiscal_period}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://danaher-s4.sap.com/sap/opu/odata/sap/FI_REVENUE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: revenue
      path: /A_Revenue
      operations:
      - name: get-revenue
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://danaher.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /analytics/reports/closed_won
      operations:
      - name: get-closed-won
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://danaher.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → opco-revenue-reconciliation-orchestration.yml

Retrieves the current status of an FDA regulatory submission for Danaher operating company products.

naftiko: '0.5'
info:
  label: FDA Submission Status Lookup
  description: Retrieves the current status of an FDA regulatory submission for Danaher operating company products.
  tags:
  - regulatory
  - quality
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: get-submission-status
      description: Given a submission number, return review status and expected date. Use when regulatory checks submission progress.
      inputParameters:
      - name: submission_number
        in: body
        type: string
        description: FDA submission number.
      call: veeva-vault.get-submission
      with:
        submission_id: '{{submission_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.status
      - name: expected_date
        type: string
        mapping: $.data.target_date
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://danaher-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: submissions
      path: /objects/submission__c/{{submission_id}}
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: get-submission
        method: GET
Open in Framework → View in Fleet → fda-submission-status-lookup.yml

Manages calibration scheduling for Beckman Coulter diagnostic instruments by checking due dates, creating work orders, and notifying field service.

naftiko: '0.5'
info:
  label: Beckman Coulter Instrument Calibration Orchestration
  description: Manages calibration scheduling for Beckman Coulter diagnostic instruments by checking due dates, creating work orders, and notifying field service.
  tags:
  - quality
  - diagnostics
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: instrument-calibration
    port: 8080
    tools:
    - name: schedule-calibration
      description: Given instrument serial number, check due date, create work order, and notify. Use for Beckman Coulter calibration management.
      inputParameters:
      - name: serial_number
        in: body
        type: string
        description: Instrument serial number.
      steps:
      - name: check-due
        type: call
        call: sap-erp.get-calibration-status
        with:
          equipment: '{{serial_number}}'
      - name: create-wo
        type: call
        call: servicenow.create-work-order
        with:
          short_description: 'Calibration: BC instrument {{serial_number}}'
          due_date: '{{check-due.next_cal_date}}'
          assigned_group: Field_Service_BC
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: beckman-field-service
          text: 'Calibration scheduled: BC {{serial_number}}. Due: {{check-due.next_cal_date}}. WO: {{create-wo.number}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://danaher-s4.sap.com/sap/opu/odata/sap/PM_EQUIPMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: equipment
      path: /A_Equipment('{{equipment}}')/calibration
      inputParameters:
      - name: equipment
        in: path
      operations:
      - name: get-calibration-status
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → beckman-coulter-instrument-calibration-orchestration.yml

Retrieves a pending supplier invoice from SAP Ariba, validates the three-way match against the corresponding purchase order, and routes it through the appropriate approval chain.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Invoice Approval
  description: Retrieves a pending supplier invoice from SAP Ariba, validates the three-way match against the corresponding purchase order, and routes it through the appropriate approval chain.
  tags:
  - finance
  - procurement
  - sap-ariba
  - accounts-payable
capability:
  exposes:
  - type: mcp
    namespace: ap-ops
    port: 8080
    tools:
    - name: approve-supplier-invoice
      description: Given an SAP Ariba invoice ID, retrieve the invoice and matched PO details, perform three-way match validation, and submit for approval if the match is within tolerance. Use in the accounts payable automation pipeline for supplier invoice processing.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: SAP Ariba invoice ID.
      - name: approver_email
        in: body
        type: string
        description: Email of the designated invoice approver.
      steps:
      - name: get-invoice
        type: call
        call: ariba.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: notify-approver
        type: call
        call: msteams-ap.send-message
        with:
          recipient_upn: '{{approver_email}}'
          message: 'Invoice Approval Required: {{invoice_id}} | Supplier: {{get-invoice.supplier_name}} | Amount: ${{get-invoice.amount}} | PO: {{get-invoice.po_number}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: invoices
      path: /{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: msteams-ap
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-invoice-approval.yml

On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug for the engineering team and posts an alert to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: GitHub Actions CI Pipeline Failure Alert
  description: On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug for the engineering team and posts an alert to the engineering Microsoft Teams channel.
  tags:
  - devops
  - cicd
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow failure, create a Jira engineering bug and notify the on-call engineering team in Microsoft Teams with full failure context. Use as part of the CI/CD failure notification pipeline for Danaher digital and software engineering teams.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name where the pipeline failed.
      - name: workflow_name
        in: body
        type: string
        description: Name of the GitHub Actions workflow that failed.
      - name: run_id
        in: body
        type: string
        description: GitHub Actions workflow run ID.
      - name: commit_sha
        in: body
        type: string
        description: Commit SHA that triggered the failed pipeline.
      - name: log_url
        in: body
        type: string
        description: URL to the GitHub Actions run log for the failure.
      steps:
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: 'CI Failure: {{workflow_name}} on {{repo_name}}'
          description: 'Repository: {{repo_name}}

            Workflow: {{workflow_name}}

            Run ID: {{run_id}}

            Commit: {{commit_sha}}

            Logs: {{log_url}}'
      - name: notify-engineering
        type: call
        call: msteams-eng.send-message
        with:
          channel_id: engineering-alerts
          message: 'CI FAILURE: {{workflow_name}} / {{repo_name}} | Commit: {{commit_sha}} | Jira: {{create-jira-bug.key}} | Logs: {{log_url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://danaher.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-actions-ci-pipeline-failure-alert.yml

Tracks Danaher Business System kaizen events by creating Jira epics, assigning tasks, tracking metrics, and notifying leadership.

naftiko: '0.5'
info:
  label: DBS Kaizen Event Tracking Orchestration
  description: Tracks Danaher Business System kaizen events by creating Jira epics, assigning tasks, tracking metrics, and notifying leadership.
  tags:
  - manufacturing
  - quality
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dbs-kaizen
    port: 8080
    tools:
    - name: track-kaizen-event
      description: Given kaizen event details, create tracking epic, capture metrics, and notify. Use for DBS kaizen tracking.
      inputParameters:
      - name: event_name
        in: body
        type: string
        description: Kaizen event name.
      - name: opco
        in: body
        type: string
        description: Operating company.
      - name: target_metric
        in: body
        type: string
        description: Target improvement metric.
      steps:
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project: DBS
          issuetype: Epic
          summary: 'Kaizen: {{event_name}} - {{opco}}'
      - name: log-baseline
        type: call
        call: snowflake.execute-query
        with:
          query_name: kaizen_baseline_metrics
          params: '{{opco}},{{target_metric}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: dbs-events
          text: 'Kaizen ''{{event_name}}'' started for {{opco}}. Epic: {{create-epic.key}}. Baseline: {{log-baseline.current_value}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://danaher.atlassian.net/rest/api/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: snowflake
    baseUri: https://danaher.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → dbs-kaizen-event-tracking-orchestration.yml

Runs automated data quality checks across Danaher's Snowflake data warehouse to validate completeness and consistency of sales and financial data ingested from each operating company's ERP.

naftiko: '0.5'
info:
  label: Snowflake Cross-OpCo Data Quality Validation
  description: Runs automated data quality checks across Danaher's Snowflake data warehouse to validate completeness and consistency of sales and financial data ingested from each operating company's ERP.
  tags:
  - data
  - quality
  - snowflake
  - reporting
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: validate-cross-opco-data-quality
      description: Execute Snowflake data quality checks for sales and financial data across all Danaher operating companies, checking for null rates, duplicate records, and out-of-range values. Alert the data engineering team in Teams if any OpCo fails validation. Use in nightly data quality monitoring.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period to validate data for (YYYY-MM format).
      - name: alert_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID to alert when validation failures are found.
      steps:
      - name: run-quality-checks
        type: call
        call: snowflake-dq.run-query
        with:
          statement: SELECT opco_code, table_name, COUNT(*) as null_count, COUNT(*) - COUNT(revenue_amount) as missing_revenue FROM erp.revenue_transactions WHERE fiscal_period='{{fiscal_period}}' GROUP BY 1,2 HAVING null_count > 0 ORDER BY null_count DESC
      - name: alert-data-team
        type: call
        call: msteams-dq.send-message
        with:
          channel_id: '{{alert_channel_id}}'
          message: 'DATA QUALITY ALERT ({{fiscal_period}}): {{run-quality-checks.row_count}} OpCo data quality issues found. Top issue: {{run-quality-checks.opco_code}} — {{run-quality-checks.null_count}} nulls in {{run-quality-checks.table_name}}'
  consumes:
  - type: http
    namespace: snowflake-dq
    baseUri: https://danaher.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams-dq
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-cross-opco-data-quality-validation.yml

When a Salesforce service case for an instrument repair is escalated to on-site service, retrieves the case and installed base data, and creates a ServiceNow field service work order.

naftiko: '0.5'
info:
  label: Salesforce Service Case to Field Service Dispatch
  description: When a Salesforce service case for an instrument repair is escalated to on-site service, retrieves the case and installed base data, and creates a ServiceNow field service work order.
  tags:
  - customer-service
  - field-service
  - salesforce
  - servicenow
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: service-dispatch
    port: 8080
    tools:
    - name: dispatch-field-service
      description: Given a Salesforce escalated service case ID, retrieve case details and instrument installed base records, then create a ServiceNow field service work order and assign to the regional field engineer. Use when instrument repair cases require on-site service dispatch.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce service case ID requiring field dispatch.
      steps:
      - name: get-case
        type: call
        call: salesforce-case.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-work-order
        type: call
        call: servicenow-wo.create-incident
        with:
          short_description: 'Field Service Dispatch: {{get-case.subject}} — {{get-case.account_name}}'
          category: Field Service
          urgency: '2'
          description: 'Salesforce Case: {{case_id}}

            Customer: {{get-case.account_name}}

            Instrument: {{get-case.instrument_serial}}

            Issue: {{get-case.description}}

            Priority: {{get-case.priority}}'
      - name: notify-dispatch
        type: call
        call: msteams-dispatch.send-message
        with:
          channel_id: field-service-dispatch
          message: 'FIELD SERVICE DISPATCH: {{get-case.account_name}} | Instrument: {{get-case.instrument_serial}} | Issue: {{get-case.subject}} | SNOW WO: {{create-work-order.number}}'
  consumes:
  - type: http
    namespace: salesforce-case
    baseUri: https://danaher.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-wo
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: work-orders
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-dispatch
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-service-case-to-field-service-dispatch.yml

Monitors Cytiva bioprocess equipment parameters and triggers alerts when out-of-spec conditions are detected.

naftiko: '0.5'
info:
  label: Cytiva Bioprocess Equipment Monitoring Orchestration
  description: Monitors Cytiva bioprocess equipment parameters and triggers alerts when out-of-spec conditions are detected.
  tags:
  - manufacturing
  - quality
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bioprocess-monitoring
    port: 8080
    tools:
    - name: handle-equipment-excursion
      description: Given equipment ID, parameter, and value, create deviation, log event, and alert. Use for bioprocess excursions.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: Equipment ID.
      - name: parameter_name
        in: body
        type: string
        description: Parameter name.
      - name: measured_value
        in: body
        type: string
        description: Measured value.
      steps:
      - name: create-deviation
        type: call
        call: servicenow.create-deviation
        with:
          description: 'Excursion: {{parameter_name}} = {{measured_value}} on {{equipment_id}}'
          priority: '2'
      - name: log-event
        type: call
        call: sap-erp.create-process-event
        with:
          equipment: '{{equipment_id}}'
          parameter: '{{parameter_name}}'
          value: '{{measured_value}}'
      - name: alert
        type: call
        call: msteams.send-message
        with:
          channel_id: cytiva-ops
          text: 'ALERT: {{equipment_id}} {{parameter_name}} = {{measured_value}}. Deviation: {{create-deviation.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: deviations
      path: /table/u_deviation
      operations:
      - name: create-deviation
        method: POST
  - type: http
    namespace: sap-erp
    baseUri: https://danaher-s4.sap.com/sap/opu/odata/sap/PP_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: events
      path: /A_ProcessEvent
      operations:
      - name: create-process-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cytiva-bioprocess-equipment-monitoring-orchestration.yml

Sends NDAs for signature via DocuSign and updates Salesforce.

naftiko: '0.5'
info:
  label: DocuSign NDA Orchestration
  description: Sends NDAs for signature via DocuSign and updates Salesforce.
  tags:
  - legal
  - sales
  - docusign
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: nda-execution
    port: 8080
    tools:
    - name: send-nda
      description: Given contact email and name, send NDA, track in CRM, and notify. Use for NDA execution.
      inputParameters:
      - name: contact_email
        in: body
        type: string
        description: Contact email.
      - name: contact_name
        in: body
        type: string
        description: Contact name.
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      steps:
      - name: send-envelope
        type: call
        call: docusign.create-envelope
        with:
          template_id: nda-standard
          signer_email: '{{contact_email}}'
          signer_name: '{{contact_name}}'
      - name: update-crm
        type: call
        call: salesforce.create-task
        with:
          account_id: '{{account_id}}'
          subject: NDA sent to {{contact_name}}
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: legal
          text: 'NDA sent to {{contact_name}}. Envelope: {{send-envelope.envelope_id}}'
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /accounts/{{account_id}}/envelopes
      operations:
      - name: create-envelope
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://danaher.my.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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → docusign-nda-orchestration.yml

Dispatches field service engineers for instrument repair across Danaher life sciences customers.

naftiko: '0.5'
info:
  label: Field Service Instrument Repair Orchestration
  description: Dispatches field service engineers for instrument repair across Danaher life sciences customers.
  tags:
  - service
  - diagnostics
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: field-service
    port: 8080
    tools:
    - name: dispatch-repair
      description: Given account ID and issue, create case, find engineer, dispatch, and notify. Use for instrument repair.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Account ID.
      - name: issue_description
        in: body
        type: string
        description: Issue.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          account_id: '{{account_id}}'
          subject: 'Repair: {{issue_description}}'
      - name: find-engineer
        type: call
        call: servicenow.find-available-resource
        with:
          skill: instrument_repair
      - name: create-wo
        type: call
        call: servicenow.create-work-order
        with:
          case_ref: '{{create-case.case_number}}'
          assigned_to: '{{find-engineer.engineer_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: field-service
          text: 'Engineer {{find-engineer.engineer_name}} dispatched. Case: {{create-case.case_number}}. WO: {{create-wo.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://danaher.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /table/cmn_schedule_span
      operations:
      - name: find-available-resource
        method: GET
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → field-service-instrument-repair-orchestration.yml

Extracts experimental data from IDBS E-WorkBook and loads into Snowflake for analytics.

naftiko: '0.5'
info:
  label: IDBS Electronic Lab Notebook Data Extraction
  description: Extracts experimental data from IDBS E-WorkBook and loads into Snowflake for analytics.
  tags:
  - rd
  - data
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: eln-data
    port: 8080
    tools:
    - name: extract-eln-data
      description: Given experiment ID, extract data from ELN and load to Snowflake. Use for R&D data integration.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: Experiment ID.
      call: snowflake.execute-query
      with:
        query_name: eln_data_extraction
        params: '{{experiment_id}}'
      outputParameters:
      - name: records_loaded
        type: integer
        mapping: $.data[0].records
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://danaher.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → idbs-electronic-lab-notebook-data-extraction.yml

Uploads documents to Box for Danaher shared document management.

naftiko: '0.5'
info:
  label: Box Document Upload
  description: Uploads documents to Box for Danaher shared document management.
  tags:
  - documentation
  - collaboration
  - box
capability:
  exposes:
  - type: mcp
    namespace: file-storage
    port: 8080
    tools:
    - name: upload-to-box
      description: Given folder ID and file name, upload to Box. Use for document storage.
      inputParameters:
      - name: folder_id
        in: body
        type: string
        description: Folder ID.
      - name: file_name
        in: body
        type: string
        description: File name.
      call: box.upload-file
      with:
        folder_id: '{{folder_id}}'
        name: '{{file_name}}'
      outputParameters:
      - name: file_id
        type: string
        mapping: $.entries[0].id
  consumes:
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → box-document-upload.yml

When a Hach connected water quality sensor reports a measurement outside acceptable limits, creates a ServiceNow field inspection ticket and notifies the environmental service team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Hach Water Quality Alert to Field Service
  description: When a Hach connected water quality sensor reports a measurement outside acceptable limits, creates a ServiceNow field inspection ticket and notifies the environmental service team in Microsoft Teams.
  tags:
  - iot
  - field-service
  - water-quality
  - servicenow
  - microsoft-teams
  - hach
capability:
  exposes:
  - type: mcp
    namespace: water-quality-ops
    port: 8080
    tools:
    - name: handle-water-quality-alert
      description: Given a Hach sensor ID, site ID, and out-of-range parameter reading, create a ServiceNow field inspection work order and notify the environmental service team in Microsoft Teams. Use when connected Hach instruments report EPA limit exceedances or instrument calibration failures.
      inputParameters:
      - name: sensor_id
        in: body
        type: string
        description: Hach sensor device ID reporting the alert.
      - name: site_id
        in: body
        type: string
        description: Water quality monitoring site ID.
      - name: parameter
        in: body
        type: string
        description: Water quality parameter out of range (e.g., 'pH', 'Turbidity', 'Chlorine').
      - name: measured_value
        in: body
        type: string
        description: Measured value that triggered the alert.
      - name: limit_value
        in: body
        type: string
        description: Regulatory or operational limit that was exceeded.
      steps:
      - name: create-inspection-order
        type: call
        call: servicenow-hach.create-incident
        with:
          short_description: 'Water Quality Alert: {{parameter}} at site {{site_id}} ({{measured_value}} vs limit {{limit_value}})'
          category: Field Inspection
          urgency: '2'
          description: 'Sensor: {{sensor_id}}

            Site: {{site_id}}

            Parameter: {{parameter}}

            Measured: {{measured_value}}

            Limit: {{limit_value}}'
      - name: notify-env-team
        type: call
        call: msteams-env.send-message
        with:
          channel_id: water-quality-ops
          message: 'WATER QUALITY ALERT: {{parameter}} at site {{site_id}} — Measured: {{measured_value}} (Limit: {{limit_value}}) | Sensor: {{sensor_id}} | SNOW: {{create-inspection-order.number}}'
  consumes:
  - type: http
    namespace: servicenow-hach
    baseUri: https://danaher.service-now.com/api/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-env
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hach-water-quality-alert-to-field-service.yml

When a new Salesforce opportunity is created for a life sciences instrument sale, enriches it with account research history and prior purchase data from the SAP customer master.

naftiko: '0.5'
info:
  label: Salesforce Life Sciences Opportunity Enrichment
  description: When a new Salesforce opportunity is created for a life sciences instrument sale, enriches it with account research history and prior purchase data from the SAP customer master.
  tags:
  - sales
  - crm
  - salesforce
  - sap
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: enrich-instrument-opportunity
      description: Given a Salesforce opportunity ID for a new instrument sale, retrieve the account's SAP customer history including prior purchases, installed base count, and service contract status, then update the opportunity record with enrichment data. Use when creating new instrument or reagent opportunities.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: sap_customer_id
        in: body
        type: string
        description: SAP customer ID linked to the Salesforce account.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: get-customer-history
        type: call
        call: sap-customer.get-customer
        with:
          customer_id: '{{sap_customer_id}}'
      - name: update-opportunity
        type: call
        call: salesforce-update.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          installed_base_count: '{{get-customer-history.installed_base}}'
          service_contract_status: '{{get-customer-history.contract_status}}'
          prior_purchases_total: '{{get-customer-history.lifetime_revenue}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://danaher.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-customer
    baseUri: https://danaher-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: customers
      path: /A_BusinessPartner('{{customer_id}}')
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: salesforce-update
    baseUri: https://danaher.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → salesforce-life-sciences-opportunity-enrichment.yml

When an employee transfers between Danaher operating companies in Workday, updates Microsoft 365 group memberships, Salesforce profile, and creates a ServiceNow access review task.

naftiko: '0.5'
info:
  label: Workday Employee Role Change Access Update
  description: When an employee transfers between Danaher operating companies in Workday, updates Microsoft 365 group memberships, Salesforce profile, and creates a ServiceNow access review task.
  tags:
  - hr
  - identity
  - workday
  - salesforce
  - servicenow
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: opco-transfer
    port: 8080
    tools:
    - name: process-opco-transfer
      description: Given a Workday worker ID and new operating company assignment, update Microsoft 365 group memberships to reflect the new OpCo, update the Salesforce user profile, and create a ServiceNow access review task for IT security validation. Use when employees transfer between Beckman Coulter, Leica, Pall, Cytiva, or other Danaher OpCos.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID of the employee being transferred.
      - name: from_opco
        in: body
        type: string
        description: Source Danaher operating company code.
      - name: to_opco
        in: body
        type: string
        description: Destination Danaher operating company code.
      steps:
      - name: get-worker
        type: call
        call: workday-transfer.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: update-m365-groups
        type: call
        call: msgraph-transfer.update-user
        with:
          user_principal_name: '{{get-worker.work_email}}'
          company_name: '{{to_opco}}'
          department: '{{get-worker.department}}'
      - name: create-access-review
        type: call
        call: servicenow-transfer.create-incident
        with:
          short_description: 'Access Review: {{get-worker.full_name}} transfer from {{from_opco}} to {{to_opco}}'
          category: Access Management
          description: 'Worker: {{worker_id}}

            Employee: {{get-worker.full_name}}

            From OpCo: {{from_opco}}

            To OpCo: {{to_opco}}

            Effective Date: {{get-worker.transfer_date}}'
  consumes:
  - type: http
    namespace: workday-transfer
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /danaher/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph-transfer
    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: update-user
        method: PATCH
  - type: http
    namespace: servicenow-transfer
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → workday-employee-role-change-access-update.yml

When AWS Cost Anomaly Detection identifies a significant spend spike across Danaher's AWS accounts, creates a ServiceNow FinOps incident and notifies the cloud governance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: AWS Cost Anomaly to FinOps Incident
  description: When AWS Cost Anomaly Detection identifies a significant spend spike across Danaher's AWS accounts, creates a ServiceNow FinOps incident and notifies the cloud governance team in Microsoft Teams.
  tags:
  - cloud
  - finops
  - aws
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-aws-cost-anomaly
      description: Given an AWS cost anomaly with account ID, service, and excess spend, create a ServiceNow FinOps incident and notify the cloud governance channel in Microsoft Teams. Use when AWS anomaly detection fires above the cost threshold for any Danaher operating company account.
      inputParameters:
      - name: aws_account_id
        in: body
        type: string
        description: AWS account ID where the cost anomaly was detected.
      - name: service_name
        in: body
        type: string
        description: AWS service experiencing the anomaly.
      - name: excess_spend_usd
        in: body
        type: string
        description: Estimated excess spend in USD above expected baseline.
      - name: opco_name
        in: body
        type: string
        description: Danaher operating company associated with the AWS account.
      steps:
      - name: create-finops-incident
        type: call
        call: servicenow-finops.create-incident
        with:
          short_description: 'AWS Cost Anomaly: {{service_name}} — {{opco_name}} (${{excess_spend_usd}} over budget)'
          category: Cloud FinOps
          urgency: '2'
          description: 'Account: {{aws_account_id}}

            OpCo: {{opco_name}}

            Service: {{service_name}}

            Excess: ${{excess_spend_usd}}'
      - name: notify-cloud-governance
        type: call
        call: msteams-finops.send-message
        with:
          channel_id: cloud-governance
          message: 'AWS COST ANOMALY: {{opco_name}} / {{service_name}} — ${{excess_spend_usd}} over baseline | Account: {{aws_account_id}} | SNOW: {{create-finops-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow-finops
    baseUri: https://danaher.service-now.com/api/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-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → aws-cost-anomaly-to-finops-incident.yml

Synchronizes Veeva CRM field sales call activity reports to Salesforce, updating account engagement records and activity history for scientific sales representatives.

naftiko: '0.5'
info:
  label: Veeva CRM Call Report to Salesforce Sync
  description: Synchronizes Veeva CRM field sales call activity reports to Salesforce, updating account engagement records and activity history for scientific sales representatives.
  tags:
  - sales
  - crm
  - veeva
  - salesforce
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: field-sales
    port: 8080
    tools:
    - name: sync-veeva-call-to-salesforce
      description: Given a Veeva CRM call report ID from a completed field sales visit, retrieve the call details and create a corresponding Salesforce activity record on the account. Use to maintain a unified customer engagement history across Veeva and Salesforce for life sciences sales teams.
      inputParameters:
      - name: veeva_call_id
        in: body
        type: string
        description: Veeva CRM call report ID for the completed field visit.
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce account ID for the customer visited.
      steps:
      - name: get-veeva-call
        type: call
        call: veeva.get-call-report
        with:
          call_id: '{{veeva_call_id}}'
      - name: create-sf-activity
        type: call
        call: salesforce-activity.create-task
        with:
          account_id: '{{salesforce_account_id}}'
          subject: 'Field Visit: {{get-veeva-call.customer_name}} — {{get-veeva-call.call_date}}'
          description: 'Products Discussed: {{get-veeva-call.products_discussed}}

            Key Contacts: {{get-veeva-call.contacts_met}}

            Next Steps: {{get-veeva-call.next_steps}}

            Veeva Call ID: {{veeva_call_id}}'
          activity_date: '{{get-veeva-call.call_date}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://danaher.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: call-reports
      path: /objects/call2_vod__c/{{call_id}}
      inputParameters:
      - name: call_id
        in: path
      operations:
      - name: get-call-report
        method: GET
  - type: http
    namespace: salesforce-activity
    baseUri: https://danaher.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
Open in Framework → View in Fleet → veeva-crm-call-report-to-salesforce-sync.yml

Identifies cross-sell opportunities across Danaher operating companies by analyzing customer purchase patterns, creating opportunity records, and notifying sales teams.

naftiko: '0.5'
info:
  label: OpCo Cross-Sell Opportunity Orchestration
  description: Identifies cross-sell opportunities across Danaher operating companies by analyzing customer purchase patterns, creating opportunity records, and notifying sales teams.
  tags:
  - commercial
  - analytics
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cross-sell
    port: 8080
    tools:
    - name: identify-cross-sell
      description: Given an account ID, analyze purchase patterns across OpCos, create opportunity, and notify. Use when commercial identifies cross-sell potential.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      steps:
      - name: analyze-patterns
        type: call
        call: snowflake.execute-query
        with:
          query_name: opco_cross_sell_analysis
          params: '{{account_id}}'
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          account_id: '{{account_id}}'
          name: 'Cross-sell: {{analyze-patterns.recommended_opco}}'
          amount: '{{analyze-patterns.estimated_value}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: cross-sell-ops
          text: 'Cross-sell opportunity for account {{account_id}}: {{analyze-patterns.recommended_opco}} products. Est: ${{analyze-patterns.estimated_value}}. Opp: {{create-opportunity.id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://danaher.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://danaher.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → opco-cross-sell-opportunity-orchestration.yml

When a P1 IT incident is raised in ServiceNow affecting a Danaher OpCo, pages the on-call engineer via PagerDuty and creates a Microsoft Teams war room channel for incident response coordination.

naftiko: '0.5'
info:
  label: ServiceNow P1 Incident War Room Orchestration
  description: When a P1 IT incident is raised in ServiceNow affecting a Danaher OpCo, pages the on-call engineer via PagerDuty and creates a Microsoft Teams war room channel for incident response coordination.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: major-incident
    port: 8080
    tools:
    - name: escalate-major-incident
      description: Given a ServiceNow P1 incident number, retrieve incident details, trigger a PagerDuty critical alert for the on-call engineer, and create a Microsoft Teams incident response channel. Use when major IT incidents affect production systems across any Danaher operating company.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number (e.g., 'INC0009876').
      steps:
      - name: get-incident
        type: call
        call: servicenow-p1.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: page-on-call
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1 Incident: {{get-incident.short_description}}'
          severity: critical
          body: 'SNOW: {{incident_number}} | OpCo: {{get-incident.business_unit}} | {{get-incident.short_description}}'
      - name: create-war-room
        type: call
        call: msteams-war-room.create-channel
        with:
          display_name: INC-{{incident_number}}-war-room
          description: 'P1 War Room: {{incident_number}} — {{get-incident.short_description}}'
  consumes:
  - type: http
    namespace: servicenow-p1
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: 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: msteams-war-room
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: create-channel
        method: POST
Open in Framework → View in Fleet → servicenow-p1-incident-war-room-orchestration.yml

Assembles a regulatory submission document package by retrieving the latest approved product documentation from the Veeva Vault quality document management system and publishing it to the SharePoint regulatory affairs site.

naftiko: '0.5'
info:
  label: Regulatory Submission Document Package
  description: Assembles a regulatory submission document package by retrieving the latest approved product documentation from the Veeva Vault quality document management system and publishing it to the SharePoint regulatory affairs site.
  tags:
  - regulatory
  - compliance
  - veeva
  - sharepoint
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: assemble-regulatory-submission-package
      description: Given a product ID and regulatory submission type, retrieve the latest approved documents for that product from Veeva Vault and publish a compiled document index to the SharePoint regulatory affairs portal. Use for FDA 510(k), CE mark, or IVD regulatory submissions preparation.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: Danaher product ID for the instrument or reagent requiring regulatory submission.
      - name: submission_type
        in: body
        type: string
        description: Regulatory submission type (e.g., '510K', 'CE_MARK', 'IVD_DIRECTIVE').
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID for the regulatory affairs document library.
      steps:
      - name: get-product-documents
        type: call
        call: veeva-vault.list-documents
        with:
          product_id: '{{product_id}}'
          document_status: Approved
          submission_type: '{{submission_type}}'
      - name: create-submission-index
        type: call
        call: sharepoint.create-file
        with:
          site_id: '{{sharepoint_site_id}}'
          file_name: '{{product_id}}_{{submission_type}}_document_index.txt'
          content: 'Product: {{product_id}}

            Submission Type: {{submission_type}}

            Documents: {{get-product-documents.count}}

            Document List: {{get-product-documents.document_names}}

            Package Date: {{get-product-documents.generated_at}}'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://danaher.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: documents
      path: /objects/documents
      inputParameters:
      - name: product_id
        in: query
      - name: document_status
        in: query
      - name: submission_type
        in: query
      operations:
      - name: list-documents
        method: GET
  - 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/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-file
        method: POST
Open in Framework → View in Fleet → regulatory-submission-document-package.yml

When a quality non-conformance event is identified in the lab quality management system, creates a Corrective and Preventive Action (CAPA) record in ServiceNow and notifies the quality team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Quality Management CAPA Initiation
  description: When a quality non-conformance event is identified in the lab quality management system, creates a Corrective and Preventive Action (CAPA) record in ServiceNow and notifies the quality team in Microsoft Teams.
  tags:
  - quality
  - compliance
  - servicenow
  - life-sciences
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: initiate-capa
      description: Given a non-conformance event description, severity, and product family, create a CAPA record in ServiceNow and notify the quality engineering team in Microsoft Teams. Use when product quality events, customer complaints, or audit findings require formal CAPA tracking.
      inputParameters:
      - name: event_description
        in: body
        type: string
        description: Description of the non-conformance or quality event requiring CAPA.
      - name: severity
        in: body
        type: string
        description: 'Event severity: CRITICAL, MAJOR, or MINOR.'
      - name: product_family
        in: body
        type: string
        description: Affected product family (e.g., 'Flow Cytometry', 'Microscopy', 'Water Quality').
      - name: opco
        in: body
        type: string
        description: Danaher operating company where the event occurred.
      steps:
      - name: create-capa-record
        type: call
        call: servicenow-quality.create-incident
        with:
          short_description: 'CAPA: {{severity}} non-conformance — {{product_family}} ({{opco}})'
          category: Quality Management
          urgency: '1'
          description: 'OpCo: {{opco}}

            Product Family: {{product_family}}

            Severity: {{severity}}

            Event Description: {{event_description}}'
      - name: notify-quality-team
        type: call
        call: msteams-quality.send-message
        with:
          channel_id: quality-engineering
          message: 'CAPA INITIATED: {{severity}} — {{product_family}} ({{opco}}) | SNOW: {{create-capa-record.number}} | {{event_description}}'
  consumes:
  - type: http
    namespace: servicenow-quality
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams-quality
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-management-capa-initiation.yml

Assesses product launch readiness across Danaher operating companies by checking regulatory, supply chain, and training.

naftiko: '0.5'
info:
  label: OpCo Product Launch Readiness Orchestration
  description: Assesses product launch readiness across Danaher operating companies by checking regulatory, supply chain, and training.
  tags:
  - manufacturing
  - regulatory
  - sap
  - workday
  - veeva-vault
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: launch-readiness
    port: 8080
    tools:
    - name: assess-readiness
      description: Given product code and OpCo, check regulatory, supply, training, and report. Use for launch assessment.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: opco
        in: body
        type: string
        description: Operating company.
      steps:
      - name: regulatory
        type: call
        call: veeva-vault.get-clearance-status
        with:
          product_code: '{{product_code}}'
      - name: supply
        type: call
        call: sap-erp.get-material-availability
        with:
          material: '{{product_code}}'
      - name: training
        type: call
        call: workday.get-training-status
        with:
          course: launch-{{product_code}}
      - name: report
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{opco}}-launches'
          text: 'Launch readiness {{product_code}} ({{opco}}): Regulatory: {{regulatory.status}}. Supply: {{supply.availability}}. Training: {{training.completion_rate}}%'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://danaher-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: clearance
      path: /objects/clearance__c
      operations:
      - name: get-clearance-status
        method: GET
  - type: http
    namespace: sap-erp
    baseUri: https://danaher-s4.sap.com/sap/opu/odata/sap/MM_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: availability
      path: /A_MaterialAvailability('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-material-availability
        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: training
      path: /training/compliance
      operations:
      - name: get-training-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → opco-product-launch-readiness-orchestration.yml

Triggers a Power BI dataset refresh for the executive operating company performance dashboard and notifies the Danaher executive team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Executive OpCo Performance Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the executive operating company performance dashboard and notifies the Danaher executive team via Microsoft Teams.
  tags:
  - reporting
  - data
  - power-bi
  - microsoft-teams
  - finance
capability:
  exposes:
  - type: mcp
    namespace: exec-reporting
    port: 8080
    tools:
    - name: refresh-opco-performance-dashboard
      description: Trigger a Power BI dataset refresh for the Danaher OpCo performance dashboard and send a Microsoft Teams notification to the executive briefing channel. Use before monthly business reviews and board reporting cycles.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the OpCo performance dashboard.
      - name: workspace_id
        in: body
        type: string
        description: Power BI workspace ID containing the dataset.
      steps:
      - name: trigger-dataset-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-executives
        type: call
        call: msteams-exec.send-message
        with:
          channel_id: executive-briefings
          message: 'OpCo Performance Dashboard refresh triggered (dataset: {{dataset_id}}). Data will be available within 30 minutes for the business review.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams-exec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-executive-opco-performance-dashboard-refresh.yml

Initiates the annual performance review cycle in Workday for a Danaher operating company, sending Microsoft Teams reminder notifications to managers with direct reports pending review.

naftiko: '0.5'
info:
  label: Workday Annual Performance Review Launch
  description: Initiates the annual performance review cycle in Workday for a Danaher operating company, sending Microsoft Teams reminder notifications to managers with direct reports pending review.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: performance-review
    port: 8080
    tools:
    - name: launch-annual-review-cycle
      description: Given a Workday review period ID and operating company, retrieve managers with pending annual reviews and send Microsoft Teams reminder messages with the submission deadline. Use at the start of the annual performance cycle across all Danaher OpCos.
      inputParameters:
      - name: review_period_id
        in: body
        type: string
        description: Workday performance review period ID.
      - name: opco_code
        in: body
        type: string
        description: Danaher operating company code to launch the review for.
      - name: submission_deadline
        in: body
        type: string
        description: Review submission deadline date in YYYY-MM-DD format.
      steps:
      - name: get-pending-reviews
        type: call
        call: workday-review.list-pending-reviews
        with:
          review_period_id: '{{review_period_id}}'
          opco_code: '{{opco_code}}'
      - name: notify-managers
        type: call
        call: msteams-review.send-message
        with:
          channel_id: hr-{{opco_code}}-announcements
          message: Annual Performance Reviews are open for {{opco_code}}. {{get-pending-reviews.count}} managers have pending reviews. Please complete in Workday by {{submission_deadline}}.
  consumes:
  - type: http
    namespace: workday-review
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: performance-reviews
      path: /danaher/performanceReviews/{{review_period_id}}/pending
      inputParameters:
      - name: review_period_id
        in: path
      - name: opco_code
        in: query
      operations:
      - name: list-pending-reviews
        method: GET
  - type: http
    namespace: msteams-review
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-annual-performance-review-launch.yml

Retrieves batch manufacturing records from the Cytiva bioprocess management system, validates GMP compliance completeness in Snowflake, and creates a ServiceNow audit finding if gaps are detected.

naftiko: '0.5'
info:
  label: Cytiva Bioprocess Batch Record Audit
  description: Retrieves batch manufacturing records from the Cytiva bioprocess management system, validates GMP compliance completeness in Snowflake, and creates a ServiceNow audit finding if gaps are detected.
  tags:
  - manufacturing
  - quality
  - gmp
  - snowflake
  - servicenow
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: bioprocess-quality
    port: 8080
    tools:
    - name: audit-batch-record-compliance
      description: Given a batch lot number from the Cytiva bioprocess system, validate GMP batch record completeness against the required field checklist in Snowflake and create a ServiceNow audit finding if any mandatory fields are missing or out of specification. Use for cGMP batch release audits.
      inputParameters:
      - name: batch_lot_number
        in: body
        type: string
        description: Cytiva bioprocess batch lot number to audit.
      - name: product_code
        in: body
        type: string
        description: Product code for the batch being audited.
      steps:
      - name: check-batch-completeness
        type: call
        call: snowflake-batch.run-query
        with:
          statement: SELECT field_name, is_complete, value FROM manufacturing.batch_records WHERE lot_number='{{batch_lot_number}}' AND product_code='{{product_code}}' AND is_complete=FALSE ORDER BY field_name
      - name: create-audit-finding
        type: call
        call: servicenow-audit.create-incident
        with:
          short_description: 'GMP Batch Record Gap: Lot {{batch_lot_number}} ({{product_code}}) — {{check-batch-completeness.row_count}} incomplete fields'
          category: Quality Audit
          urgency: '1'
          description: 'Lot: {{batch_lot_number}}

            Product: {{product_code}}

            Incomplete Fields: {{check-batch-completeness.row_count}}

            Top Gap: {{check-batch-completeness.field_name}}'
  consumes:
  - type: http
    namespace: snowflake-batch
    baseUri: https://danaher.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: servicenow-audit
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → cytiva-bioprocess-batch-record-audit.yml

Orchestrates product registration for Pall filtration products by assembling documents, creating submissions, and notifying regulatory.

naftiko: '0.5'
info:
  label: Pall Filtration Product Registration Orchestration
  description: Orchestrates product registration for Pall filtration products by assembling documents, creating submissions, and notifying regulatory.
  tags:
  - regulatory
  - quality
  - veeva-vault
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-registration
    port: 8080
    tools:
    - name: register-product
      description: Given product code and market, assemble docs, create submission, and notify. Use for Pall product registration.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: target_market
        in: body
        type: string
        description: Market code.
      steps:
      - name: gather-docs
        type: call
        call: veeva-vault.query-documents
        with:
          product_code: '{{product_code}}'
      - name: create-submission
        type: call
        call: veeva-vault.create-submission
        with:
          product_code: '{{product_code}}'
          market: '{{target_market}}'
      - name: create-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Registration: Pall {{product_code}} for {{target_market}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: pall-regulatory
          text: 'Registration submitted: {{product_code}} for {{target_market}}. Task: {{create-task.number}}'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://danaher-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /query
      operations:
      - name: query-documents
        method: POST
    - name: submissions
      path: /objects/submission__c
      operations:
      - name: create-submission
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://danaher.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pall-filtration-product-registration-orchestration.yml

Validates new Cepheid GeneXpert molecular test cartridges by running QC panels, comparing to reference, and generating validation reports.

naftiko: '0.5'
info:
  label: Cepheid Molecular Test Validation Orchestration
  description: Validates new Cepheid GeneXpert molecular test cartridges by running QC panels, comparing to reference, and generating validation reports.
  tags:
  - quality
  - diagnostics
  - rd
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: test-validation
    port: 8080
    tools:
    - name: validate-test-cartridge
      description: Given cartridge lot and test panel, run QC, compare results, and generate report. Use for Cepheid test validation.
      inputParameters:
      - name: cartridge_lot
        in: body
        type: string
        description: Cartridge lot number.
      - name: test_panel
        in: body
        type: string
        description: Test panel name.
      steps:
      - name: run-qc
        type: call
        call: snowflake.execute-query
        with:
          query_name: cepheid_qc_panel
          params: '{{cartridge_lot}},{{test_panel}}'
      - name: compare-reference
        type: call
        call: snowflake.execute-query
        with:
          query_name: cepheid_reference_comparison
          params: '{{cartridge_lot}}'
      - name: create-report
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Validation report: Cepheid {{cartridge_lot}}'
          category: quality_validation
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: cepheid-quality
          text: 'Validation complete: {{cartridge_lot}}. Pass rate: {{run-qc.pass_rate}}%. Reference match: {{compare-reference.concordance}}%. Report: {{create-report.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://danaher.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://danaher.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cepheid-molecular-test-validation-orchestration.yml

Orchestrates microscopy image analysis by submitting images to Databricks ML pipeline, storing results, and notifying researchers.

naftiko: '0.5'
info:
  label: Leica Microscopy Image Analysis Orchestration
  description: Orchestrates microscopy image analysis by submitting images to Databricks ML pipeline, storing results, and notifying researchers.
  tags:
  - rd
  - ai
  - databricks
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: image-analysis
    port: 8080
    tools:
    - name: analyze-microscopy-images
      description: Given experiment ID and image path, run ML analysis, store results, and notify. Use for Leica microscopy workflows.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: Experiment ID.
      - name: image_path
        in: body
        type: string
        description: S3 path to images.
      steps:
      - name: run-analysis
        type: call
        call: databricks.submit-job
        with:
          job_name: microscopy_analysis
          params: '{{experiment_id}},{{image_path}}'
      - name: store-results
        type: call
        call: snowflake.execute-query
        with:
          query_name: store_analysis_results
          params: '{{experiment_id}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: leica-research
          text: 'Microscopy analysis complete: {{experiment_id}}. Job: {{run-analysis.run_id}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://danaher.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: submit-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://danaher.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → leica-microscopy-image-analysis-orchestration.yml

Validates new vendor master data submissions in SAP Ariba against Danaher's supplier onboarding policy requirements, creating a Jira task for the procurement team if mandatory fields are missing.

naftiko: '0.5'
info:
  label: SAP Vendor Master Data Validation
  description: Validates new vendor master data submissions in SAP Ariba against Danaher's supplier onboarding policy requirements, creating a Jira task for the procurement team if mandatory fields are missing.
  tags:
  - procurement
  - sap-ariba
  - jira
  - vendor-management
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboarding
    port: 8080
    tools:
    - name: validate-vendor-master-data
      description: Given an SAP Ariba supplier ID for a new vendor, validate the supplier profile completeness against Danaher's mandatory data requirements and create a Jira task for the procurement team to resolve any gaps. Use during supplier onboarding and annual vendor data reviews.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: SAP Ariba supplier ID for the new vendor.
      steps:
      - name: get-supplier-profile
        type: call
        call: ariba-vendor.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-review-task
        type: call
        call: jira-vendor.create-issue
        with:
          project_key: PROC
          issuetype: Task
          summary: 'Vendor Master Data Review: {{get-supplier-profile.supplier_name}} ({{supplier_id}})'
          description: 'Supplier: {{get-supplier-profile.supplier_name}}

            Ariba ID: {{supplier_id}}

            Country: {{get-supplier-profile.country}}

            Status: {{get-supplier-profile.registration_status}}

            Missing Fields: {{get-supplier-profile.missing_required_fields}}'
  consumes:
  - type: http
    namespace: ariba-vendor
    baseUri: https://openapi.ariba.com/api/supplier-registration/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: jira-vendor
    baseUri: https://danaher.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-vendor-master-data-validation.yml

Manages diagnostic reagent lot release for Beckman Coulter products.

naftiko: '0.5'
info:
  label: Beckman Coulter Reagent Lot Release Orchestration
  description: Manages diagnostic reagent lot release for Beckman Coulter products.
  tags:
  - quality
  - manufacturing
  - diagnostics
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lot-release
    port: 8080
    tools:
    - name: release-reagent-lot
      description: Given batch and product, verify QC, release, create CoA, and notify. Use for BC lot release.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: Batch number.
      - name: product_code
        in: body
        type: string
        description: Product code.
      steps:
      - name: get-qc
        type: call
        call: sap-erp.get-inspection
        with:
          batch: '{{batch_number}}'
      - name: release
        type: call
        call: sap-erp.release-batch
        with:
          batch: '{{batch_number}}'
      - name: create-coa
        type: call
        call: servicenow.create-task
        with:
          short_description: 'CoA: BC {{batch_number}}'
          category: quality_release
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: bc-distribution
          text: 'BC lot {{batch_number}} released. CoA: {{create-coa.number}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://danaher-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspections
      path: /A_InspectionResult
      operations:
      - name: get-inspection
        method: GET
    - name: batches
      path: /A_BatchRelease
      operations:
      - name: release-batch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://danaher.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → beckman-coulter-reagent-lot-release-orchestration.yml

Runs end-of-period financial validation queries in Snowflake against SAP data extracts to identify unposted journals, open purchase orders, and accrual gaps before the monthly close deadline.

naftiko: '0.5'
info:
  label: SAP Period Close Financial Validation
  description: Runs end-of-period financial validation queries in Snowflake against SAP data extracts to identify unposted journals, open purchase orders, and accrual gaps before the monthly close deadline.
  tags:
  - finance
  - period-close
  - sap
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: period-close
    port: 8080
    tools:
    - name: validate-period-close-readiness
      description: Query Snowflake for end-of-period financial validation issues — unposted journals, open POs past goods receipt date, and missing accruals — across all Danaher OpCos. Notify the finance team in Teams if blocking items are found. Use in the 3-day pre-close validation window.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period to validate for close (YYYY-MM format).
      - name: alert_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID to notify if blocking items are found.
      steps:
      - name: run-close-validation
        type: call
        call: snowflake-close.run-query
        with:
          statement: SELECT opco_code, issue_type, COUNT(*) as item_count, SUM(amount) as total_value FROM finance.period_close_validation WHERE fiscal_period='{{fiscal_period}}' AND status='OPEN' GROUP BY 1,2 ORDER BY total_value DESC
      - name: notify-finance-team
        type: call
        call: msteams-close.send-message
        with:
          channel_id: '{{alert_channel_id}}'
          message: 'PERIOD CLOSE VALIDATION ({{fiscal_period}}): {{run-close-validation.row_count}} blocking issues found. Top issue: {{run-close-validation.opco_code}} — {{run-close-validation.issue_type}} (${{run-close-validation.total_value}})'
  consumes:
  - type: http
    namespace: snowflake-close
    baseUri: https://danaher.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams-close
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-period-close-financial-validation.yml

Checks the preventive maintenance schedule for installed Danaher laboratory instruments in Salesforce and creates upcoming PM work orders in ServiceNow for field service engineers.

naftiko: '0.5'
info:
  label: Lab Instrument Preventive Maintenance Scheduler
  description: Checks the preventive maintenance schedule for installed Danaher laboratory instruments in Salesforce and creates upcoming PM work orders in ServiceNow for field service engineers.
  tags:
  - field-service
  - preventive-maintenance
  - salesforce
  - servicenow
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: pm-scheduling
    port: 8080
    tools:
    - name: schedule-preventive-maintenance
      description: Query Salesforce for instruments with preventive maintenance due within a specified number of days and create ServiceNow PM work orders for each. Use in weekly PM scheduling to ensure all instruments maintain service contract compliance.
      inputParameters:
      - name: due_within_days
        in: body
        type: integer
        description: Number of days ahead to look for PM due dates.
      - name: opco
        in: body
        type: string
        description: Danaher operating company to schedule PM for (e.g., BECKMAN, LEICA, HACH).
      steps:
      - name: get-pm-due-instruments
        type: call
        call: salesforce-pm.search-records
        with:
          query: SELECT Id, Name, SerialNumber__c, PM_Due_Date__c, Account.Name FROM Asset WHERE PM_Due_Date__c <= NEXT_N_DAYS:{{due_within_days}} AND OpCo__c='{{opco}}' AND Status='Installed'
      - name: create-pm-work-orders
        type: call
        call: servicenow-pm.create-incident
        with:
          short_description: 'Preventive Maintenance: {{get-pm-due-instruments.count}} {{opco}} instruments due in {{due_within_days}} days'
          category: Preventive Maintenance
          description: 'OpCo: {{opco}}

            Instruments Due: {{get-pm-due-instruments.count}}

            Instrument List: {{get-pm-due-instruments.serial_numbers}}

            Due By: {{get-pm-due-instruments.earliest_due_date}}'
  consumes:
  - type: http
    namespace: salesforce-pm
    baseUri: https://danaher.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: assets
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-records
        method: GET
  - type: http
    namespace: servicenow-pm
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → lab-instrument-preventive-maintenance-scheduler.yml

Retrieves employer brand metrics from LinkedIn for Danaher.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Metrics
  description: Retrieves employer brand metrics from LinkedIn for Danaher.
  tags:
  - hr
  - marketing
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: employer-brand
    port: 8080
    tools:
    - name: get-metrics
      description: Return follower count and engagement. Use for brand tracking.
      inputParameters:
      - name: time_period
        in: body
        type: string
        description: Period.
      call: linkedin.get-organization-stats
      with:
        period: '{{time_period}}'
      outputParameters:
      - name: follower_count
        type: integer
        mapping: $.data.followerCount
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: stats
      path: /organizationPageStatistics
      operations:
      - name: get-organization-stats
        method: GET
Open in Framework → View in Fleet → linkedin-employer-brand-metrics.yml

Handles cold chain excursions for temperature-sensitive diagnostics reagents.

naftiko: '0.5'
info:
  label: Cold Chain Monitoring Orchestration
  description: Handles cold chain excursions for temperature-sensitive diagnostics reagents.
  tags:
  - supply-chain
  - quality
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cold-chain
    port: 8080
    tools:
    - name: handle-excursion
      description: Given shipment, batch, and temperature, create deviation, quarantine, and notify. Use for cold chain breaches.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: Shipment ID.
      - name: batch_number
        in: body
        type: string
        description: Batch.
      - name: temperature
        in: body
        type: string
        description: Temperature.
      steps:
      - name: deviation
        type: call
        call: servicenow.create-deviation
        with:
          description: 'Cold chain: {{shipment_id}}, {{batch_number}}, {{temperature}}'
          priority: '1'
      - name: quarantine
        type: call
        call: sap-erp.update-batch-status
        with:
          batch: '{{batch_number}}'
          status: quarantine
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain
          text: 'COLD CHAIN: {{shipment_id}} {{batch_number}} quarantined. Deviation: {{deviation.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://danaher.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: deviations
      path: /table/u_deviation
      operations:
      - name: create-deviation
        method: POST
  - type: http
    namespace: sap-erp
    baseUri: https://danaher-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch('{{batch}}')
      inputParameters:
      - name: batch
        in: path
      operations:
      - name: update-batch-status
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cold-chain-monitoring-orchestration.yml

Uses OpenAI to classify documents by type and operating company.

naftiko: '0.5'
info:
  label: OpenAI Document Classification
  description: Uses OpenAI to classify documents by type and operating company.
  tags:
  - ai
  - documentation
  - openai
capability:
  exposes:
  - type: mcp
    namespace: doc-classification
    port: 8080
    tools:
    - name: classify-document
      description: Given document text, classify type and OpCo. Use for document routing.
      inputParameters:
      - name: document_text
        in: body
        type: string
        description: Document text.
      call: openai.create-completion
      with:
        model: gpt-4
        prompt: 'Classify: {{document_text}}'
      outputParameters:
      - name: classification
        type: string
        mapping: $.choices[0].message.content
  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: create-completion
        method: POST
Open in Framework → View in Fleet → openai-document-classification.yml

When a Beckman Coulter or Leica instrument reports a service fault via the connected device API, creates a ServiceNow field service ticket and notifies the field service engineer via Microsoft Teams.

naftiko: '0.5'
info:
  label: Laboratory Instrument Service Ticket Creation
  description: When a Beckman Coulter or Leica instrument reports a service fault via the connected device API, creates a ServiceNow field service ticket and notifies the field service engineer via Microsoft Teams.
  tags:
  - field-service
  - iot
  - servicenow
  - life-sciences
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: instrument-service
    port: 8080
    tools:
    - name: create-instrument-service-ticket
      description: Given an instrument serial number, fault code, and customer site ID, create a ServiceNow field service order and notify the assigned field service engineer in Microsoft Teams. Use when laboratory instruments report automated fault alerts requiring on-site service.
      inputParameters:
      - name: instrument_serial_number
        in: body
        type: string
        description: Instrument serial number reporting the fault.
      - name: fault_code
        in: body
        type: string
        description: Instrument fault code (manufacturer-specific error code).
      - name: customer_site_id
        in: body
        type: string
        description: Customer site/lab identifier where the instrument is installed.
      - name: opco
        in: body
        type: string
        description: Danaher operating company (e.g., BECKMAN, LEICA, HACH).
      steps:
      - name: create-field-service-order
        type: call
        call: servicenow-fso.create-incident
        with:
          short_description: 'Instrument Fault: {{instrument_serial_number}} ({{fault_code}}) at site {{customer_site_id}}'
          category: Field Service
          urgency: '2'
          description: 'Serial: {{instrument_serial_number}}

            Fault Code: {{fault_code}}

            Site: {{customer_site_id}}

            OpCo: {{opco}}'
      - name: notify-field-engineer
        type: call
        call: msteams-fso.send-message
        with:
          channel_id: field-service-dispatch
          message: 'NEW INSTRUMENT FAULT: {{opco}} | Serial: {{instrument_serial_number}} | Code: {{fault_code}} | Site: {{customer_site_id}} | SNOW: {{create-field-service-order.number}}'
  consumes:
  - type: http
    namespace: servicenow-fso
    baseUri: https://danaher.service-now.com/api/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-fso
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → laboratory-instrument-service-ticket-creation.yml

Retrieves clinical trial site status for Danaher diagnostics clinical studies.

naftiko: '0.5'
info:
  label: Clinical Trial Site Status Lookup
  description: Retrieves clinical trial site status for Danaher diagnostics clinical studies.
  tags:
  - clinical
  - rd
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: clinical-sites
    port: 8080
    tools:
    - name: get-site-status
      description: Given study and site ID, return activation status. Use for trial visibility.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Study ID.
      - name: site_id
        in: body
        type: string
        description: Site ID.
      call: oracle-clinical.get-site-status
      with:
        study_id: '{{study_id}}'
        site_id: '{{site_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.status
  consumes:
  - type: http
    namespace: oracle-clinical
    baseUri: https://danaher-ctms.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_ctms_token
    resources:
    - name: sites
      path: /studies/{{study_id}}/sites/{{site_id}}
      inputParameters:
      - name: study_id
        in: path
      - name: site_id
        in: path
      operations:
      - name: get-site-status
        method: GET
Open in Framework → View in Fleet → clinical-trial-site-status-lookup.yml

Handles critical alerts from Radiometer blood gas analyzers by creating service tickets, dispatching engineers, and notifying hospital contacts.

naftiko: '0.5'
info:
  label: Radiometer Blood Gas Analyzer Alert Orchestration
  description: Handles critical alerts from Radiometer blood gas analyzers by creating service tickets, dispatching engineers, and notifying hospital contacts.
  tags:
  - diagnostics
  - service
  - servicenow
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analyzer-alerts
    port: 8080
    tools:
    - name: handle-analyzer-alert
      description: Given instrument serial and alert code, create ticket, dispatch, and notify. Use for Radiometer critical alerts.
      inputParameters:
      - name: serial_number
        in: body
        type: string
        description: Instrument serial.
      - name: alert_code
        in: body
        type: string
        description: Alert code.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Radiometer alert: {{serial_number}} - {{alert_code}}'
          priority: '1'
      - name: get-customer
        type: call
        call: salesforce.get-instrument-account
        with:
          serial: '{{serial_number}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: radiometer-service
          text: 'ALERT: Radiometer {{serial_number}} code {{alert_code}}. Customer: {{get-customer.account_name}}. Ticket: {{create-ticket.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://danaher.service-now.com/api/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://danaher.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: instruments
      path: /sobjects/Asset
      operations:
      - name: get-instrument-account
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → radiometer-blood-gas-analyzer-alert-orchestration.yml

Triggers Power BI financial dashboard refresh for cross-OpCo reporting.

naftiko: '0.5'
info:
  label: Power BI Financial Dashboard Refresh
  description: Triggers Power BI financial dashboard refresh for cross-OpCo reporting.
  tags:
  - finance
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-dashboard
      description: Given dataset ID, trigger refresh. Use for financial metrics.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Dataset ID.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-financial-dashboard-refresh.yml

When a Salesforce instrument or service contract opportunity is Closed Won, creates a SAP customer contract to trigger revenue recognition and schedule billing.

naftiko: '0.5'
info:
  label: Salesforce Closed Won to SAP Revenue Recognition
  description: When a Salesforce instrument or service contract opportunity is Closed Won, creates a SAP customer contract to trigger revenue recognition and schedule billing.
  tags:
  - sales
  - finance
  - salesforce
  - sap
  - revenue-recognition
capability:
  exposes:
  - type: mcp
    namespace: quote-to-cash
    port: 8080
    tools:
    - name: create-sap-contract-from-opportunity
      description: Given a Salesforce Closed Won opportunity ID, retrieve the deal details and create a SAP customer contract for billing schedule and revenue recognition. Use in the quote-to-cash process for instrument sales, reagent contracts, and service agreements.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID for the Closed Won deal.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opp.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-contract
        type: call
        call: sap-billing.create-contract
        with:
          customer_name: '{{get-opportunity.account_name}}'
          contract_value: '{{get-opportunity.amount}}'
          currency: USD
          start_date: '{{get-opportunity.close_date}}'
          product_category: '{{get-opportunity.product_family}}'
          description: 'SF Opportunity: {{opportunity_id}} — {{get-opportunity.name}}'
  consumes:
  - type: http
    namespace: salesforce-opp
    baseUri: https://danaher.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-billing
    baseUri: https://danaher-s4.sap.com/sap/opu/odata/sap/API_CUSTOMER_CONTRACT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: contracts
      path: /A_CustomerContract
      operations:
      - name: create-contract
        method: POST
Open in Framework → View in Fleet → salesforce-closed-won-to-sap-revenue-recognition.yml

Retrieves completed story points from the current and prior three Jira sprints for an R&D project and publishes a velocity trend report to the project SharePoint site.

naftiko: '0.5'
info:
  label: Jira R&D Sprint Velocity Report
  description: Retrieves completed story points from the current and prior three Jira sprints for an R&D project and publishes a velocity trend report to the project SharePoint site.
  tags:
  - devops
  - project-management
  - jira
  - sharepoint
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: rd-reporting
    port: 8080
    tools:
    - name: publish-sprint-velocity-report
      description: Given a Jira R&D project key and SharePoint site ID, query the last four sprints' completed story points and publish a velocity trend chart page to SharePoint. Use at the end of each sprint for R&D program management reporting.
      inputParameters:
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for the R&D project (e.g., 'FLOW', 'MICRO', 'WATER').
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID for the R&D project site.
      steps:
      - name: get-sprint-metrics
        type: call
        call: jira-sprint.search-issues
        with:
          jql: project={{jira_project_key}} AND sprint in closedSprints() AND status=Done ORDER BY updated DESC
      - name: publish-velocity-report
        type: call
        call: sharepoint-rd.create-page
        with:
          site_id: '{{sharepoint_site_id}}'
          title: Sprint Velocity Report — {{jira_project_key}}
          content: 'Project: {{jira_project_key}}

            Completed Stories: {{get-sprint-metrics.total}}

            Story Points Delivered: {{get-sprint-metrics.total_story_points}}

            Average Velocity: {{get-sprint-metrics.avg_velocity_per_sprint}}'
  consumes:
  - type: http
    namespace: jira-sprint
    baseUri: https://danaher.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues-search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: sharepoint-rd
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: site-pages
      path: /sites/{{site_id}}/pages
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → jira-r-d-sprint-velocity-report.yml

After a Salesforce service case is closed for an instrument repair, triggers an NPS survey email to the customer contact and logs the survey dispatch in Snowflake.

naftiko: '0.5'
info:
  label: Salesforce NPS Survey Trigger for Service Interactions
  description: After a Salesforce service case is closed for an instrument repair, triggers an NPS survey email to the customer contact and logs the survey dispatch in Snowflake.
  tags:
  - customer-experience
  - salesforce
  - snowflake
  - nps
  - field-service
capability:
  exposes:
  - type: mcp
    namespace: cx-surveys
    port: 8080
    tools:
    - name: send-post-service-nps-survey
      description: Given a closed Salesforce service case ID, retrieve the customer contact email, send an NPS survey email via Microsoft Graph, and log the dispatch in Snowflake for response tracking. Use 24 hours after a field service case is closed.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce closed service case ID.
      steps:
      - name: get-case
        type: call
        call: salesforce-nps.get-case
        with:
          case_id: '{{case_id}}'
      - name: send-nps-survey
        type: call
        call: msgraph-nps.send-email
        with:
          to: '{{get-case.contact_email}}'
          subject: How was your Danaher service experience?
          body: Thank you for choosing Danaher. Please rate your recent service experience for case {{case_id}}. Your feedback helps us improve our field service quality.
      - name: log-dispatch
        type: call
        call: snowflake-nps.run-query
        with:
          statement: INSERT INTO cx.survey_dispatches (case_id, contact_email, opco, dispatched_at) VALUES ('{{case_id}}', '{{get-case.contact_email}}', '{{get-case.opco}}', CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: salesforce-nps
    baseUri: https://danaher.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: msgraph-nps
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/service@danaher.com/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: snowflake-nps
    baseUri: https://danaher.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → salesforce-nps-survey-trigger-for-service-interactions.yml

Retrieves open requisitions and candidate pipeline metrics from Workday Recruiting for each operating company and publishes a weekly talent acquisition summary to the HR leadership SharePoint site.

naftiko: '0.5'
info:
  label: Workday Talent Acquisition Pipeline Report
  description: Retrieves open requisitions and candidate pipeline metrics from Workday Recruiting for each operating company and publishes a weekly talent acquisition summary to the HR leadership SharePoint site.
  tags:
  - hr
  - recruiting
  - workday
  - sharepoint
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: publish-recruiting-pipeline-report
      description: Retrieve open job requisition counts, candidate pipeline stages, and time-to-fill metrics from Workday Recruiting for all Danaher operating companies, then publish a weekly summary to the HR SharePoint site. Use for weekly TA leadership reviews.
      inputParameters:
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID for the HR leadership portal.
      steps:
      - name: get-recruiting-metrics
        type: call
        call: workday-ta.get-recruiting-summary
        with:
          report_type: weekly_pipeline_summary
      - name: publish-to-sharepoint
        type: call
        call: sharepoint-ta.create-page
        with:
          site_id: '{{sharepoint_site_id}}'
          title: Weekly Talent Acquisition Pipeline Report
          content: 'Open Requisitions: {{get-recruiting-metrics.open_reqs}}

            Candidates in Pipeline: {{get-recruiting-metrics.pipeline_count}}

            Offers Extended: {{get-recruiting-metrics.offers_extended}}

            Avg Time to Fill: {{get-recruiting-metrics.avg_time_to_fill_days}} days'
  consumes:
  - type: http
    namespace: workday-ta
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: recruiting-reports
      path: /danaher/recruiting/reports/{{report_type}}
      inputParameters:
      - name: report_type
        in: path
      operations:
      - name: get-recruiting-summary
        method: GET
  - type: http
    namespace: sharepoint-ta
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: site-pages
      path: /sites/{{site_id}}/pages
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → workday-talent-acquisition-pipeline-report.yml

Coordinates a Leica Microsystems software release by creating a GitHub release tag, triggering the Azure DevOps deployment pipeline, and notifying the product team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Leica Microscopy Software Release Deployment
  description: Coordinates a Leica Microsystems software release by creating a GitHub release tag, triggering the Azure DevOps deployment pipeline, and notifying the product team in Microsoft Teams.
  tags:
  - devops
  - release-management
  - github
  - microsoft-teams
  - life-sciences
capability:
  exposes:
  - type: mcp
    namespace: release-ops
    port: 8080
    tools:
    - name: deploy-software-release
      description: Given a GitHub repository and release version, create a GitHub release, trigger the corresponding deployment pipeline, and notify the product management team in Microsoft Teams that the release has been deployed. Use for Leica Microsystems instrument software and firmware release management.
      inputParameters:
      - name: repo_owner
        in: body
        type: string
        description: GitHub organization owning the repository.
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name for the software being released.
      - name: release_version
        in: body
        type: string
        description: Semantic version string for the release (e.g., 'v3.2.1').
      - name: release_notes
        in: body
        type: string
        description: Release notes summary for the new version.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID to notify of the release.
      steps:
      - name: create-github-release
        type: call
        call: github.create-release
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          tag_name: '{{release_version}}'
          name: Release {{release_version}}
          body: '{{release_notes}}'
      - name: notify-product-team
        type: call
        call: msteams-release.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: 'RELEASE DEPLOYED: {{repo_name}} {{release_version}} | GitHub: {{create-github-release.html_url}} | {{release_notes}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/{{owner}}/{{repo}}/releases
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: create-release
        method: POST
  - type: http
    namespace: msteams-release
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → leica-microscopy-software-release-deployment.yml

Triggers a Snowflake pipeline to compute cross-opco revenue analytics by product platform and geographic segment, then refreshes the executive Tableau dashboard.

naftiko: '0.5'
info:
  label: Snowflake Life Sciences Revenue Analytics Refresh
  description: Triggers a Snowflake pipeline to compute cross-opco revenue analytics by product platform and geographic segment, then refreshes the executive Tableau dashboard.
  tags:
  - finance
  - data
  - snowflake
  - tableau
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: revenue-analytics
    port: 8080
    tools:
    - name: refresh-revenue-analytics
      description: Execute Snowflake revenue aggregation across all Danaher operating companies by product platform and segment, then trigger a Tableau dashboard refresh for the executive revenue review. Use for monthly and quarterly business reviews.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period to compute revenue for (e.g., '2025-Q1' or '2025-03').
      - name: tableau_workbook_id
        in: body
        type: string
        description: Tableau workbook LUID to refresh.
      steps:
      - name: compute-revenue
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO analytics.revenue_summary SELECT fiscal_period, opco_code, product_platform, geography, SUM(net_revenue) as total_revenue, COUNT(DISTINCT customer_id) as customer_count FROM erp.revenue_transactions WHERE fiscal_period='{{fiscal_period}}' GROUP BY 1,2,3,4
      - name: refresh-tableau
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: '{{tableau_workbook_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://danaher.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: tableau
    baseUri: https://tableau.danaher.com/api/2.8
    authentication:
      type: apikey
      key: X-Tableau-Auth
      value: $secrets.tableau_token
      placement: header
    resources:
    - name: workbook-refreshes
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → snowflake-life-sciences-revenue-analytics-refresh.yml

Detects a production system incident from Datadog, creates a P1 ticket in ServiceNow, pages on-call engineers via PagerDuty, and posts a war-room link to Teams.

naftiko: '0.5'
info:
  label: P1 Production Incident Response
  description: Detects a production system incident from Datadog, creates a P1 ticket in ServiceNow, pages on-call engineers via PagerDuty, and posts a war-room link to Teams.
  tags:
  - incident-response
  - datadog
  - servicenow
  - pagerduty
  - teams
  - observability
capability:
  exposes:
    type: mcp
    namespace: elevance-p1-incident-response
    port: 8080
    tools:
    - name: trigger-p1-incident
      description: Opens a P1 incident in ServiceNow, triggers a PagerDuty alert, and notifies the engineering war-room channel in Teams.
      inputParameters:
      - name: monitor_id
        type: string
        description: Datadog monitor ID that triggered the alert
        required: true
        in: body
      - name: service_name
        type: string
        description: Affected service name
        required: true
        in: body
      - name: summary
        type: string
        description: Short description of the incident
        required: true
        in: body
      steps:
      - name: get-monitor-details
        call: datadog.getMonitor
        with:
          monitor_id: '{{input.monitor_id}}'
      - name: create-p1-ticket
        call: servicenow.createIncident
        with:
          urgency: '1'
          impact: '1'
          short_description: '[P1] {{input.summary}}'
          service: '{{input.service_name}}'
      - name: page-on-call
        call: pagerduty.createIncident
        with:
          title: '[P1] {{input.summary}}'
          service_id: $secrets.pagerduty_service_id
          escalation_policy_id: $secrets.pagerduty_escalation_policy
      - name: notify-war-room
        call: microsoft-teams.sendMessage
        with:
          channel: engineering-incidents
          message: 'P1 INCIDENT: {{input.summary}} | ServiceNow: {{create-p1-ticket.ticketNumber}} | PagerDuty: {{page-on-call.incidentId}}'
  consumes:
  - namespace: datadog
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: $secrets.datadog_api_key
      placement: header
      name: DD-API-KEY
    resources:
    - path: /monitor/{monitor_id}
      operations:
      - name: getMonitor
        method: GET
  - namespace: servicenow
    type: http
    baseUri: https://elevancehealth.service-now.com/api/now/v1
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - path: /table/incident
      operations:
      - name: createIncident
        method: POST
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - path: /incidents
      operations:
      - name: createIncident
        method: POST
  - namespace: microsoft-teams
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /teams/channels/messages
      operations:
      - name: sendMessage
        method: POST
Open in Framework → View in Fleet → p1-production-incident-response.yml

Pulls open requisitions and candidate pipeline counts from Workday and posts a recruiting digest to the HR Slack channel.

naftiko: '0.5'
info:
  label: Recruiting Pipeline Digest
  description: Pulls open requisitions and candidate pipeline counts from Workday and posts a recruiting digest to the HR Slack channel.
  tags:
  - recruiting
  - workday
  - slack
  - hr
  - talent-acquisition
capability:
  exposes:
    type: mcp
    namespace: elevance-recruiting-pipeline
    port: 8080
    tools:
    - name: post-recruiting-pipeline-digest
      description: Fetches open job requisitions and candidate counts from Workday and posts a weekly recruiting digest to Slack.
      inputParameters:
      - name: department
        type: string
        description: Department to filter requisitions by
        required: false
        in: body
      steps:
      - name: get-open-requisitions
        call: workday.getJobRequisitions
        with:
          status: Open
          department: '{{input.department}}'
      - name: post-digest
        call: slack.postMessage
        with:
          channel: '#talent-acquisition'
          text: 'Recruiting digest: {{get-open-requisitions.total}} open requisitions. Top priority roles: {{get-open-requisitions.topRoles}}'
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - path: /jobRequisitions
      operations:
      - name: getJobRequisitions
        method: GET
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - path: /chat.postMessage
      operations:
      - name: postMessage
        method: POST
Open in Framework → View in Fleet → recruiting-pipeline-digest.yml

Runs a data quality validation query on Snowflake member enrollment tables and posts results to the data engineering Slack channel.

naftiko: '0.5'
info:
  label: Member Enrollment Data Quality Check
  description: Runs a data quality validation query on Snowflake member enrollment tables and posts results to the data engineering Slack channel.
  tags:
  - data-quality
  - snowflake
  - slack
  - analytics
  - enrollment
capability:
  exposes:
    type: mcp
    namespace: elevance-enrollment-data-quality
    port: 8080
    tools:
    - name: run-enrollment-data-quality-check
      description: Executes a null/duplicate check on a Snowflake enrollment table and posts the results to Slack.
      inputParameters:
      - name: table_name
        type: string
        description: Fully qualified Snowflake table name (db.schema.table)
        required: true
        in: body
      - name: check_column
        type: string
        description: Column to check for nulls or duplicates
        required: true
        in: body
      steps:
      - name: run-quality-query
        call: snowflake.executeQuery
        with:
          query: SELECT COUNT(*) AS total_rows, COUNT(DISTINCT {{input.check_column}}) AS distinct_vals, SUM(CASE WHEN {{input.check_column}} IS NULL THEN 1 ELSE 0 END) AS null_count FROM {{input.table_name}}
      - name: post-results
        call: slack.postMessage
        with:
          channel: '#data-engineering'
          text: 'Enrollment data quality check on {{input.table_name}}: {{run-quality-query.total_rows}} rows, {{run-quality-query.null_count}} nulls, {{run-quality-query.distinct_vals}} distinct members.'
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://elevancehealth.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - path: /statements
      operations:
      - name: executeQuery
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - path: /chat.postMessage
      operations:
      - name: postMessage
        method: POST
Open in Framework → View in Fleet → member-enrollment-data-quality-check.yml

Submits a new position approval request in Workday, routes it to finance via Microsoft 365 email, and tracks approval status in Jira.

naftiko: '0.5'
info:
  label: Position Approval Request Orchestrator
  description: Submits a new position approval request in Workday, routes it to finance via Microsoft 365 email, and tracks approval status in Jira.
  tags:
  - hr
  - workday
  - microsoft-365
  - jira
  - headcount-planning
capability:
  exposes:
    type: mcp
    namespace: elevance-position-approval
    port: 8080
    tools:
    - name: submit-position-approval
      description: Creates a new position in Workday, sends an approval email via Microsoft 365, and creates a Jira tracking ticket.
      inputParameters:
      - name: job_title
        type: string
        description: Title for the new position
        required: true
        in: body
      - name: department
        type: string
        description: Requesting department
        required: true
        in: body
      - name: budget_code
        type: string
        description: Budget code for the position
        required: true
        in: body
      - name: finance_approver_email
        type: string
        description: Finance approver email address
        required: true
        in: body
      steps:
      - name: create-workday-position
        call: workday.createPosition
        with:
          jobTitle: '{{input.job_title}}'
          department: '{{input.department}}'
          budgetCode: '{{input.budget_code}}'
      - name: create-jira-tracking
        call: jira.createIssue
        with:
          project: HR
          issuetype: Task
          summary: 'Position approval: {{input.job_title}} in {{input.department}}'
          description: 'Workday position ID: {{create-workday-position.positionId}}. Budget code: {{input.budget_code}}'
      - name: send-approval-email
        call: microsoft-365.sendEmail
        with:
          to: '{{input.finance_approver_email}}'
          subject: 'Position Approval Required: {{input.job_title}}'
          body: 'Please approve new position {{input.job_title}} in {{input.department}}. Workday ID: {{create-workday-position.positionId}}. Jira tracking: {{create-jira-tracking.key}}'
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - path: /positions
      operations:
      - name: createPosition
        method: POST
  - namespace: jira
    type: http
    baseUri: https://elevancehealth.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - path: /issue
      operations:
      - name: createIssue
        method: POST
  - namespace: microsoft-365
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /me/sendMail
      operations:
      - name: sendEmail
        method: POST
Open in Framework → View in Fleet → position-approval-request-orchestrator.yml

Submits a role change request in Workday and notifies the employee and their manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Role Change Approval Workflow
  description: Submits a role change request in Workday and notifies the employee and their manager via Microsoft Teams.
  tags:
  - hr
  - workday
  - teams
  - role-change
  - approval
capability:
  exposes:
    type: mcp
    namespace: elevance-role-change-approval
    port: 8080
    tools:
    - name: submit-role-change
      description: Creates a role change business process in Workday and sends Teams notifications to the manager.
      inputParameters:
      - name: employee_id
        type: string
        description: Workday employee ID
        required: true
        in: body
      - name: new_job_profile
        type: string
        description: New job profile or title
        required: true
        in: body
      - name: effective_date
        type: string
        description: Effective date in YYYY-MM-DD format
        required: true
        in: body
      - name: manager_email
        type: string
        description: Manager email for notification
        required: true
        in: body
      steps:
      - name: submit-workday-change
        call: workday.submitJobChange
        with:
          workerId: '{{input.employee_id}}'
          jobProfile: '{{input.new_job_profile}}'
          effectiveDate: '{{input.effective_date}}'
      - name: notify-manager
        call: microsoft-teams.sendMessage
        with:
          recipient: '{{input.manager_email}}'
          message: 'Role change submitted for employee {{input.employee_id}} to {{input.new_job_profile}}, effective {{input.effective_date}}. Workday reference: {{submit-workday-change.eventId}}'
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - path: /workers/{workerId}/jobChange
      operations:
      - name: submitJobChange
        method: POST
  - namespace: microsoft-teams
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /chats/sendMessage
      operations:
      - name: sendMessage
        method: POST
Open in Framework → View in Fleet → workday-role-change-approval-workflow.yml

Retrieves GitHub Advanced Security code scanning alerts for a repository and posts findings to the security Teams channel.

naftiko: '0.5'
info:
  label: GitHub Repository Security Scan
  description: Retrieves GitHub Advanced Security code scanning alerts for a repository and posts findings to the security Teams channel.
  tags:
  - security
  - github
  - teams
  - devops
  - vulnerability-scanning
capability:
  exposes:
    type: mcp
    namespace: elevance-github-security-scan
    port: 8080
    tools:
    - name: scan-repository-security
      description: Fetches critical and high severity code scanning alerts from GitHub and posts a summary to the security Teams channel.
      inputParameters:
      - name: org
        type: string
        description: GitHub organization name
        required: true
        in: body
      - name: repo
        type: string
        description: Repository name
        required: true
        in: body
      steps:
      - name: get-code-scanning-alerts
        call: github.getCodeScanningAlerts
        with:
          org: '{{input.org}}'
          repo: '{{input.repo}}'
          severity: critical,high
          state: open
      - name: post-security-summary
        call: microsoft-teams.sendMessage
        with:
          channel: security-engineering
          message: 'Security scan for {{input.org}}/{{input.repo}}: {{get-code-scanning-alerts.total_count}} critical/high alerts open. Review: https://github.com/{{input.org}}/{{input.repo}}/security/code-scanning'
  consumes:
  - namespace: github
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - path: /repos/{org}/{repo}/code-scanning/alerts
      operations:
      - name: getCodeScanningAlerts
        method: GET
  - namespace: microsoft-teams
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /teams/channels/messages
      operations:
      - name: sendMessage
        method: POST
Open in Framework → View in Fleet → github-repository-security-scan.yml

Retrieves the current on-call schedule from PagerDuty for a given service team and returns the primary and secondary engineers.

naftiko: '0.5'
info:
  label: On-Call Schedule Lookup
  description: Retrieves the current on-call schedule from PagerDuty for a given service team and returns the primary and secondary engineers.
  tags:
  - oncall
  - pagerduty
  - devops
  - incident-response
capability:
  exposes:
    type: mcp
    namespace: elevance-oncall-lookup
    port: 8080
    tools:
    - name: get-oncall-schedule
      description: Returns the current primary and secondary on-call engineers for a given PagerDuty schedule.
      inputParameters:
      - name: schedule_id
        type: string
        description: PagerDuty schedule ID
        required: true
        in: query
      call: pagerduty.getOncalls
      outputParameters:
      - name: oncall_list
        mapping: $.oncalls
  consumes:
  - namespace: pagerduty
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - path: /oncalls
      operations:
      - name: getOncalls
        method: GET
Open in Framework → View in Fleet → on-call-schedule-lookup.yml

Retrieves the status and details of a ServiceNow IT ticket by ticket number.

naftiko: '0.5'
info:
  label: ServiceNow IT Ticket Lookup
  description: Retrieves the status and details of a ServiceNow IT ticket by ticket number.
  tags:
  - itsm
  - servicenow
  - it-support
capability:
  exposes:
    type: mcp
    namespace: elevance-ticket-lookup
    port: 8080
    tools:
    - name: lookup-it-ticket
      description: Fetches the current status, priority, and assignment of a ServiceNow incident ticket.
      inputParameters:
      - name: ticket_number
        type: string
        description: ServiceNow ticket number (e.g., INC0012345)
        required: true
        in: query
      call: servicenow.getIncident
      outputParameters:
      - name: ticket
        mapping: $.result
  consumes:
  - namespace: servicenow
    type: http
    baseUri: https://elevancehealth.service-now.com/api/now/v1
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - path: /table/incident
      operations:
      - name: getIncident
        method: GET
Open in Framework → View in Fleet → servicenow-it-ticket-lookup.yml

Queries Snowflake for HIPAA and ACA compliance metrics and posts a regulatory summary to the compliance team Teams channel.

naftiko: '0.5'
info:
  label: Regulatory Compliance Report Builder
  description: Queries Snowflake for HIPAA and ACA compliance metrics and posts a regulatory summary to the compliance team Teams channel.
  tags:
  - compliance
  - regulatory
  - snowflake
  - teams
  - hipaa
  - health-plan
capability:
  exposes:
    type: mcp
    namespace: elevance-regulatory-compliance
    port: 8080
    tools:
    - name: build-regulatory-compliance-report
      description: Fetches HIPAA and ACA compliance metrics from Snowflake and posts a summary to the compliance Teams channel.
      inputParameters:
      - name: report_period
        type: string
        description: Reporting period in YYYY-MM format
        required: true
        in: body
      - name: regulation_type
        type: string
        description: Regulation to report on (HIPAA, ACA, CMS)
        required: true
        in: body
      steps:
      - name: query-compliance-metrics
        call: snowflake.executeQuery
        with:
          query: SELECT regulation, control_area, compliance_status, findings_count, last_audit_date FROM compliance.assessments WHERE report_period = '{{input.report_period}}' AND regulation = '{{input.regulation_type}}'
      - name: post-compliance-report
        call: microsoft-teams.sendMessage
        with:
          channel: compliance-team
          message: 'Regulatory compliance report for {{input.regulation_type}} ({{input.report_period}}): {{query-compliance-metrics.total}} controls assessed. Findings: {{query-compliance-metrics.findings_count}}.'
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://elevancehealth.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - path: /statements
      operations:
      - name: executeQuery
        method: POST
  - namespace: microsoft-teams
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /teams/channels/messages
      operations:
      - name: sendMessage
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-report-builder.yml

Queries Snowflake for claim denial rates by provider and posts a denial analytics report to the network management Slack channel.

naftiko: '0.5'
info:
  label: Provider Network Claim Denial Analytics
  description: Queries Snowflake for claim denial rates by provider and posts a denial analytics report to the network management Slack channel.
  tags:
  - analytics
  - claims
  - snowflake
  - slack
  - provider-network
capability:
  exposes:
    type: mcp
    namespace: elevance-claim-denial-analytics
    port: 8080
    tools:
    - name: post-claim-denial-report
      description: Retrieves claim denial metrics by provider from Snowflake and posts a summary to the network management Slack channel.
      inputParameters:
      - name: time_period_days
        type: number
        description: Number of days to analyze
        required: true
        in: body
      - name: denial_rate_threshold
        type: number
        description: Denial rate percentage above which providers are flagged
        required: true
        in: body
      steps:
      - name: query-denial-metrics
        call: snowflake.executeQuery
        with:
          query: SELECT provider_npi, provider_name, COUNT(*) AS total_claims, SUM(CASE WHEN status = 'denied' THEN 1 ELSE 0 END) AS denied_claims, ROUND(SUM(CASE WHEN status = 'denied' THEN 1 ELSE 0 END)/COUNT(*)*100,2) AS denial_rate FROM claims.submissions WHERE submission_date >= DATEADD(day, -{{input.time_period_days}}, CURRENT_DATE) GROUP BY provider_npi, provider_name HAVING denial_rate > {{input.denial_rate_threshold}} ORDER BY denial_rate DESC
      - name: post-denial-report
        call: slack.postMessage
        with:
          channel: '#network-management'
          text: 'Claim Denial Report ({{input.time_period_days}} days): {{query-denial-metrics.total}} providers above {{input.denial_rate_threshold}}% denial threshold. Top providers: {{query-denial-metrics.rows}}'
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://elevancehealth.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - path: /statements
      operations:
      - name: executeQuery
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - path: /chat.postMessage
      operations:
      - name: postMessage
        method: POST
Open in Framework → View in Fleet → provider-network-claim-denial-analytics.yml

Retrieves a pending expense report from SAP Concur and routes it for manager approval via Microsoft 365 email.

naftiko: '0.5'
info:
  label: Expense Report Approval Workflow
  description: Retrieves a pending expense report from SAP Concur and routes it for manager approval via Microsoft 365 email.
  tags:
  - finance
  - sap-concur
  - microsoft-365
  - expense-management
  - approval
capability:
  exposes:
    type: mcp
    namespace: elevance-expense-approval
    port: 8080
    tools:
    - name: route-expense-for-approval
      description: Fetches a pending expense report from SAP Concur and sends an approval request to the manager via email.
      inputParameters:
      - name: expense_report_id
        type: string
        description: SAP Concur expense report ID
        required: true
        in: body
      - name: manager_email
        type: string
        description: Manager email address for approval routing
        required: true
        in: body
      steps:
      - name: get-expense-report
        call: sap-concur.getExpenseReport
        with:
          reportId: '{{input.expense_report_id}}'
      - name: send-approval-request
        call: microsoft-365.sendEmail
        with:
          to: '{{input.manager_email}}'
          subject: 'Expense Approval Required: {{get-expense-report.Name}} — ${{get-expense-report.Total}}'
          body: 'Please approve expense report {{input.expense_report_id}} submitted by {{get-expense-report.OwnerName}} for ${{get-expense-report.Total}}. Policy: {{get-expense-report.PolicyName}}'
  consumes:
  - namespace: sap-concur
    type: http
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - path: /expense/reports/{reportId}
      operations:
      - name: getExpenseReport
        method: GET
  - namespace: microsoft-365
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /me/sendMail
      operations:
      - name: sendEmail
        method: POST
Open in Framework → View in Fleet → expense-report-approval-workflow.yml

Queries Snowflake for health plan member claims data and refreshes the executive Power BI dashboard.

naftiko: '0.5'
info:
  label: Member Claims Analytics Dashboard Refresh
  description: Queries Snowflake for health plan member claims data and refreshes the executive Power BI dashboard.
  tags:
  - analytics
  - claims
  - snowflake
  - power-bi
  - health-plan
capability:
  exposes:
    type: mcp
    namespace: elevance-claims-dashboard
    port: 8080
    tools:
    - name: refresh-claims-dashboard
      description: Queries Snowflake for member claims metrics and triggers a Power BI dataset refresh.
      inputParameters:
      - name: report_date
        type: string
        description: Date for the report in YYYY-MM-DD format
        required: true
        in: body
      - name: dataset_id
        type: string
        description: Power BI dataset ID to refresh
        required: true
        in: body
      steps:
      - name: query-claims-metrics
        call: snowflake.executeQuery
        with:
          query: SELECT plan_type, COUNT(*) AS total_claims, SUM(allowed_amount) AS total_allowed, AVG(processing_days) AS avg_processing FROM claims.submissions WHERE submission_date = '{{input.report_date}}' GROUP BY plan_type
      - name: refresh-powerbi
        call: power-bi.refreshDataset
        with:
          datasetId: '{{input.dataset_id}}'
          notifyOption: MailOnFailure
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://elevancehealth.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - path: /statements
      operations:
      - name: executeQuery
        method: POST
  - namespace: power-bi
    type: http
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - path: /datasets/{datasetId}/refreshes
      operations:
      - name: refreshDataset
        method: POST
Open in Framework → View in Fleet → member-claims-analytics-dashboard-refresh.yml

Retrieves unestimated backlog items from Jira and posts a grooming digest to the product team Slack channel.

naftiko: '0.5'
info:
  label: Jira Backlog Grooming Digest
  description: Retrieves unestimated backlog items from Jira and posts a grooming digest to the product team Slack channel.
  tags:
  - jira
  - agile
  - backlog
  - slack
  - product-management
capability:
  exposes:
    type: mcp
    namespace: elevance-backlog-digest
    port: 8080
    tools:
    - name: post-backlog-grooming-digest
      description: Fetches unestimated Jira backlog items and posts a grooming digest to the product Slack channel.
      inputParameters:
      - name: project_key
        type: string
        description: Jira project key
        required: true
        in: body
      steps:
      - name: get-unestimated-backlog
        call: jira.searchIssues
        with:
          jql: project = {{input.project_key}} AND status = Backlog AND story_points is EMPTY ORDER BY priority DESC
          maxResults: 20
      - name: post-backlog-digest
        call: slack.postMessage
        with:
          channel: '#product-backlog'
          text: 'Backlog grooming needed for {{input.project_key}}: {{get-unestimated-backlog.total}} unestimated items. Top items: {{get-unestimated-backlog.issues}}'
  consumes:
  - namespace: jira
    type: http
    baseUri: https://elevancehealth.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - path: /search
      operations:
      - name: searchIssues
        method: GET
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - path: /chat.postMessage
      operations:
      - name: postMessage
        method: POST
Open in Framework → View in Fleet → jira-backlog-grooming-digest.yml

Retrieves at-risk member accounts from Salesforce and posts a daily digest to the member services Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Member Account Health Digest
  description: Retrieves at-risk member accounts from Salesforce and posts a daily digest to the member services Teams channel.
  tags:
  - crm
  - salesforce
  - teams
  - account-health
  - member-services
capability:
  exposes:
    type: mcp
    namespace: elevance-account-health-digest
    port: 8080
    tools:
    - name: post-member-account-health-digest
      description: Queries Salesforce for at-risk member accounts and posts a digest to the member services Teams channel.
      inputParameters:
      - name: health_score_threshold
        type: number
        description: Health score below which accounts are considered at-risk
        required: true
        in: body
      - name: teams_channel
        type: string
        description: Teams channel name to post the digest
        required: true
        in: body
      steps:
      - name: query-at-risk-accounts
        call: salesforce.queryAccounts
        with:
          health_score_lt: '{{input.health_score_threshold}}'
      - name: post-digest
        call: microsoft-teams.sendMessage
        with:
          channel: '{{input.teams_channel}}'
          message: 'Member Account Health Digest: {{query-at-risk-accounts.totalSize}} accounts below threshold. Review required for: {{query-at-risk-accounts.records}}'
  consumes:
  - namespace: salesforce
    type: http
    baseUri: https://elevancehealth.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - path: /query
      operations:
      - name: queryAccounts
        method: GET
  - namespace: microsoft-teams
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /teams/channels/messages
      operations:
      - name: sendMessage
        method: POST
Open in Framework → View in Fleet → salesforce-member-account-health-digest.yml

Publishes a talent acquisition post to the Elevance Health LinkedIn Company Page to support employer brand campaigns.

naftiko: '0.5'
info:
  label: LinkedIn Talent Brand Post Publisher
  description: Publishes a talent acquisition post to the Elevance Health LinkedIn Company Page to support employer brand campaigns.
  tags:
  - recruiting
  - linkedin
  - employer-brand
  - hr
capability:
  exposes:
    type: mcp
    namespace: elevance-linkedin-post
    port: 8080
    tools:
    - name: publish-talent-brand-post
      description: Publishes a LinkedIn company page post for Elevance Health talent brand and recruitment campaigns.
      inputParameters:
      - name: post_text
        type: string
        description: Post copy text
        required: true
        in: body
      - name: media_url
        type: string
        description: Optional image or video URL to attach
        required: false
        in: body
      call: linkedin.createPost
      outputParameters:
      - name: post_id
        mapping: $.id
  consumes:
  - namespace: linkedin
    type: http
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - path: /ugcPosts
      operations:
      - name: createPost
        method: POST
Open in Framework → View in Fleet → linkedin-talent-brand-post-publisher.yml

Provisions a new Elevance Health employee across Workday, ServiceNow, Microsoft 365, and Teams, then notifies the hiring manager.

naftiko: '0.5'
info:
  label: New Employee Onboarding Orchestrator
  description: Provisions a new Elevance Health employee across Workday, ServiceNow, Microsoft 365, and Teams, then notifies the hiring manager.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-365
  - teams
capability:
  exposes:
    type: mcp
    namespace: elevance-employee-onboarding
    port: 8080
    tools:
    - name: onboard-new-employee
      description: Creates the employee record in Workday, opens an IT provisioning ticket in ServiceNow, grants Microsoft 365 licenses, and sends a Teams welcome notification to the hiring manager.
      inputParameters:
      - name: first_name
        type: string
        description: Employee first name
        required: true
        in: body
      - name: last_name
        type: string
        description: Employee last name
        required: true
        in: body
      - name: job_title
        type: string
        description: Job title for the new hire
        required: true
        in: body
      - name: department
        type: string
        description: Department or business unit
        required: true
        in: body
      - name: manager_email
        type: string
        description: Hiring manager email address
        required: true
        in: body
      - name: start_date
        type: string
        description: Start date in YYYY-MM-DD format
        required: true
        in: body
      steps:
      - name: create-workday-employee
        call: workday.createEmployee
        with:
          firstName: '{{input.first_name}}'
          lastName: '{{input.last_name}}'
          jobTitle: '{{input.job_title}}'
          department: '{{input.department}}'
          startDate: '{{input.start_date}}'
      - name: open-it-ticket
        call: servicenow.createIncident
        with:
          short_description: IT provisioning for new hire {{input.first_name}} {{input.last_name}}
          category: request
          assignment_group: IT Onboarding
          employee_id: '{{create-workday-employee.workerId}}'
      - name: grant-m365-license
        call: microsoft-graph.assignLicense
        with:
          userPrincipalName: '{{input.first_name}}.{{input.last_name}}@elevancehealth.com'
          skuId: $secrets.m365_sku_id
      - name: notify-manager
        call: microsoft-teams.sendMessage
        with:
          recipient: '{{input.manager_email}}'
          message: 'Welcome! {{input.first_name}} {{input.last_name}} has been onboarded. Workday ID: {{create-workday-employee.workerId}}. IT ticket: {{open-it-ticket.ticketNumber}}.'
  consumes:
  - namespace: workday
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - path: /workers
      operations:
      - name: createEmployee
        method: POST
  - namespace: servicenow
    type: http
    baseUri: https://elevancehealth.service-now.com/api/now/v1
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - path: /table/incident
      operations:
      - name: createIncident
        method: POST
  - namespace: microsoft-graph
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /users/{userPrincipalName}/assignLicense
      operations:
      - name: assignLicense
        method: POST
  - namespace: microsoft-teams
    type: http
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - path: /chats/sendMessage
      operations:
      - name: sendMessage
        method: POST
Open in Framework → View in Fleet → new-employee-onboarding-orchestrator.yml

Detects a CI/CD pipeline failure in GitHub Actions, creates a Jira bug ticket, and sends a Slack notification to the engineering team.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure to Jira Bug
  description: Detects a CI/CD pipeline failure in GitHub Actions, creates a Jira bug ticket, and sends a Slack notification to the engineering team.
  tags:
  - devops
  - github
  - jira
  - slack
  - ci-cd
capability:
  exposes:
    type: mcp
    namespace: elevance-cicd-failure-response
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Opens a Jira bug for a failed GitHub Actions workflow and alerts the engineering channel in Slack.
      inputParameters:
      - name: workflow_run_id
        type: string
        description: GitHub Actions workflow run ID
        required: true
        in: body
      - name: repo
        type: string
        description: GitHub repository full name (org/repo)
        required: true
        in: body
      - name: jira_project_key
        type: string
        description: Jira project key for the bug ticket
        required: true
        in: body
      steps:
      - name: get-workflow-run
        call: github.getWorkflowRun
        with:
          repo: '{{input.repo}}'
          run_id: '{{input.workflow_run_id}}'
      - name: create-jira-bug
        call: jira.createIssue
        with:
          project: '{{input.jira_project_key}}'
          issuetype: Bug
          summary: 'CI/CD failure: {{get-workflow-run.name}} on {{get-workflow-run.head_branch}}'
          description: 'Workflow run {{input.workflow_run_id}} failed. URL: {{get-workflow-run.html_url}}'
      - name: notify-slack
        call: slack.postMessage
        with:
          channel: '#engineering-alerts'
          text: 'Pipeline failure in {{input.repo}}: {{get-workflow-run.name}}. Jira bug created: {{create-jira-bug.key}}'
  consumes:
  - namespace: github
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - path: /repos/{repo}/actions/runs/{run_id}
      operations:
      - name: getWorkflowRun
        method: GET
  - namespace: jira
    type: http
    baseUri: https://elevancehealth.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - path: /issue
      operations:
      - name: createIssue
        method: POST
  - namespace: slack
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - path: /chat.postMessage
      operations:
      - name: postMessage
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-to-jira-bug.yml

Looks up a new Salesforce lead and enriches the record with LinkedIn company and contact data before syncing back to Salesforce.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment from LinkedIn
  description: Looks up a new Salesforce lead and enriches the record with LinkedIn company and contact data before syncing back to Salesforce.
  tags:
  - crm
  - salesforce
  - linkedin
  - lead-enrichment
  - sales
capability:
  exposes:
    type: mcp
    namespace: elevance-lead-enrichment
    port: 8080
    tools:
    - name: enrich-salesforce-lead
      description: Fetches lead details from Salesforce, queries LinkedIn for company data, and updates the lead record with enriched information.
      inputParameters:
      - name: lead_id
        type: string
        description: Salesforce lead ID
        required: true
        in: body
      steps:
      - name: get-lead
        call: salesforce.getLead
        with:
          leadId: '{{input.lead_id}}'
      - name: lookup-linkedin-company
        call: linkedin.getCompany
        with:
          companyName: '{{get-lead.Company}}'
      - name: update-lead-record
        call: salesforce-update.updateLead
        with:
          leadId: '{{input.lead_id}}'
          linkedin_company_id: '{{lookup-linkedin-company.id}}'
          employee_count: '{{lookup-linkedin-company.employeeCount}}'
          industry: '{{lookup-linkedin-company.industries}}'
  consumes:
  - namespace: salesforce
    type: http
    baseUri: https://elevancehealth.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - path: /sobjects/Lead/{leadId}
      operations:
      - name: getLead
        method: GET
  - namespace: linkedin
    type: http
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - path: /organizations
      operations:
      - name: getCompany
        method: GET
  - namespace: salesforce-update
    type: http
    baseUri: https://elevancehealth.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - path: /sobjects/Lead/{leadId}
      operations:
      - name: updateLead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-enrichment-from-linkedin.yml

Retrieves an open member complaint from Salesforce and escalates it via ServiceNow to the member services team when SLA breach is imminent.

naftiko: '0.5'
info:
  label: Member Complaint Case Escalation
  description: Retrieves an open member complaint from Salesforce and escalates it via ServiceNow to the member services team when SLA breach is imminent.
  tags:
  - member-services
  - salesforce
  - servicenow
  - sla
  - health-plan
capability:
  exposes:
    type: mcp
    namespace: elevance-case-escalation
    port: 8080
    tools:
    - name: escalate-member-complaint
      description: Fetches the Salesforce member case, creates a ServiceNow escalation ticket, and updates the case status.
      inputParameters:
      - name: case_id
        type: string
        description: Salesforce case ID
        required: true
        in: body
      - name: escalation_reason
        type: string
        description: Reason for escalation
        required: true
        in: body
      steps:
      - name: get-salesforce-case
        call: salesforce.getCase
        with:
          caseId: '{{input.case_id}}'
      - name: create-escalation-ticket
        call: servicenow.createIncident
        with:
          short_description: 'Member complaint escalation: {{get-salesforce-case.Subject}}'
          description: '{{get-salesforce-case.Description}} | Reason: {{input.escalation_reason}}'
          urgency: '2'
          assignment_group: Member Services
      - name: update-salesforce-case
        call: salesforce-update.updateCase
        with:
          caseId: '{{input.case_id}}'
          status: Escalated
          escalation_ticket: '{{create-escalation-ticket.ticketNumber}}'
  consumes:
  - namespace: salesforce
    type: http
    baseUri: https://elevancehealth.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - path: /sobjects/Case/{caseId}
      operations:
      - name: getCase
        method: GET
  - namespace: salesforce-update
    type: http
    baseUri: https://elevancehealth.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - path: /sobjects/Case/{caseId}
      operations:
      - name: updateCase
        method: PATCH
  - namespace: servicenow
    type: http
    baseUri: https://elevancehealth.service-now.com/api/now/v1
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - path: /table/incident
      operations:
      - name: createIncident
        method: POST
Open in Framework → View in Fleet → member-complaint-case-escalation.yml

Orchestrates HIV resistance testing by submitting genotype samples, analyzing mutations, generating resistance reports, and notifying clinical teams.

naftiko: '0.5'
info:
  label: HIV Drug Resistance Testing Orchestration
  description: Orchestrates HIV resistance testing by submitting genotype samples, analyzing mutations, generating resistance reports, and notifying clinical teams.
  tags:
  - clinical
  - rd
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: resistance-testing
    port: 8080
    tools:
    - name: process-resistance-test
      description: Given sample ID and patient ID, analyze genotype, identify mutations, generate report, and notify. Use for HIV resistance analysis.
      inputParameters:
      - name: sample_id
        in: body
        type: string
        description: Sample identifier.
      - name: patient_id
        in: body
        type: string
        description: Patient identifier.
      steps:
      - name: analyze-genotype
        type: call
        call: snowflake.execute-query
        with:
          query_name: hiv_genotype_analysis
          params: '{{sample_id}}'
      - name: generate-report
        type: call
        call: snowflake.execute-query
        with:
          query_name: resistance_report
          params: '{{sample_id}},{{analyze-genotype.mutations}}'
      - name: create-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Resistance report: Patient {{patient_id}}'
          category: clinical_lab
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: hiv-clinical
          text: 'Resistance test for patient {{patient_id}}: {{analyze-genotype.mutation_count}} mutations detected. Report task: {{create-task.number}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gilead.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://gilead.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hiv-drug-resistance-testing-orchestration.yml

Retrieves the current status of a New Drug Application from the regulatory tracking system.

naftiko: '0.5'
info:
  label: FDA NDA Submission Status Lookup
  description: Retrieves the current status of a New Drug Application from the regulatory tracking system.
  tags:
  - regulatory
  - clinical
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: get-nda-status
      description: Given an NDA number, return review status, FDA division, and expected PDUFA date. Use when regulatory checks submission progress.
      inputParameters:
      - name: nda_number
        in: body
        type: string
        description: NDA application number.
      call: veeva-vault.get-submission
      with:
        nda_number: '{{nda_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.status
      - name: pdufa_date
        type: string
        mapping: $.data.pdufa_date
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://gilead-regulatory.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: submissions
      path: /objects/submission__c/{{nda_number}}
      inputParameters:
      - name: nda_number
        in: path
      operations:
      - name: get-submission
        method: GET
Open in Framework → View in Fleet → fda-nda-submission-status-lookup.yml

Audits all Okta users for MFA enrollment compliance and posts a non-compliant user list to ServiceNow as a compliance incident.

naftiko: '0.5'
info:
  label: Okta MFA Compliance Audit
  description: Audits all Okta users for MFA enrollment compliance and posts a non-compliant user list to ServiceNow as a compliance incident.
  tags:
  - identity
  - security
  - okta
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: security-compliance
    port: 8080
    tools:
    - name: audit-mfa-compliance
      description: Retrieve all active Okta users, identify those without MFA enrolled, and create a ServiceNow compliance incident with the non-compliant user list.
      inputParameters:
      - name: compliance_threshold
        in: body
        type: number
        description: Maximum allowed percentage of non-MFA users before a P2 incident is opened, e.g. 5.
      steps:
      - name: list-users
        type: call
        call: okta.list-active-users
      - name: create-compliance-incident
        type: call
        call: servicenow.create-compliance-incident
        with:
          short_description: Okta MFA non-compliance detected
          category: security_compliance
          description: Users without MFA exceeds threshold of {{compliance_threshold}}%
  consumes:
  - type: http
    namespace: okta
    baseUri: https://gilead.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: list-active-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gilead.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-compliance-incident
        method: POST
Open in Framework → View in Fleet → okta-mfa-compliance-audit.yml

When an employee changes role in Workday, updates their Okta group memberships and adjusts Salesforce profile permissions accordingly.

naftiko: '0.5'
info:
  label: Workday Role Change and Access Provisioning
  description: When an employee changes role in Workday, updates their Okta group memberships and adjusts Salesforce profile permissions accordingly.
  tags:
  - hr
  - identity
  - workday
  - okta
  - salesforce
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: hr-access
    port: 8080
    tools:
    - name: sync-role-change
      description: Given a Workday employee ID, new job title, and new department, update Okta group memberships and Salesforce profile to match the new role.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee changing roles.
      - name: okta_user_id
        in: body
        type: string
        description: The Okta user ID for group assignment updates.
      - name: new_okta_group_id
        in: body
        type: string
        description: The new Okta group ID to assign based on the new role.
      - name: salesforce_profile_id
        in: body
        type: string
        description: The Salesforce profile ID matching the new job function.
      steps:
      - name: assign-okta-group
        type: call
        call: okta.add-user-to-group
        with:
          user_id: '{{okta_user_id}}'
          group_id: '{{new_okta_group_id}}'
      - name: update-sf-profile
        type: call
        call: salesforce.update-user-profile
        with:
          workday_id: '{{workday_employee_id}}'
          profile_id: '{{salesforce_profile_id}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://gilead.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: add-user-to-group
        method: PUT
  - type: http
    namespace: salesforce
    baseUri: https://gilead.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: users
      path: /sobjects/User/{{workday_id}}
      inputParameters:
      - name: workday_id
        in: path
      operations:
      - name: update-user-profile
        method: PATCH
Open in Framework → View in Fleet → workday-role-change-and-access-provisioning.yml

Detects infrastructure cost anomalies via Datadog metrics, creates a ServiceNow change request for remediation, and posts findings to Microsoft Teams.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Cost Anomaly Responder
  description: Detects infrastructure cost anomalies via Datadog metrics, creates a ServiceNow change request for remediation, and posts findings to Microsoft Teams.
  tags:
  - cloud
  - observability
  - datadog
  - servicenow
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-ops
    port: 8080
    tools:
    - name: respond-to-cost-anomaly
      description: Given a Datadog monitor ID with a cost anomaly alert, fetch the metric details, open a ServiceNow change request, and post remediation steps to Teams.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that detected the cost anomaly.
      - name: resource_type
        in: body
        type: string
        description: The type of cloud resource with the anomaly, e.g. EC2, RDS, GCS.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Cost anomaly: {{resource_type}} — {{get-monitor.name}}'
          category: cloud_cost
          priority: '2'
      - name: notify-team
        type: call
        call: msteams.post-cost-alert
        with:
          channel: cloud-finops
          text: 'Cost anomaly detected on {{resource_type}}. Monitor: {{get-monitor.name}}. Change: {{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: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gilead.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: messages
      path: /teams/finops/channels/general/messages
      operations:
      - name: post-cost-alert
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-cost-anomaly-responder.yml

Retrieves SLO compliance status from Datadog for all production services and posts a weekly compliance digest to the engineering Teams channel.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Report
  description: Retrieves SLO compliance status from Datadog for all production services and posts a weekly compliance digest to the engineering Teams channel.
  tags:
  - observability
  - datadog
  - microsoft-teams
  - slo
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: digest-slo-compliance
      description: Retrieve all SLO statuses from Datadog and post a weekly compliance report to the engineering Teams channel highlighting any breaches.
      inputParameters:
      - name: timeframe
        in: body
        type: string
        description: 'SLO evaluation timeframe: 7d, 30d, or 90d.'
      steps:
      - name: get-slos
        type: call
        call: datadog.list-slos
        with:
          timeframe: '{{timeframe}}'
      - name: post-report
        type: call
        call: msteams.post-slo-report
        with:
          channel: engineering-slo
          text: 'SLO Compliance Report ({{timeframe}}): {{get-slos.compliant}} compliant, {{get-slos.breached}} breached.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo
      operations:
      - name: list-slos
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/engineering/channels/slo/messages
      operations:
      - name: post-slo-report
        method: POST
Open in Framework → View in Fleet → datadog-slo-compliance-report.yml

Checks Snowflake query performance and pipeline task status, raises a Datadog alert for any failing tasks, and creates a Jira incident ticket.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Health Monitor
  description: Checks Snowflake query performance and pipeline task status, raises a Datadog alert for any failing tasks, and creates a Jira incident ticket.
  tags:
  - data-analytics
  - snowflake
  - datadog
  - jira
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: monitor-pipeline-health
      description: Given a Snowflake account and task name, retrieve the task execution history, raise a Datadog alert for failures, and create a Jira incident for any failed runs.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: The Snowflake task name to check execution history for.
      - name: account_identifier
        in: body
        type: string
        description: The Snowflake account identifier, e.g. gilead.us-east-1.
      steps:
      - name: get-task-history
        type: call
        call: snowflake.get-task-history
        with:
          task_name: '{{task_name}}'
      - name: raise-dd-alert
        type: call
        call: datadog.create-event
        with:
          title: 'Snowflake task failure: {{task_name}}'
          text: 'Task {{task_name}} failed. Last run: {{get-task-history.last_run_state}}'
          alert_type: error
      - name: open-jira-incident
        type: call
        call: jira.create-data-incident
        with:
          project_key: DATA
          summary: 'Snowflake task failure: {{task_name}}'
          description: 'Account: {{account_identifier}}

            Task: {{task_name}}

            State: {{get-task-history.last_run_state}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gilead.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/GILEAD_DB/schemas/PIPELINES/tasks/{{task_name}}/executeHistory
      inputParameters:
      - name: task_name
        in: path
      operations:
      - name: get-task-history
        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: jira
    baseUri: https://gilead.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-data-incident
        method: POST
Open in Framework → View in Fleet → snowflake-data-pipeline-health-monitor.yml

When a serious adverse event is reported, logs it in the safety database, notifies pharmacovigilance, and creates a regulatory filing task.

naftiko: '0.5'
info:
  label: Adverse Event Reporting Orchestration
  description: When a serious adverse event is reported, logs it in the safety database, notifies pharmacovigilance, and creates a regulatory filing task.
  tags:
  - clinical
  - regulatory
  - safety
  - oracle
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: report-adverse-event
      description: Given study ID, patient ID, event description, and severity, log event, alert PV, and create filing task. Use when sites report SAEs.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Study identifier.
      - name: patient_id
        in: body
        type: string
        description: Patient identifier.
      - name: event_description
        in: body
        type: string
        description: Event description.
      - name: severity
        in: body
        type: string
        description: Severity level.
      steps:
      - name: log-event
        type: call
        call: oracle-argus.create-case
        with:
          study_id: '{{study_id}}'
          subject_id: '{{patient_id}}'
          description: '{{event_description}}'
          seriousness: '{{severity}}'
      - name: notify-pv
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacovigilance
          text: 'SAE: Study {{study_id}}, Patient {{patient_id}}: {{event_description}} ({{severity}}). Case: {{log-event.case_number}}'
      - name: create-task
        type: call
        call: servicenow.create-task
        with:
          short_description: SAE report - {{log-event.case_number}}
          category: regulatory_filing
          priority: '1'
          assigned_group: Drug_Safety
  consumes:
  - type: http
    namespace: oracle-argus
    baseUri: https://gilead-argus.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_argus_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gilead.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → adverse-event-reporting-orchestration.yml

Audits a GitHub repository for required security settings (branch protection, secret scanning) and files a Jira compliance task if any are missing.

naftiko: '0.5'
info:
  label: GitHub Repository Security Policy Enforcement
  description: Audits a GitHub repository for required security settings (branch protection, secret scanning) and files a Jira compliance task if any are missing.
  tags:
  - security
  - devops
  - github
  - jira
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: repo-governance
    port: 8080
    tools:
    - name: enforce-repo-security-policy
      description: Given a GitHub repository, check branch protection rules and secret scanning status; if non-compliant, create a Jira task for the security team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name to audit, e.g. gilead-sciences/platform.
      - name: default_branch
        in: body
        type: string
        description: The default branch name to check for protection, e.g. main.
      steps:
      - name: check-branch-protection
        type: call
        call: github.get-branch-protection
        with:
          repo: '{{repo}}'
          branch: '{{default_branch}}'
      - name: create-compliance-task
        type: call
        call: jira.create-security-task
        with:
          project_key: SEC
          summary: 'Repo policy violation: {{repo}}'
          description: 'Branch {{default_branch}} protection status: {{check-branch-protection.required_status_checks}}'
  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
  - type: http
    namespace: jira
    baseUri: https://gilead.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-security-task
        method: POST
Open in Framework → View in Fleet → github-repository-security-policy-enforcement.yml

Retrieves metadata for archived clinical data files in Amazon S3.

naftiko: '0.5'
info:
  label: Amazon S3 Clinical Data Archive
  description: Retrieves metadata for archived clinical data files in Amazon S3.
  tags:
  - data
  - cloud
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: data-archive
    port: 8080
    tools:
    - name: get-archive-metadata
      description: Given S3 bucket and prefix, return matching object metadata. Use for archived data lookup.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: S3 bucket.
      - name: prefix
        in: body
        type: string
        description: Key prefix.
      call: s3.list-objects
      with:
        bucket: '{{bucket}}'
        prefix: '{{prefix}}'
      outputParameters:
      - name: object_count
        type: integer
        mapping: $.KeyCount
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_s3_auth
      placement: header
    resources:
    - name: objects
      path: /{{bucket}}?list-type=2&prefix={{prefix}}
      inputParameters:
      - name: bucket
        in: path
      - name: prefix
        in: query
      operations:
      - name: list-objects
        method: GET
Open in Framework → View in Fleet → amazon-s3-clinical-data-archive.yml

Manages formulation changes for antiviral products by creating change controls, checking BOM, and notifying stakeholders.

naftiko: '0.5'
info:
  label: Antiviral Formulation Change Control Orchestration
  description: Manages formulation changes for antiviral products by creating change controls, checking BOM, and notifying stakeholders.
  tags:
  - manufacturing
  - quality
  - regulatory
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: formulation-change
    port: 8080
    tools:
    - name: initiate-formulation-change
      description: Given product code and change description, create change control, check BOM, and notify. Use for antiviral formulation changes.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product code.
      - name: change_description
        in: body
        type: string
        description: Change description.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Formulation change: {{product_code}} - {{change_description}}'
          category: manufacturing
      - name: check-bom
        type: call
        call: sap-erp.get-bom
        with:
          material: '{{product_code}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: formulation-quality
          text: 'Formulation change for {{product_code}}: {{change_description}}. Change: {{create-change.number}}. BOM components: {{check-bom.component_count}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://gilead.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: sap-erp
    baseUri: https://gilead-s4.sap.com/sap/opu/odata/sap/PP_BOM_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: bom
      path: /A_BillOfMaterial('{{material}}')
      inputParameters:
      - name: material
        in: path
      operations:
      - name: get-bom
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → antiviral-formulation-change-control-orchestration.yml

Retrieves current development phase and milestones for an HIV antiviral compound in the pipeline.

naftiko: '0.5'
info:
  label: HIV Antiviral Pipeline Status Lookup
  description: Retrieves current development phase and milestones for an HIV antiviral compound in the pipeline.
  tags:
  - rd
  - clinical
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: pipeline-tracker
    port: 8080
    tools:
    - name: get-compound-status
      description: Given a compound ID, return development phase, next milestone, and timeline. Use when R&D leadership needs HIV pipeline visibility.
      inputParameters:
      - name: compound_id
        in: body
        type: string
        description: Internal compound identifier.
      call: snowflake.execute-query
      with:
        query_name: compound_pipeline_status
        params: '{{compound_id}}'
      outputParameters:
      - name: phase
        type: string
        mapping: $.data[0].phase
      - name: next_milestone
        type: string
        mapping: $.data[0].next_milestone
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gilead.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → hiv-antiviral-pipeline-status-lookup.yml

When a quality event is logged in Veeva Vault QualityDocs, creates a corresponding Jira CAPA task and notifies the quality team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Veeva Quality Event to Jira Tracker
  description: When a quality event is logged in Veeva Vault QualityDocs, creates a corresponding Jira CAPA task and notifies the quality team in Microsoft Teams.
  tags:
  - quality
  - veeva
  - jira
  - microsoft-teams
  - capa
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: create-capa-from-quality-event
      description: Given a Veeva Vault quality event ID, retrieve event details, create a Jira CAPA issue, and notify the quality team in Teams.
      inputParameters:
      - name: quality_event_id
        in: body
        type: string
        description: The Veeva Vault quality event record ID.
      steps:
      - name: get-quality-event
        type: call
        call: veeva.get-quality-event
        with:
          event_id: '{{quality_event_id}}'
      - name: create-capa
        type: call
        call: jira.create-capa
        with:
          project_key: QA
          summary: 'CAPA: {{get-quality-event.title}}'
          description: 'Veeva Event ID: {{quality_event_id}}

            Severity: {{get-quality-event.severity}}

            Category: {{get-quality-event.category}}'
      - name: notify-quality-team
        type: call
        call: msteams.notify-quality
        with:
          channel: quality-ops
          text: 'New CAPA created from Veeva quality event {{quality_event_id}}: {{create-capa.key}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://gilead.veevavault.com/api/v23.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: quality-events
      path: /objects/quality_event__v/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-quality-event
        method: GET
  - type: http
    namespace: jira
    baseUri: https://gilead.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-capa
        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/quality/channels/general/messages
      operations:
      - name: notify-quality
        method: POST
Open in Framework → View in Fleet → veeva-quality-event-to-jira-tracker.yml

On a critical Datadog alert, creates a ServiceNow P1 incident, pages the on-call team via PagerDuty, and posts context to Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Incident Response Handler
  description: On a critical Datadog alert, creates a ServiceNow P1 incident, pages the on-call team via PagerDuty, and posts context to Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - datadog
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog alert ID and monitor name, create a ServiceNow P1 incident, trigger a PagerDuty incident, and notify the Microsoft Teams ops channel.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert or event ID triggering the incident.
      - name: monitor_name
        in: body
        type: string
        description: The name of the Datadog monitor that fired.
      - name: severity
        in: body
        type: string
        description: Alert severity, e.g. critical, high, medium.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-p1
        with:
          short_description: 'Critical alert: {{monitor_name}}'
          impact: '1'
          urgency: '1'
          description: Datadog alert {{alert_id}} fired for monitor {{monitor_name}}
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1: {{monitor_name}}'
          service_id: $secrets.pagerduty_service_id
          body: 'ServiceNow: {{create-incident.number}}'
      - name: notify-teams
        type: call
        call: msteams.post-alert
        with:
          channel: it-ops-alerts
          text: 'P1 Incident: {{monitor_name}} | SN: {{create-incident.number}} | PD: {{page-oncall.id}} | Alert: {{alert_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://gilead.service-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
        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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/it-ops/channels/general/messages
      operations:
      - name: post-alert
        method: POST
Open in Framework → View in Fleet → it-incident-response-handler.yml

Retrieves submitted expense reports from SAP Concur, flags policy violations using Anthropic, and creates ServiceNow audit tasks for out-of-policy items.

naftiko: '0.5'
info:
  label: Concur Expense Report Audit
  description: Retrieves submitted expense reports from SAP Concur, flags policy violations using Anthropic, and creates ServiceNow audit tasks for out-of-policy items.
  tags:
  - finance
  - expense-management
  - sap-concur
  - anthropic
  - servicenow
  - audit
capability:
  exposes:
  - type: mcp
    namespace: expense-audit
    port: 8080
    tools:
    - name: audit-expense-reports
      description: Given a date range, retrieve expense reports from SAP Concur, use Anthropic to flag policy violations, and create ServiceNow audit tasks for non-compliant items.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date for expense report query in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date for expense report query in YYYY-MM-DD format.
      steps:
      - name: get-expense-reports
        type: call
        call: concur.list-expense-reports
        with:
          startDate: '{{start_date}}'
          endDate: '{{end_date}}'
      - name: flag-violations
        type: call
        call: anthropic.analyze-expenses
        with:
          model: claude-opus-4-5
          prompt: 'Review these expense reports and identify policy violations: {{get-expense-reports.reports}}'
      - name: create-audit-task
        type: call
        call: servicenow.create-audit-task
        with:
          short_description: 'Expense audit violations: {{start_date}} to {{end_date}}'
          description: '{{flag-violations.violations_summary}}'
  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/reportdigests
      operations:
      - name: list-expense-reports
        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: analyze-expenses
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gilead.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/u_audit_task
      operations:
      - name: create-audit-task
        method: POST
Open in Framework → View in Fleet → concur-expense-report-audit.yml

Retrieves the latest version and audit trail of a regulatory document from Veeva Vault for compliance tracking.

naftiko: '0.5'
info:
  label: Veeva Vault Document Version Tracker
  description: Retrieves the latest version and audit trail of a regulatory document from Veeva Vault for compliance tracking.
  tags:
  - regulatory
  - compliance
  - veeva
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: veeva-docs
    port: 8080
    tools:
    - name: get-document-version
      description: Given a Veeva Vault document ID, return the current version, status, and last-modified audit trail for compliance reporting.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault document ID to look up.
      call: veeva.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: version
        type: string
        mapping: $.data[0].major_version_number__v
      - name: status
        type: string
        mapping: $.data[0].status__v
      - name: modified_date
        type: string
        mapping: $.data[0].modified_date__v
      - name: modified_by
        type: string
        mapping: $.data[0].modified_by__v
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://gilead.veevavault.com/api/v23.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-version-tracker.yml

Retrieves a pending SAP Concur travel request, validates it against travel policy via Anthropic, and routes it for approval in ServiceNow.

naftiko: '0.5'
info:
  label: SAP Concur Travel Request Approval
  description: Retrieves a pending SAP Concur travel request, validates it against travel policy via Anthropic, and routes it for approval in ServiceNow.
  tags:
  - finance
  - travel
  - sap-concur
  - servicenow
  - approval
capability:
  exposes:
  - type: mcp
    namespace: travel-ops
    port: 8080
    tools:
    - name: route-travel-approval
      description: Given a SAP Concur travel request ID, validate the request against policy using Anthropic and create a ServiceNow approval task for the finance team.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The SAP Concur travel request ID to review and route.
      steps:
      - name: get-travel-request
        type: call
        call: concur.get-travel-request
        with:
          request_id: '{{request_id}}'
      - name: validate-policy
        type: call
        call: anthropic.validate-travel
        with:
          model: claude-opus-4-5
          prompt: 'Review this travel request for policy compliance: {{get-travel-request.details}}'
      - name: create-approval
        type: call
        call: servicenow.create-travel-approval
        with:
          short_description: 'Travel approval: {{get-travel-request.traveler_name}} — {{get-travel-request.destination}}'
          policy_notes: '{{validate-policy.compliance_notes}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: travel-requests
      path: /travelrequest/requests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-travel-request
        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: validate-travel
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gilead.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: approvals
      path: /table/sysapproval_approver
      operations:
      - name: create-travel-approval
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-request-approval.yml

Retrieves a pending invoice from SAP Ariba, validates it against the SAP purchase order, and routes it for approval in ServiceNow.

naftiko: '0.5'
info:
  label: Invoice Processing and Approval Routing
  description: Retrieves a pending invoice from SAP Ariba, validates it against the SAP purchase order, and routes it for approval in ServiceNow.
  tags:
  - finance
  - procurement
  - sap-ariba
  - servicenow
  - approval
capability:
  exposes:
  - type: mcp
    namespace: invoice-ops
    port: 8080
    tools:
    - name: process-invoice
      description: Given an Ariba invoice ID and PO number, validate the invoice against SAP and create a ServiceNow approval task for the finance team.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The SAP Ariba invoice document ID to process.
      - name: po_number
        in: body
        type: string
        description: The related SAP purchase order number for validation.
      steps:
      - name: get-invoice
        type: call
        call: ariba.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-po
        type: call
        call: sap.get-po-header
        with:
          po_number: '{{po_number}}'
      - name: create-approval
        type: call
        call: servicenow.create-approval-task
        with:
          short_description: Invoice {{invoice_id}} approval — PO {{po_number}}
          amount: '{{get-invoice.total_amount}}'
          vendor: '{{get-invoice.vendor_name}}'
          po_status: '{{get-po.status}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap
    baseUri: https://gilead-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-header
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gilead.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: approval-tasks
      path: /table/sysapproval_approver
      operations:
      - name: create-approval-task
        method: POST
Open in Framework → View in Fleet → invoice-processing-and-approval-routing.yml

When a new Salesforce lead is created, enriches it with company data from ZoomInfo and updates the lead record with enriched fields.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment and Qualification
  description: When a new Salesforce lead is created, enriches it with company data from ZoomInfo and updates the lead record with enriched fields.
  tags:
  - sales
  - crm
  - salesforce
  - zoominfo
  - lead-enrichment
capability:
  exposes:
  - type: mcp
    namespace: crm-sales
    port: 8080
    tools:
    - name: enrich-lead
      description: Given a Salesforce lead ID and company name, fetch company intelligence from ZoomInfo and update the Salesforce lead record with enriched data.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID to enrich.
      - name: company_name
        in: body
        type: string
        description: The company name to look up in ZoomInfo.
      steps:
      - name: get-company-data
        type: call
        call: zoominfo.search-company
        with:
          company_name: '{{company_name}}'
      - name: update-lead
        type: call
        call: salesforce.update-lead
        with:
          lead_id: '{{lead_id}}'
          annual_revenue: '{{get-company-data.revenue}}'
          number_of_employees: '{{get-company-data.employee_count}}'
          industry: '{{get-company-data.industry}}'
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://gilead.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-lead-enrichment-and-qualification.yml

Retrieves GitHub Advanced Security code scanning alerts for a repository and creates a prioritized Jira security backlog with critical findings.

naftiko: '0.5'
info:
  label: GitHub Security Scanning Summary
  description: Retrieves GitHub Advanced Security code scanning alerts for a repository and creates a prioritized Jira security backlog with critical findings.
  tags:
  - security
  - devops
  - github
  - jira
  - code-scanning
capability:
  exposes:
  - type: mcp
    namespace: security-devops
    port: 8080
    tools:
    - name: sync-security-alerts-to-jira
      description: Given a GitHub repository, fetch all open critical and high code scanning alerts and create corresponding Jira security issues for remediation tracking.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. gilead-sciences/platform.
      - name: severity_filter
        in: body
        type: string
        description: 'Minimum severity to import: critical, high, or medium.'
      steps:
      - name: get-alerts
        type: call
        call: github.list-code-scanning-alerts
        with:
          repo: '{{repo}}'
          severity: '{{severity_filter}}'
      - name: create-security-issues
        type: call
        call: jira.create-security-backlog
        with:
          project_key: SEC
          summary: 'Security alerts in {{repo}}: {{get-alerts.total}} findings'
          description: 'Severity: {{severity_filter}}

            Top finding: {{get-alerts.top_rule}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: code-scanning-alerts
      path: /repos/{{repo}}/code-scanning/alerts
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-code-scanning-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://gilead.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-security-backlog
        method: POST
Open in Framework → View in Fleet → github-security-scanning-summary.yml

Given a new adverse event report, extracts key clinical data via Anthropic, cross-references with Veeva Vault safety database, and creates a Jira triage task.

naftiko: '0.5'
info:
  label: Drug Safety Signal Triage with AI
  description: Given a new adverse event report, extracts key clinical data via Anthropic, cross-references with Veeva Vault safety database, and creates a Jira triage task.
  tags:
  - pharmacovigilance
  - safety
  - anthropic
  - veeva
  - jira
  - ai
capability:
  exposes:
  - type: mcp
    namespace: safety-ops
    port: 8080
    tools:
    - name: triage-adverse-event
      description: Given an adverse event report text, use Anthropic to extract structured clinical signals, cross-reference with Veeva safety data, and create a Jira triage task for the pharmacovigilance team.
      inputParameters:
      - name: report_text
        in: body
        type: string
        description: The raw text of the adverse event report to triage.
      - name: product_name
        in: body
        type: string
        description: The Gilead product name referenced in the report.
      steps:
      - name: extract-signals
        type: call
        call: anthropic.extract-safety-signals
        with:
          model: claude-opus-4-5
          prompt: 'Extract adverse event signals from this pharmacovigilance report for {{product_name}}: {{report_text}}'
      - name: search-safety-db
        type: call
        call: veeva.search-safety-cases
        with:
          product_name: '{{product_name}}'
          signal: '{{extract-signals.primary_signal}}'
      - name: create-triage-task
        type: call
        call: jira.create-triage-issue
        with:
          project_key: PVGT
          summary: 'AE Triage: {{product_name}} — {{extract-signals.primary_signal}}'
          description: 'Signal: {{extract-signals.primary_signal}}

            Severity: {{extract-signals.severity}}

            Related cases: {{search-safety-db.case_count}}'
  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: extract-safety-signals
        method: POST
  - type: http
    namespace: veeva
    baseUri: https://gilead.veevavault.com/api/v23.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: safety-cases
      path: /objects/safety_case__v
      operations:
      - name: search-safety-cases
        method: GET
  - type: http
    namespace: jira
    baseUri: https://gilead.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-triage-issue
        method: POST
Open in Framework → View in Fleet → drug-safety-signal-triage-with-ai.yml

When an employee departure is recorded in Workday, deactivates their Okta account, revokes Salesforce access, and closes all open ServiceNow tickets assigned to them.

naftiko: '0.5'
info:
  label: Employee Offboarding Automation
  description: When an employee departure is recorded in Workday, deactivates their Okta account, revokes Salesforce access, and closes all open ServiceNow tickets assigned to them.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - servicenow
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a departing employee's Workday ID, deactivate their Okta account, remove Salesforce access, and close open ServiceNow tickets.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: okta_user_id
        in: body
        type: string
        description: The Okta user ID to deactivate, e.g. 00u1abc2defGHI3jk.
      steps:
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          user_id: '{{okta_user_id}}'
      - name: revoke-salesforce
        type: call
        call: salesforce.freeze-user
        with:
          workday_id: '{{workday_employee_id}}'
      - name: close-tickets
        type: call
        call: servicenow.close-user-tickets
        with:
          assigned_to: '{{workday_employee_id}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://gilead.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: salesforce
    baseUri: https://gilead.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: users
      path: /sobjects/User/{{workday_id}}
      inputParameters:
      - name: workday_id
        in: path
      operations:
      - name: freeze-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://gilead.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: close-user-tickets
        method: PATCH
Open in Framework → View in Fleet → employee-offboarding-automation.yml

Enrolls patients in Gilead access programs by verifying eligibility, creating enrollment records, notifying case managers, and updating Salesforce.

naftiko: '0.5'
info:
  label: Patient Access Program Enrollment Orchestration
  description: Enrolls patients in Gilead access programs by verifying eligibility, creating enrollment records, notifying case managers, and updating Salesforce.
  tags:
  - commercial
  - clinical
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: patient-access
    port: 8080
    tools:
    - name: enroll-patient
      description: Given patient ID and program, verify eligibility, create enrollment, and notify. Use for patient access program enrollments.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: Patient identifier.
      - name: program_name
        in: body
        type: string
        description: Access program name.
      steps:
      - name: verify-eligibility
        type: call
        call: salesforce.check-eligibility
        with:
          patient_id: '{{patient_id}}'
          program: '{{program_name}}'
      - name: create-enrollment
        type: call
        call: salesforce.create-enrollment
        with:
          patient_id: '{{patient_id}}'
          program: '{{program_name}}'
      - name: create-case
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Access enrollment: {{patient_id}} - {{program_name}}'
          category: patient_access
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: patient-access
          text: 'Patient {{patient_id}} enrolled in {{program_name}}. Eligible: {{verify-eligibility.eligible}}. Case: {{create-case.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gilead.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: eligibility
      path: /sobjects/Patient_Access__c
      operations:
      - name: check-eligibility
        method: GET
      - name: create-enrollment
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gilead.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-access-program-enrollment-orchestration.yml

Initiates the annual performance review cycle in Workday by creating review tasks for all active employees and notifying managers in Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Launcher
  description: Initiates the annual performance review cycle in Workday by creating review tasks for all active employees and notifying managers in Microsoft Teams.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: launch-review-cycle
      description: Given a review cycle name and due date, create performance review tasks in Workday for all active employees and send manager notifications via Teams.
      inputParameters:
      - name: cycle_name
        in: body
        type: string
        description: The performance review cycle name, e.g. 2026 Annual Review.
      - name: due_date
        in: body
        type: string
        description: Due date for review completion in YYYY-MM-DD format.
      steps:
      - name: create-review-cycle
        type: call
        call: workday.create-review-event
        with:
          cycle_name: '{{cycle_name}}'
          due_date: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams.broadcast-review-launch
        with:
          channel: people-managers
          text: 'Performance review cycle ''{{cycle_name}}'' is now open. Completion due: {{due_date}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-events
      path: /gilead-sciences/performanceReviews
      operations:
      - name: create-review-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/hr/channels/managers/messages
      operations:
      - name: broadcast-review-launch
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-launcher.yml

Retrieves all user-application assignments from Okta for a specific application and generates an access review report posted to the security team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Okta Application Access Review
  description: Retrieves all user-application assignments from Okta for a specific application and generates an access review report posted to the security team in Microsoft Teams.
  tags:
  - identity
  - security
  - okta
  - microsoft-teams
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-app-access-review
      description: Given an Okta application ID, list all users with access and post a review summary to the security Teams channel for quarterly access certification.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Okta application ID to review user access for.
      - name: app_name
        in: body
        type: string
        description: Human-readable application name for the report, e.g. Salesforce.
      steps:
      - name: list-app-users
        type: call
        call: okta.list-app-users
        with:
          app_id: '{{app_id}}'
      - name: post-review
        type: call
        call: msteams.post-access-review
        with:
          channel: security-reviews
          text: 'Access review for {{app_name}}: {{list-app-users.total}} users have access. Review required by end of quarter.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://gilead.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/security/channels/reviews/messages
      operations:
      - name: post-access-review
        method: POST
Open in Framework → View in Fleet → okta-application-access-review.yml

Runs a data quality validation query on Snowflake clinical trial data and posts the results to the data engineering team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Clinical Data Quality Check
  description: Runs a data quality validation query on Snowflake clinical trial data and posts the results to the data engineering team in Microsoft Teams.
  tags:
  - data-analytics
  - clinical-trials
  - snowflake
  - microsoft-teams
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-ops
    port: 8080
    tools:
    - name: run-clinical-data-quality
      description: Given a Snowflake database and table name containing clinical trial data, execute a data quality check and post the completeness and anomaly report to Teams.
      inputParameters:
      - name: database
        in: body
        type: string
        description: The Snowflake database name containing clinical trial data.
      - name: table_name
        in: body
        type: string
        description: The Snowflake table to run quality checks against.
      steps:
      - name: run-quality-query
        type: call
        call: snowflake.execute-statement
        with:
          database: '{{database}}'
          statement: SELECT COUNT(*) as total, COUNT_IF(patient_id IS NULL) as missing_ids FROM {{table_name}}
      - name: post-results
        type: call
        call: msteams.post-quality-report
        with:
          channel: clinical-data-eng
          text: 'Data quality check on {{table_name}}: Total={{run-quality-query.total}}, Missing IDs={{run-quality-query.missing_ids}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gilead.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/data-engineering/channels/clinical/messages
      operations:
      - name: post-quality-report
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-data-quality-check.yml

When a Salesforce opportunity advances to Closed-Won, creates a Jira project epic for the customer onboarding workstream.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Stage Sync to Jira
  description: When a Salesforce opportunity advances to Closed-Won, creates a Jira project epic for the customer onboarding workstream.
  tags:
  - sales
  - crm
  - salesforce
  - jira
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: sync-opportunity-to-jira
      description: Given a Salesforce opportunity ID that has reached Closed-Won, create a Jira epic for the customer onboarding workstream and link back the epic key to the Salesforce opportunity.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce Opportunity record ID to sync.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-epic
        type: call
        call: jira.create-epic
        with:
          project_key: CS
          summary: 'Customer Onboarding: {{get-opportunity.account_name}}'
          description: 'Salesforce Opp: {{opportunity_id}} | Value: {{get-opportunity.amount}}'
      - name: update-opportunity
        type: call
        call: salesforce-update.patch-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          jira_epic_key: '{{create-epic.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gilead.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://gilead.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-epic
        method: POST
  - type: http
    namespace: salesforce-update
    baseUri: https://gilead.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: patch-opportunity
        method: PATCH
Open in Framework → View in Fleet → salesforce-opportunity-stage-sync-to-jira.yml

Compiles a sprint planning digest from Jira by fetching open issues for a project and posting a prioritized summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Jira Sprint Planning Digest
  description: Compiles a sprint planning digest from Jira by fetching open issues for a project and posting a prioritized summary to Microsoft Teams.
  tags:
  - devops
  - jira
  - microsoft-teams
  - reporting
  - sprint-planning
capability:
  exposes:
  - type: mcp
    namespace: devops-reporting
    port: 8080
    tools:
    - name: digest-sprint-backlog
      description: Given a Jira project key and sprint name, retrieve open issues and post a prioritized sprint planning digest to the engineering Teams channel.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key to pull sprint issues from, e.g. PLAT.
      - name: sprint_name
        in: body
        type: string
        description: The sprint name to filter issues, e.g. Sprint 42.
      - name: teams_channel
        in: body
        type: string
        description: The Microsoft Teams channel name to post the digest to.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND sprint='{{sprint_name}}' AND status!=Done
      - name: post-digest
        type: call
        call: msteams.post-digest
        with:
          channel: '{{teams_channel}}'
          text: 'Sprint digest for {{project_key}} — {{sprint_name}}: {{get-sprint-issues.total}} open issues.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://gilead.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /search
      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/engineering/channels/general/messages
      operations:
      - name: post-digest
        method: POST
Open in Framework → View in Fleet → jira-sprint-planning-digest.yml

On a temperature excursion alert, queries the IoT sensor data, looks up the affected vaccine lot in SAP, quarantines the lot, opens a ServiceNow incident, and notifies the supply chain team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Vaccine Cold Chain Temperature Breach Orchestrator
  description: On a temperature excursion alert, queries the IoT sensor data, looks up the affected vaccine lot in SAP, quarantines the lot, opens a ServiceNow incident, and notifies the supply chain team in Microsoft Teams.
  tags:
  - supply-chain
  - cold-chain
  - vaccines
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cold-chain
    port: 8080
    tools:
    - name: handle-temperature-breach
      description: Given an IoT sensor alert for a temperature excursion, orchestrate the cold chain breach response including lot quarantine and notification.
      inputParameters:
      - name: sensor_id
        in: body
        type: string
        description: The IoT sensor identifier that triggered the alert.
      - name: lot_number
        in: body
        type: string
        description: The vaccine lot number in the affected storage.
      - name: recorded_temp
        in: body
        type: number
        description: The recorded temperature in Celsius.
      - name: threshold_temp
        in: body
        type: number
        description: The acceptable threshold temperature in Celsius.
      steps:
      - name: get-lot-details
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{lot_number}}'
      - name: quarantine-lot
        type: call
        call: sap.update-batch-status
        with:
          batch_number: '{{lot_number}}'
          status: QUARANTINED
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cold Chain Breach: Lot {{lot_number}} — Sensor {{sensor_id}}'
          category: cold_chain_excursion
          priority: '1'
          assigned_group: Supply_Chain_Quality
          description: 'Temperature excursion detected. Sensor: {{sensor_id}}. Recorded: {{recorded_temp}}C (threshold: {{threshold_temp}}C). Lot: {{lot_number}} ({{get-lot-details.material}}). Lot quarantined. Quantity affected: {{get-lot-details.quantity}} {{get-lot-details.uom}}.'
      - name: notify-supply-chain
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-alerts
          text: 'COLD CHAIN BREACH: Sensor {{sensor_id}} recorded {{recorded_temp}}C (limit {{threshold_temp}}C). Lot {{lot_number}} ({{get-lot-details.material}}) QUARANTINED. Incident: {{open-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://gsk-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: batches
      path: /A_Batch('{{batch_number}}')
      inputParameters:
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
      - name: update-batch-status
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/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/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vaccine-cold-chain-temperature-breach-orchestrator.yml

Queries Oracle Cloud inventory for current on-hand quantity of a pharmaceutical material at a specified warehouse location.

naftiko: '0.5'
info:
  label: Oracle Cloud Inventory Level Check
  description: Queries Oracle Cloud inventory for current on-hand quantity of a pharmaceutical material at a specified warehouse location.
  tags:
  - supply-chain
  - inventory
  - oracle-cloud
  - warehouse
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-inventory-level
      description: Check on-hand inventory for a material at a given warehouse in Oracle Cloud.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The material or item number.
      - name: warehouse_code
        in: body
        type: string
        description: The warehouse or plant code.
      call: oracle.get-onhand
      with:
        material_number: '{{material_number}}'
        warehouse_code: '{{warehouse_code}}'
      outputParameters:
      - name: on_hand_qty
        type: number
        mapping: $.items[0].OnhandQuantity
      - name: uom
        type: string
        mapping: $.items[0].UOMCode
      - name: lot_number
        type: string
        mapping: $.items[0].LotNumber
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://gsk-cloud.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: inventory
      path: /inventoryOnhandBalances?q=ItemNumber={{material_number}};Subinventory={{warehouse_code}}
      inputParameters:
      - name: material_number
        in: path
      - name: warehouse_code
        in: path
      operations:
      - name: get-onhand
        method: GET
Open in Framework → View in Fleet → oracle-cloud-inventory-level-check.yml

Generates KPI digest at GSK from Snowflake, Oracle, Power BI, and email.

naftiko: '0.5'
info:
  label: Weekly KPI Digest Pipeline
  description: Generates KPI digest at GSK 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 GSK.
      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://gsk.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.gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → weekly-kpi-digest-pipeline.yml

Checks Okta user at GSK.

naftiko: '0.5'
info:
  label: Okta User Check
  description: Checks Okta user at GSK.
  tags:
  - identity
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: okta-user
    port: 8080
    tools:
    - name: check-user
      description: Check user at GSK.
      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://gsk.com.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-check.yml

Routes changes at GSK through ServiceNow and CAB approval.

naftiko: '0.5'
info:
  label: Change Management Pipeline
  description: Routes changes at GSK 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 GSK.
      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://gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → change-management-pipeline.yml

Retrieves SharePoint metadata at GSK.

naftiko: '0.5'
info:
  label: SharePoint File Metadata
  description: Retrieves SharePoint metadata at GSK.
  tags:
  - document-management
  - sharepoint
  - collaboration
capability:
  exposes:
  - type: mcp
    namespace: sp-docs
    port: 8080
    tools:
    - name: get-file
      description: Look up file at GSK.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Site ID.
      - name: file_path
        in: body
        type: string
        description: Path.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        path: '{{file_path}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: size
        type: number
        mapping: $.size
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/root:/{{path}}
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-file-metadata.yml

Analyzes feedback at GSK via surveys, AI sentiment, and Power BI.

naftiko: '0.5'
info:
  label: Customer Feedback Pipeline
  description: Analyzes feedback at GSK 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 GSK.
      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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.survey_token
    resources:
    - name: responses
      path: /surveys/{{id}}/responses
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get
        method: GET
  - type: http
    namespace: ai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: analyze
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → customer-feedback-pipeline.yml

Checks license compliance at GSK via scanning, entitlements, and procurement.

naftiko: '0.5'
info:
  label: License Compliance Pipeline
  description: Checks license compliance at GSK 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 GSK.
      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.gsk.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.gsk.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.gsk.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://gsk.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
Open in Framework → View in Fleet → license-compliance-pipeline.yml

When a manufacturing deviation is detected, creates a ServiceNow deviation record, notifies the quality team in Microsoft Teams, looks up the affected batch in SAP, and logs the deviation in the Confluence quality log.

naftiko: '0.5'
info:
  label: GMP Deviation Workflow
  description: When a manufacturing deviation is detected, creates a ServiceNow deviation record, notifies the quality team in Microsoft Teams, looks up the affected batch in SAP, and logs the deviation in the Confluence quality log.
  tags:
  - manufacturing
  - quality
  - gmp
  - servicenow
  - microsoft-teams
  - sap
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: gmp-deviation
    port: 8080
    tools:
    - name: process-deviation
      description: Given deviation details from the manufacturing floor, create a quality record, notify the quality team, retrieve the affected batch, and log to Confluence.
      inputParameters:
      - name: deviation_description
        in: body
        type: string
        description: Description of the manufacturing deviation.
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number affected.
      - name: equipment_tag
        in: body
        type: string
        description: The equipment tag where the deviation occurred.
      - name: severity
        in: body
        type: string
        description: Deviation severity (Critical, Major, Minor).
      steps:
      - name: get-batch
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{batch_number}}'
      - name: create-deviation-record
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'GMP Deviation: {{equipment_tag}} — Batch {{batch_number}}'
          category: gmp_deviation
          priority: '{{severity}}'
          assigned_group: Quality_Assurance
          description: '{{deviation_description}}

            Batch: {{batch_number}} (Material: {{get-batch.material}}, Status: {{get-batch.status}})

            Equipment: {{equipment_tag}}

            Severity: {{severity}}'
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-deviations
          text: 'GMP Deviation ({{severity}}): {{equipment_tag}}, Batch {{batch_number}} ({{get-batch.material}}). ServiceNow: {{create-deviation-record.number}}. {{deviation_description}}'
      - name: log-to-confluence
        type: call
        call: confluence.create-page
        with:
          space_key: QA
          title: Deviation {{create-deviation-record.number}} — {{batch_number}}
          body: 'Deviation: {{deviation_description}}

            Severity: {{severity}}

            Batch: {{batch_number}}

            Material: {{get-batch.material}}

            Equipment: {{equipment_tag}}

            ServiceNow: {{create-deviation-record.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://gsk-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: batches
      path: /A_Batch('{{batch_number}}')
      inputParameters:
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/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/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://gsk-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → gmp-deviation-workflow.yml

Plans capacity at GSK by collecting utilization and forecasting.

naftiko: '0.5'
info:
  label: Capacity Planning Pipeline
  description: Plans capacity at GSK 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 GSK.
      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.gsk.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.gsk.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://gsk.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → capacity-planning-pipeline.yml

Checks SAP PO at GSK.

naftiko: '0.5'
info:
  label: SAP PO Check
  description: Checks SAP PO at GSK.
  tags:
  - procurement
  - sap
  - purchase-orders
capability:
  exposes:
  - type: mcp
    namespace: sap-po
    port: 8080
    tools:
    - name: get-po
      description: Check PO at GSK.
      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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: purchase-orders
      path: /purchase-orders/{{po_number}}
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-po-check.yml

Checks Power BI refresh at GSK.

naftiko: '0.5'
info:
  label: Power BI Refresh Check
  description: Checks Power BI refresh at GSK.
  tags:
  - analytics
  - power-bi
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: pbi-refresh
    port: 8080
    tools:
    - name: check-refresh
      description: Check refresh at GSK.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Dataset ID.
      call: power-bi.get-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh
        method: GET
Open in Framework → View in Fleet → power-bi-refresh-check.yml

Checks release readiness at GSK.

naftiko: '0.5'
info:
  label: Release Readiness Pipeline
  description: Checks release readiness at GSK.
  tags:
  - release-management
  - devops
  - quality
capability:
  exposes:
  - type: mcp
    namespace: release-ready
    port: 8080
    tools:
    - name: check-release
      description: Check release at GSK.
      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/gsk.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.gsk.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.gsk.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://gsk.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → release-readiness-pipeline.yml

When a new adverse event is reported, creates a case in the safety database, opens a ServiceNow quality ticket, notifies the medical monitor in Microsoft Teams, and uploads the source document to SharePoint.

naftiko: '0.5'
info:
  label: Clinical Trial Adverse Event Intake Orchestrator
  description: When a new adverse event is reported, creates a case in the safety database, opens a ServiceNow quality ticket, notifies the medical monitor in Microsoft Teams, and uploads the source document to SharePoint.
  tags:
  - pharmacovigilance
  - drug-safety
  - clinical-trials
  - servicenow
  - microsoft-teams
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: ae-intake
    port: 8080
    tools:
    - name: process-adverse-event
      description: Given adverse event details from a clinical trial site, create a safety case, open a quality ticket, notify the medical monitor, and archive the source document.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier.
      - name: subject_id
        in: body
        type: string
        description: The subject/patient identifier.
      - name: event_term
        in: body
        type: string
        description: The adverse event preferred term (MedDRA).
      - name: seriousness
        in: body
        type: string
        description: Seriousness classification (Serious, Non-Serious).
      - name: reporter_email
        in: body
        type: string
        description: The email of the site reporter.
      steps:
      - name: create-safety-case
        type: call
        call: safetydb.create-case
        with:
          study_id: '{{study_id}}'
          subject_id: '{{subject_id}}'
          event_term: '{{event_term}}'
          seriousness: '{{seriousness}}'
      - name: open-quality-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AE Report: {{event_term}} — Study {{study_id}} Subject {{subject_id}}'
          category: pharmacovigilance
          assigned_group: PV_Safety_Operations
          description: 'Adverse event {{event_term}} ({{seriousness}}) reported for subject {{subject_id}} in study {{study_id}}. Safety case: {{create-safety-case.case_id}}.'
      - name: notify-medical-monitor
        type: call
        call: msteams.send-message
        with:
          channel_id: pv-medical-monitors
          text: 'New {{seriousness}} AE in {{study_id}}: {{event_term}} for subject {{subject_id}}. Safety case {{create-safety-case.case_id}}. ServiceNow ticket: {{open-quality-ticket.number}}.'
      - name: archive-source
        type: call
        call: sharepoint.create-file
        with:
          site_id: pv_archive_site
          folder_path: AE_Reports/{{study_id}}/{{subject_id}}/{{create-safety-case.case_id}}
  consumes:
  - type: http
    namespace: safetydb
    baseUri: https://gsk-safety.veeva.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_safety_token
    resources:
    - name: cases
      path: /objects/adverse_event
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/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/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        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-file
        method: PUT
Open in Framework → View in Fleet → clinical-trial-adverse-event-intake-orchestrator.yml

Optimizes cloud costs at GSK via Azure, FinOps, Jira, and Power BI.

naftiko: '0.5'
info:
  label: Cloud Cost Optimization Pipeline
  description: Optimizes cloud costs at GSK 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 GSK.
      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.gsk.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://gsk.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → cloud-cost-optimization-pipeline.yml

Checks GitHub repo at GSK.

naftiko: '0.5'
info:
  label: GitHub Repo Check
  description: Checks GitHub repo at GSK.
  tags:
  - devops
  - github
  - version-control
capability:
  exposes:
  - type: mcp
    namespace: gh-repo
    port: 8080
    tools:
    - name: get-branch
      description: Check branch at GSK.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repo.
      - name: branch
        in: body
        type: string
        description: Branch.
      call: github.get-branch
      with:
        repo: '{{repo}}'
        branch: '{{branch}}'
      outputParameters:
      - name: sha
        type: string
        mapping: $.commit.sha
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branches
      path: /repos/org/{{repo}}/branches/{{branch}}
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch
        method: GET
Open in Framework → View in Fleet → github-repo-check.yml

Tracks ML model deployment on Azure Databricks by checking the model registry, running validation, creating a ServiceNow release record, and notifying the data science team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Databricks ML Model Deployment Tracker
  description: Tracks ML model deployment on Azure Databricks by checking the model registry, running validation, creating a ServiceNow release record, and notifying the data science team in Microsoft Teams.
  tags:
  - data-science
  - machine-learning
  - azure-databricks
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ml-deployment
    port: 8080
    tools:
    - name: track-model-deployment
      description: Given a Databricks model name and version, check registry status, create a release record, and notify the team.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The MLflow registered model name.
      - name: model_version
        in: body
        type: string
        description: The model version to deploy.
      - name: target_stage
        in: body
        type: string
        description: The target stage (Staging, Production).
      steps:
      - name: get-model-info
        type: call
        call: databricks.get-model-version
        with:
          model_name: '{{model_name}}'
          version: '{{model_version}}'
      - name: create-release
        type: call
        call: servicenow.create-task
        with:
          short_description: 'ML Model Release: {{model_name}} v{{model_version}} to {{target_stage}}'
          description: 'Model: {{model_name}} v{{model_version}}. Stage: {{target_stage}}. Status: {{get-model-info.status}}. Run ID: {{get-model-info.run_id}}.'
          assigned_group: Data_Science
          category: ml_deployment
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: data-science
          text: 'ML Model Deployment: {{model_name}} v{{model_version}} to {{target_stage}}. Status: {{get-model-info.status}}. Release: {{create-release.number}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://gsk-databricks.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: models
      path: /mlflow/model-versions/get?name={{model_name}}&version={{version}}
      inputParameters:
      - name: model_name
        in: path
      - name: version
        in: path
      operations:
      - name: get-model-version
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → databricks-ml-model-deployment-tracker.yml

Audits expenses at GSK via Concur, compliance checks, and email.

naftiko: '0.5'
info:
  label: Expense Audit Pipeline
  description: Audits expenses at GSK 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 GSK.
      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.gsk.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.gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → expense-audit-pipeline.yml

Monitors SLAs at GSK via Datadog and Slack.

naftiko: '0.5'
info:
  label: SLA Monitoring Pipeline
  description: Monitors SLAs at GSK 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 GSK.
      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://gsk.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sla-monitoring-pipeline.yml

Reviews vendors at GSK.

naftiko: '0.5'
info:
  label: Quarterly Vendor Review Pipeline
  description: Reviews vendors at GSK.
  tags:
  - procurement
  - vendor-management
  - review
capability:
  exposes:
  - type: mcp
    namespace: vendor-review
    port: 8080
    tools:
    - name: review-vendor
      description: Review vendors at GSK.
      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.gsk.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.gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
  - type: http
    namespace: calendar
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: events
      path: /users/proc/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → quarterly-vendor-review-pipeline.yml

Retrieves a GxP-classified incident from ServiceNow by incident number. Returns priority, assignment group, state, and GxP impact assessment.

naftiko: '0.5'
info:
  label: ServiceNow GxP Incident Lookup
  description: Retrieves a GxP-classified incident from ServiceNow by incident number. Returns priority, assignment group, state, and GxP impact assessment.
  tags:
  - quality
  - gxp
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: quality-incidents
    port: 8080
    tools:
    - name: get-gxp-incident
      description: Look up a GxP incident in ServiceNow by incident number.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g. INC0012345).
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: priority
        type: string
        mapping: $.result.priority
      - name: assigned_group
        type: string
        mapping: $.result.assignment_group.display_value
      - name: gxp_impact
        type: string
        mapping: $.result.u_gxp_impact
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-gxp-incident-lookup.yml

Checks K8s pod health at GSK.

naftiko: '0.5'
info:
  label: K8s Pod Health
  description: Checks K8s pod health at GSK.
  tags:
  - containers
  - kubernetes
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: k8s-pod
    port: 8080
    tools:
    - name: check-pod
      description: Check pod at GSK.
      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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: pods
      path: /namespaces/{{namespace}}/pods/{{pod}}
      inputParameters:
      - name: namespace
        in: path
      - name: pod
        in: path
      operations:
      - name: get-pod
        method: GET
Open in Framework → View in Fleet → k8s-pod-health.yml

Searches Confluence at GSK.

naftiko: '0.5'
info:
  label: Confluence Article Search
  description: Searches Confluence at GSK.
  tags:
  - knowledge-management
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: confluence-search
    port: 8080
    tools:
    - name: search-articles
      description: Search Confluence at GSK.
      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://gsk.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content/search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-article-search.yml

Tracks an IND amendment by pulling submission details from the regulatory database, notifying the regulatory affairs team in Microsoft Teams, creating a tracking entry in ServiceNow, and updating the Confluence regulatory timeline.

naftiko: '0.5'
info:
  label: Regulatory IND Amendment Tracker
  description: Tracks an IND amendment by pulling submission details from the regulatory database, notifying the regulatory affairs team in Microsoft Teams, creating a tracking entry in ServiceNow, and updating the Confluence regulatory timeline.
  tags:
  - regulatory
  - ind
  - amendments
  - servicenow
  - microsoft-teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ind
    port: 8080
    tools:
    - name: track-ind-amendment
      description: Given an IND number and amendment details, create tracking records and notify the regulatory team.
      inputParameters:
      - name: ind_number
        in: body
        type: string
        description: The IND application number.
      - name: amendment_type
        in: body
        type: string
        description: The type of amendment (Protocol, Safety Report, CMC).
      - name: amendment_description
        in: body
        type: string
        description: Description of the amendment content.
      - name: target_submission_date
        in: body
        type: string
        description: Target submission date (YYYY-MM-DD).
      steps:
      - name: create-tracking
        type: call
        call: servicenow.create-task
        with:
          short_description: 'IND Amendment: {{ind_number}} — {{amendment_type}}'
          description: '{{amendment_description}}

            Target submission: {{target_submission_date}}'
          assigned_group: Regulatory_Affairs
          category: regulatory_amendment
      - name: notify-reg-team
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-affairs
          text: 'IND Amendment: {{ind_number}} ({{amendment_type}}). Target: {{target_submission_date}}. Tracking: {{create-tracking.number}}. {{amendment_description}}'
      - name: update-timeline
        type: call
        call: confluence.create-page
        with:
          space_key: REG
          title: IND {{ind_number}} Amendment — {{amendment_type}} ({{target_submission_date}})
          body: 'IND: {{ind_number}}

            Amendment Type: {{amendment_type}}

            Description: {{amendment_description}}

            Target Date: {{target_submission_date}}

            Tracking: {{create-tracking.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://gsk-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → regulatory-ind-amendment-tracker.yml

Checks GMP training compliance by querying the training system, identifying overdue employees in Workday, creating a ServiceNow compliance case, and sending reminder notifications in Microsoft Teams.

naftiko: '0.5'
info:
  label: Microsoft Power Automate GMP Training Compliance
  description: Checks GMP training compliance by querying the training system, identifying overdue employees in Workday, creating a ServiceNow compliance case, and sending reminder notifications in Microsoft Teams.
  tags:
  - compliance
  - training
  - gmp
  - microsoft-power-automate
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: training-compliance
    port: 8080
    tools:
    - name: check-training-compliance
      description: Given a training course ID and department, identify employees overdue on GMP training and trigger compliance actions.
      inputParameters:
      - name: course_id
        in: body
        type: string
        description: The GMP training course identifier.
      - name: department
        in: body
        type: string
        description: The department to check.
      - name: due_date_threshold
        in: body
        type: string
        description: The due date threshold (YYYY-MM-DD).
      steps:
      - name: get-overdue-list
        type: call
        call: trainingdb.get-overdue
        with:
          course_id: '{{course_id}}'
          department: '{{department}}'
          threshold: '{{due_date_threshold}}'
      - name: create-compliance-case
        type: call
        call: servicenow.create-task
        with:
          short_description: 'GMP Training Overdue: {{course_id}} — {{department}}'
          description: 'Course: {{course_id}}. Department: {{department}}. Overdue count: {{get-overdue-list.overdue_count}}. Threshold: {{due_date_threshold}}.'
          assigned_group: Quality_Training
          category: training_compliance
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: gmp-training
          text: 'GMP Training Alert: {{get-overdue-list.overdue_count}} employees in {{department}} are overdue on course {{course_id}}. Compliance case: {{create-compliance-case.number}}. Deadline: {{due_date_threshold}}.'
  consumes:
  - type: http
    namespace: trainingdb
    baseUri: https://gsk-training.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.training_db_token
    resources:
    - name: overdue
      path: /courses/{{course_id}}/overdue?department={{department}}&threshold={{threshold}}
      inputParameters:
      - name: course_id
        in: path
      - name: department
        in: path
      - name: threshold
        in: path
      operations:
      - name: get-overdue
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-power-automate-gmp-training-compliance.yml

Checks New Relic APM at GSK.

naftiko: '0.5'
info:
  label: New Relic APM Check
  description: Checks New Relic APM at GSK.
  tags:
  - monitoring
  - new-relic
  - apm
capability:
  exposes:
  - type: mcp
    namespace: nr-apm
    port: 8080
    tools:
    - name: check-apm
      description: Check APM at GSK.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: App ID.
      call: newrelic.get-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: health
        type: string
        mapping: $.application.health_status
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.new_relic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → new-relic-apm-check.yml

Maintains KB at GSK by finding stale articles and notifying owners.

naftiko: '0.5'
info:
  label: Knowledge Base Maintenance Pipeline
  description: Maintains KB at GSK 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 GSK.
      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://gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: batch
      path: /send-batch
      operations:
      - name: batch
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → knowledge-base-maintenance-pipeline.yml

Reviews access at GSK via Okta, IAM, and Jira.

naftiko: '0.5'
info:
  label: Access Review Pipeline
  description: Reviews access at GSK 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 GSK.
      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://gsk.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.gsk.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://gsk.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → access-review-pipeline.yml

Monitors cert expiry at GSK.

naftiko: '0.5'
info:
  label: Certificate Expiry Pipeline
  description: Monitors cert expiry at GSK.
  tags:
  - security
  - certificates
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: cert-monitor
    port: 8080
    tools:
    - name: check-certs
      description: Monitor certs at GSK.
      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.gsk.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://gsk.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → certificate-expiry-pipeline.yml

Analyzes budget variance at GSK via Oracle, Workday, and Slack.

naftiko: '0.5'
info:
  label: Budget Variance Pipeline
  description: Analyzes budget variance at GSK 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 GSK.
      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.gsk.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.gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: var
      path: /compute
      operations:
      - name: variance
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → budget-variance-pipeline.yml

Searches the clinical data lake in Elasticsearch for patient records matching a study ID and visit window. Returns aggregated result counts and matching document IDs.

naftiko: '0.5'
info:
  label: Elasticsearch Clinical Data Search
  description: Searches the clinical data lake in Elasticsearch for patient records matching a study ID and visit window. Returns aggregated result counts and matching document IDs.
  tags:
  - clinical-trials
  - data
  - elasticsearch
  - search
capability:
  exposes:
  - type: mcp
    namespace: clinical-search
    port: 8080
    tools:
    - name: search-clinical-data
      description: Search Elasticsearch clinical data index by study ID and optional visit window.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier.
      - name: visit_window
        in: body
        type: string
        description: The visit window label (e.g. Week-12, Screening).
      call: elasticsearch.search-index
      with:
        index: clinical-edc-data
        query_study: '{{study_id}}'
        query_visit: '{{visit_window}}'
      outputParameters:
      - name: total_hits
        type: number
        mapping: $.hits.total.value
      - name: documents
        type: array
        mapping: $.hits.hits[*]._id
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://gsk-clinical-es.aws.gsk.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search-index
        method: POST
Open in Framework → View in Fleet → elasticsearch-clinical-data-search.yml

Triggers a Qlik Sense report reload for clinical trial analytics, retrieves the output, and publishes the report link to Confluence and Microsoft Teams.

naftiko: '0.5'
info:
  label: Qlik Sense Clinical Analytics Report Generation
  description: Triggers a Qlik Sense report reload for clinical trial analytics, retrieves the output, and publishes the report link to Confluence and Microsoft Teams.
  tags:
  - analytics
  - clinical-trials
  - qlik-sense
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-analytics
    port: 8080
    tools:
    - name: generate-clinical-report
      description: Given a Qlik Sense app ID and study ID, trigger a report reload and publish the results.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Qlik Sense application ID.
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier for filtering.
      steps:
      - name: reload-app
        type: call
        call: qliksense.reload-app
        with:
          app_id: '{{app_id}}'
      - name: publish-to-confluence
        type: call
        call: confluence.create-page
        with:
          space_key: CDM
          title: 'Clinical Analytics: {{study_id}} — Refreshed'
          body: 'Qlik Sense report for study {{study_id}} has been refreshed.

            App ID: {{app_id}}

            Reload status: {{reload-app.status}}

            Last reload: {{reload-app.end_time}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-analytics
          text: 'Clinical analytics report refreshed for {{study_id}}. Qlik app: {{app_id}}. Status: {{reload-app.status}}.'
  consumes:
  - type: http
    namespace: qliksense
    baseUri: https://gsk-qlik.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qliksense_token
    resources:
    - name: apps
      path: /apps/{{app_id}}/reloads
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: reload-app
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://gsk-wiki.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/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → qlik-sense-clinical-analytics-report-generation.yml

Queries SAP for upcoming preventive maintenance schedules, checks Datadog for current equipment health, opens a ServiceNow work order, and notifies the maintenance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Manufacturing Equipment Maintenance Scheduler
  description: Queries SAP for upcoming preventive maintenance schedules, checks Datadog for current equipment health, opens a ServiceNow work order, and notifies the maintenance team in Microsoft Teams.
  tags:
  - manufacturing
  - maintenance
  - sap
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: equipment-maintenance
    port: 8080
    tools:
    - name: schedule-maintenance
      description: Given an equipment tag and maintenance type, check current health, create a work order, and notify the maintenance team.
      inputParameters:
      - name: equipment_tag
        in: body
        type: string
        description: The equipment tag identifier.
      - name: maintenance_type
        in: body
        type: string
        description: Type of maintenance (Preventive, Corrective, Calibration).
      - name: scheduled_date
        in: body
        type: string
        description: The scheduled maintenance date (YYYY-MM-DD).
      steps:
      - name: get-equipment-health
        type: call
        call: datadog.get-service-metrics
        with:
          service_name: '{{equipment_tag}}'
      - name: create-work-order
        type: call
        call: servicenow.create-task
        with:
          short_description: '{{maintenance_type}} Maintenance: {{equipment_tag}}'
          description: 'Scheduled: {{scheduled_date}}. Current availability: {{get-equipment-health.availability_pct}}%. Active alerts: {{get-equipment-health.active_alerts}}.'
          assigned_group: Manufacturing_Maintenance
          category: equipment_maintenance
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: mfg-maintenance
          text: '{{maintenance_type}} maintenance scheduled for {{equipment_tag}} on {{scheduled_date}}. Health: {{get-equipment-health.availability_pct}}%. Work order: {{create-work-order.number}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: metrics
      path: /query?query=avg:system.cpu.idle{{service:{{service_name}}}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-equipment-maintenance-scheduler.yml

Retrieves a healthcare professional contact record from Salesforce CRM including engagement history, territory, and last interaction date.

naftiko: '0.5'
info:
  label: Salesforce HCP Engagement Lookup
  description: Retrieves a healthcare professional contact record from Salesforce CRM including engagement history, territory, and last interaction date.
  tags:
  - commercial
  - hcp-engagement
  - salesforce
  - crm
capability:
  exposes:
  - type: mcp
    namespace: hcp-crm
    port: 8080
    tools:
    - name: get-hcp-record
      description: Look up a healthcare professional record in Salesforce by HCP ID.
      inputParameters:
      - name: hcp_id
        in: body
        type: string
        description: The Salesforce HCP contact ID.
      call: salesforce.get-contact
      with:
        hcp_id: '{{hcp_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: specialty
        type: string
        mapping: $.Specialty__c
      - name: territory
        type: string
        mapping: $.Territory__c
      - name: last_interaction
        type: string
        mapping: $.Last_Interaction_Date__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gsk.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{hcp_id}}
      inputParameters:
      - name: hcp_id
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → salesforce-hcp-engagement-lookup.yml

Checks ES index at GSK.

naftiko: '0.5'
info:
  label: ES Index Health
  description: Checks ES index at GSK.
  tags:
  - search
  - elasticsearch
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: es-health
    port: 8080
    tools:
    - name: check-index
      description: Check ES index at GSK.
      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.gsk.com:9200
    authentication:
      type: bearer
      token: $secrets.es_token
    resources:
    - name: indices
      path: /{{index}}/_stats
      inputParameters:
      - name: index
        in: path
      operations:
      - name: get-health
        method: GET
Open in Framework → View in Fleet → es-index-health.yml

Detects infrastructure drift at GSK via Terraform, Slack, and Jira.

naftiko: '0.5'
info:
  label: Drift Detection Pipeline
  description: Detects infrastructure drift at GSK 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 GSK.
      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://gsk.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → drift-detection-pipeline.yml

When a change control request is submitted, creates a ServiceNow change record, retrieves the impacted system owner from Workday, notifies the quality review board in Microsoft Teams, and archives the change request in SharePoint.

naftiko: '0.5'
info:
  label: GxP Change Control Workflow
  description: When a change control request is submitted, creates a ServiceNow change record, retrieves the impacted system owner from Workday, notifies the quality review board in Microsoft Teams, and archives the change request in SharePoint.
  tags:
  - quality
  - gxp
  - change-control
  - servicenow
  - workday
  - microsoft-teams
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: change-control
    port: 8080
    tools:
    - name: submit-change-control
      description: Given change control details, create a record, identify the system owner, notify the review board, and archive documentation.
      inputParameters:
      - name: change_title
        in: body
        type: string
        description: Title of the change control request.
      - name: change_description
        in: body
        type: string
        description: Detailed description of the proposed change.
      - name: impacted_system
        in: body
        type: string
        description: The name of the GxP system impacted.
      - name: system_owner_id
        in: body
        type: string
        description: The Workday ID of the system owner.
      - name: risk_level
        in: body
        type: string
        description: Risk level (High, Medium, Low).
      steps:
      - name: get-system-owner
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{system_owner_id}}'
      - name: create-change-record
        type: call
        call: servicenow.create-change
        with:
          short_description: '{{change_title}}'
          description: '{{change_description}}

            Impacted System: {{impacted_system}}

            System Owner: {{get-system-owner.full_name}}

            Risk Level: {{risk_level}}'
          assigned_group: GxP_Change_Board
          category: gxp_change_control
          risk: '{{risk_level}}'
      - name: notify-review-board
        type: call
        call: msteams.send-message
        with:
          channel_id: gxp-change-review
          text: 'New Change Control: {{change_title}} ({{risk_level}} risk). System: {{impacted_system}}. Owner: {{get-system-owner.full_name}}. Record: {{create-change-record.number}}.'
      - name: archive-request
        type: call
        call: sharepoint.create-file
        with:
          site_id: quality_change_control_site
          folder_path: ChangeControls/{{create-change-record.number}}
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.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/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        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-file
        method: PUT
Open in Framework → View in Fleet → gxp-change-control-workflow.yml

Queries Prometheus for active alerts on GMP manufacturing equipment by equipment tag. Returns alert names, severity, and duration.

naftiko: '0.5'
info:
  label: Prometheus GMP Equipment Alert Query
  description: Queries Prometheus for active alerts on GMP manufacturing equipment by equipment tag. Returns alert names, severity, and duration.
  tags:
  - manufacturing
  - monitoring
  - prometheus
  - equipment
capability:
  exposes:
  - type: mcp
    namespace: mfg-alerts
    port: 8080
    tools:
    - name: get-equipment-alerts
      description: Retrieve active Prometheus alerts for a specific manufacturing equipment tag.
      inputParameters:
      - name: equipment_tag
        in: body
        type: string
        description: The equipment tag identifier (e.g. BIOREACTOR-01).
      call: prometheus.get-alerts
      with:
        equipment_tag: '{{equipment_tag}}'
      outputParameters:
      - name: alert_count
        type: number
        mapping: $.data.alerts.length
      - name: alerts
        type: array
        mapping: $.data.alerts[*].labels.alertname
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://gsk-prometheus.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: alerts
      path: /alerts?filter=equipment={{equipment_tag}}
      inputParameters:
      - name: equipment_tag
        in: path
      operations:
      - name: get-alerts
        method: GET
Open in Framework → View in Fleet → prometheus-gmp-equipment-alert-query.yml

Monitors data pipelines at GSK via Databricks, Snowflake, Slack, and ServiceNow.

naftiko: '0.5'
info:
  label: Data Pipeline Monitor Pipeline
  description: Monitors data pipelines at GSK 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 GSK.
      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://gsk.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://gsk.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://gsk.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → data-pipeline-monitor-pipeline.yml

Checks Terraform workspace at GSK.

naftiko: '0.5'
info:
  label: Terraform Workspace Check
  description: Checks Terraform workspace at GSK.
  tags:
  - infrastructure
  - terraform
  - iac
capability:
  exposes:
  - type: mcp
    namespace: tf-ws
    port: 8080
    tools:
    - name: check-ws
      description: Check workspace at GSK.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Workspace ID.
      call: terraform.get-ws
      with:
        workspace_id: '{{workspace_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.data.attributes.name
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /workspaces/{{workspace_id}}
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: get-ws
        method: GET
Open in Framework → View in Fleet → terraform-workspace-check.yml

Fetches a clinical trial protocol document from SharePoint by study ID and returns the document metadata and download link.

naftiko: '0.5'
info:
  label: Clinical Trial Protocol Document Retrieval
  description: Fetches a clinical trial protocol document from SharePoint by study ID and returns the document metadata and download link.
  tags:
  - clinical-trials
  - document-management
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: clinical-docs
    port: 8080
    tools:
    - name: get-protocol-document
      description: Retrieve a clinical trial protocol document from SharePoint given a study identifier.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The GSK clinical study identifier (e.g. GSK-213456).
      call: sharepoint.get-document
      with:
        site_id: clinical_trials_site
        file_path: Protocols/{{study_id}}/protocol_latest.pdf
      outputParameters:
      - name: document_url
        type: string
        mapping: $.webUrl
      - name: last_modified
        type: string
        mapping: $.lastModifiedDateTime
      - name: modified_by
        type: string
        mapping: $.lastModifiedBy.user.displayName
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → clinical-trial-protocol-document-retrieval.yml

Handles a cleanroom environmental monitoring excursion by pulling sensor data, checking the affected batch in SAP, opening a ServiceNow investigation, and notifying quality and manufacturing teams in Microsoft Teams.

naftiko: '0.5'
info:
  label: Environmental Monitoring Excursion Handler
  description: Handles a cleanroom environmental monitoring excursion by pulling sensor data, checking the affected batch in SAP, opening a ServiceNow investigation, and notifying quality and manufacturing teams in Microsoft Teams.
  tags:
  - manufacturing
  - environmental-monitoring
  - gmp
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: em-excursion
    port: 8080
    tools:
    - name: handle-em-excursion
      description: Given a cleanroom ID and excursion details, check the affected batch, open an investigation, and notify both quality and manufacturing.
      inputParameters:
      - name: cleanroom_id
        in: body
        type: string
        description: The cleanroom identifier.
      - name: parameter_name
        in: body
        type: string
        description: The EM parameter exceeded (Viable, Non-Viable, Temperature, Humidity, Differential-Pressure).
      - name: measured_value
        in: body
        type: string
        description: The measured excursion value.
      - name: batch_number
        in: body
        type: string
        description: The batch being manufactured in the affected room.
      steps:
      - name: get-batch
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{batch_number}}'
      - name: open-investigation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'EM Excursion: {{cleanroom_id}} — {{parameter_name}}'
          category: environmental_monitoring
          priority: '2'
          assigned_group: Quality_EM
          description: 'Cleanroom: {{cleanroom_id}}. Parameter: {{parameter_name}}. Value: {{measured_value}}. Active batch: {{batch_number}} ({{get-batch.material}}). Status: {{get-batch.status}}.'
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-em-alerts
          text: 'EM Excursion in {{cleanroom_id}}: {{parameter_name}} = {{measured_value}}. Batch {{batch_number}} ({{get-batch.material}}). Incident: {{open-investigation.number}}.'
      - name: notify-manufacturing
        type: call
        call: msteams.send-message
        with:
          channel_id: manufacturing-floor
          text: 'EM ALERT: {{cleanroom_id}} {{parameter_name}} excursion ({{measured_value}}). Batch {{batch_number}} may be impacted. Incident: {{open-investigation.number}}. Await QA guidance.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://gsk-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: batches
      path: /A_Batch('{{batch_number}}')
      inputParameters:
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/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/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → environmental-monitoring-excursion-handler.yml

Initiates a vendor qualification by pulling vendor data from SAP, checking compliance status in ServiceNow, notifying the procurement quality team in Microsoft Teams, and logging the assessment in Confluence.

naftiko: '0.5'
info:
  label: Vendor Qualification Assessment
  description: Initiates a vendor qualification by pulling vendor data from SAP, checking compliance status in ServiceNow, notifying the procurement quality team in Microsoft Teams, and logging the assessment in Confluence.
  tags:
  - procurement
  - vendor-qualification
  - sap
  - servicenow
  - microsoft-teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: vendor-qualification
    port: 8080
    tools:
    - name: assess-vendor
      description: Given a vendor number and qualification type, pull vendor data, check compliance, notify procurement, and log the assessment.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The SAP vendor number.
      - name: qualification_type
        in: body
        type: string
        description: Type of qualification (Initial, Re-qualification, For-Cause).
      - name: material_category
        in: body
        type: string
        description: The material category the vendor supplies.
      steps:
      - name: get-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_number: '{{vendor_number}}'
      - name: check-compliance
        type: call
        call: servicenow.get-incidents
        with:
          query: category=vendor_nonconformance^u_vendor_number={{vendor_number}}
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement-quality
          text: 'Vendor Qualification ({{qualification_type}}): {{get-vendor.vendor_name}} ({{vendor_number}}). Category: {{material_category}}. Open nonconformances: {{check-compliance.result_count}}.'
      - name: log-assessment
        type: call
        call: confluence.create-page
        with:
          space_key: PROC
          title: 'Vendor Assessment: {{get-vendor.vendor_name}} — {{qualification_type}}'
          body: 'Vendor: {{get-vendor.vendor_name}} ({{vendor_number}})

            Type: {{qualification_type}}

            Category: {{material_category}}

            Open Issues: {{check-compliance.result_count}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://gsk-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_number}}')
      inputParameters:
      - name: vendor_number
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query={{query}}
      inputParameters:
      - name: query
        in: path
      operations:
      - name: get-incidents
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://gsk-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → vendor-qualification-assessment.yml

Checks Datadog monitor at GSK.

naftiko: '0.5'
info:
  label: Datadog Monitor Check
  description: Checks Datadog monitor at GSK.
  tags:
  - monitoring
  - datadog
  - observability
capability:
  exposes:
  - type: mcp
    namespace: dd-monitor
    port: 8080
    tools:
    - name: check-monitor
      description: Check monitor at GSK.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Monitor ID.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.overall_state
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-monitor-check.yml

Checks on-call at GSK.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Check
  description: Checks on-call at GSK.
  tags:
  - incident-management
  - pagerduty
  - on-call
capability:
  exposes:
  - type: mcp
    namespace: pd-oncall
    port: 8080
    tools:
    - name: get-oncall
      description: Check on-call at GSK.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: Schedule ID.
      call: pagerduty.get-oncall
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: user
        type: string
        mapping: $.oncalls[0].user.summary
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: oncalls
      path: /oncalls
      operations:
      - name: get-oncall
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-check.yml

Executes a GxP system validation by triggering Azure DevOps test pipelines, collecting results, creating a validation summary in ServiceNow, and archiving evidence in SharePoint.

naftiko: '0.5'
info:
  label: GxP Validation Protocol Executor
  description: Executes a GxP system validation by triggering Azure DevOps test pipelines, collecting results, creating a validation summary in ServiceNow, and archiving evidence in SharePoint.
  tags:
  - quality
  - gxp
  - validation
  - azure-devops
  - servicenow
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: gxp-validation
    port: 8080
    tools:
    - name: execute-validation
      description: Given a validation protocol ID and system name, trigger test execution, collect results, and archive evidence.
      inputParameters:
      - name: protocol_id
        in: body
        type: string
        description: The validation protocol identifier.
      - name: system_name
        in: body
        type: string
        description: The GxP system under validation.
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps test pipeline definition ID.
      steps:
      - name: trigger-tests
        type: call
        call: azuredevops.get-latest-run
        with:
          pipeline_id: '{{pipeline_id}}'
      - name: create-validation-record
        type: call
        call: servicenow.create-task
        with:
          short_description: 'GxP Validation: {{system_name}} — {{protocol_id}}'
          description: 'Test pipeline: {{pipeline_id}}. Result: {{trigger-tests.result}}. Started: {{trigger-tests.start_time}}. Triggered by: {{trigger-tests.triggered_by}}.'
          assigned_group: GxP_Validation
          category: system_validation
      - name: archive-evidence
        type: call
        call: sharepoint.create-file
        with:
          site_id: gxp_validation_site
          folder_path: Validations/{{system_name}}/{{protocol_id}}
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/gsk-pharma/GSK-R&D/_apis
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: builds
      path: /build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: path
      operations:
      - name: get-latest-run
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.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: 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-file
        method: PUT
Open in Framework → View in Fleet → gxp-validation-protocol-executor.yml

Processes a vaccine distribution order by validating inventory in Oracle Cloud, creating a SAP delivery order, generating shipping documentation in SharePoint, and notifying the logistics team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Vaccine Distribution Order Orchestrator
  description: Processes a vaccine distribution order by validating inventory in Oracle Cloud, creating a SAP delivery order, generating shipping documentation in SharePoint, and notifying the logistics team in Microsoft Teams.
  tags:
  - supply-chain
  - vaccines
  - distribution
  - oracle-cloud
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vaccine-distribution
    port: 8080
    tools:
    - name: process-distribution-order
      description: Given a vaccine material, destination, and quantity, validate inventory, create a delivery order, generate shipping docs, and notify logistics.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The vaccine material number.
      - name: destination_code
        in: body
        type: string
        description: The destination warehouse or distribution center code.
      - name: quantity
        in: body
        type: number
        description: The requested quantity in doses.
      - name: ship_date
        in: body
        type: string
        description: Requested ship date (YYYY-MM-DD).
      steps:
      - name: check-inventory
        type: call
        call: oracle.get-onhand
        with:
          material_number: '{{material_number}}'
          warehouse_code: PRIMARY
      - name: create-delivery
        type: call
        call: sap.create-delivery-order
        with:
          material: '{{material_number}}'
          destination: '{{destination_code}}'
          quantity: '{{quantity}}'
          ship_date: '{{ship_date}}'
      - name: generate-shipping-docs
        type: call
        call: sharepoint.create-file
        with:
          site_id: logistics_site
          folder_path: ShippingDocs/{{create-delivery.delivery_number}}
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: vaccine-logistics
          text: 'Distribution Order: {{material_number}} x {{quantity}} doses to {{destination_code}}. Ship date: {{ship_date}}. Delivery: {{create-delivery.delivery_number}}. Available inventory: {{check-inventory.on_hand_qty}} {{check-inventory.uom}}. Docs: {{generate-shipping-docs.url}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://gsk-cloud.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: inventory
      path: /inventoryOnhandBalances?q=ItemNumber={{material_number}};Subinventory={{warehouse_code}}
      inputParameters:
      - name: material_number
        in: path
      - name: warehouse_code
        in: path
      operations:
      - name: get-onhand
        method: GET
  - type: http
    namespace: sap
    baseUri: https://gsk-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: deliveries
      path: /A_OutbDeliveryHeader
      operations:
      - name: create-delivery-order
        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-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vaccine-distribution-order-orchestrator.yml

Checks Redis at GSK.

naftiko: '0.5'
info:
  label: Redis Cache Status
  description: Checks Redis at GSK.
  tags:
  - caching
  - redis
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: redis
    port: 8080
    tools:
    - name: check-cache
      description: Check Redis at GSK.
      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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.redis_token
    resources:
    - name: instances
      path: /instances/{{instance}}/info
      inputParameters:
      - name: instance
        in: path
      operations:
      - name: get-info
        method: GET
Open in Framework → View in Fleet → redis-cache-status.yml

Orchestrates vaccine lot release by pulling batch test results from SAP, checking quality hold status in ServiceNow, generating the lot release certificate in SharePoint, and notifying the QP (Qualified Person) in Microsoft Teams.

naftiko: '0.5'
info:
  label: Vaccine Lot Release Orchestrator
  description: Orchestrates vaccine lot release by pulling batch test results from SAP, checking quality hold status in ServiceNow, generating the lot release certificate in SharePoint, and notifying the QP (Qualified Person) in Microsoft Teams.
  tags:
  - manufacturing
  - vaccines
  - lot-release
  - sap
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lot-release
    port: 8080
    tools:
    - name: release-vaccine-lot
      description: Given a batch number and QP ID, verify test results, check for quality holds, generate release certificate, and notify the QP.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The vaccine batch/lot number.
      - name: qp_worker_id
        in: body
        type: string
        description: The Workday ID of the Qualified Person.
      steps:
      - name: get-batch-results
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{batch_number}}'
      - name: check-quality-holds
        type: call
        call: servicenow.get-incidents
        with:
          query: category=quality_hold^u_batch_number={{batch_number}}^state!=7
      - name: get-qp
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{qp_worker_id}}'
      - name: generate-certificate
        type: call
        call: sharepoint.create-file
        with:
          site_id: lot_release_site
          folder_path: Certificates/{{batch_number}}_release
      - name: notify-qp
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-qp.work_email}}'
          text: 'Lot Release Review: Batch {{batch_number}} ({{get-batch-results.material}}). Status: {{get-batch-results.status}}. Open holds: {{check-quality-holds.result_count}}. Certificate: {{generate-certificate.url}}. Please review and approve.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://gsk-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: batches
      path: /A_Batch('{{batch_number}}')
      inputParameters:
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query={{query}}
      inputParameters:
      - name: query
        in: path
      operations:
      - name: get-incidents
        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: 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-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vaccine-lot-release-orchestrator.yml

When a healthcare professional submits a medical information request, logs it in Salesforce, retrieves the relevant product monograph from SharePoint, creates a ServiceNow case for medical affairs review, and responds via Microsoft Teams.

naftiko: '0.5'
info:
  label: HCP Medical Information Request Orchestrator
  description: When a healthcare professional submits a medical information request, logs it in Salesforce, retrieves the relevant product monograph from SharePoint, creates a ServiceNow case for medical affairs review, and responds via Microsoft Teams.
  tags:
  - medical-affairs
  - hcp-engagement
  - salesforce
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: medinfo-request
    port: 8080
    tools:
    - name: process-medinfo-request
      description: Given an HCP ID and product/question details, log the request, pull the product monograph, create a review case, and notify the medical affairs team.
      inputParameters:
      - name: hcp_id
        in: body
        type: string
        description: The Salesforce HCP contact ID.
      - name: product_name
        in: body
        type: string
        description: The GSK product name.
      - name: question
        in: body
        type: string
        description: The medical information question.
      steps:
      - name: get-hcp
        type: call
        call: salesforce.get-contact
        with:
          hcp_id: '{{hcp_id}}'
      - name: get-monograph
        type: call
        call: sharepoint.get-document
        with:
          site_id: medical_affairs_site
          file_path: ProductMonographs/{{product_name}}/monograph_current.pdf
      - name: create-review-case
        type: call
        call: servicenow.create-task
        with:
          short_description: 'MedInfo Request: {{product_name}} — {{get-hcp.name}}'
          description: 'HCP: {{get-hcp.name}} ({{get-hcp.specialty}})

            Product: {{product_name}}

            Question: {{question}}

            Monograph: {{get-monograph.document_url}}'
          assigned_group: Medical_Affairs
          category: medical_information
      - name: notify-medaffairs
        type: call
        call: msteams.send-message
        with:
          channel_id: medical-information
          text: 'New MedInfo Request from {{get-hcp.name}} ({{get-hcp.specialty}}) re: {{product_name}}. Case: {{create-review-case.number}}. Question: {{question}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gsk.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{hcp_id}}
      inputParameters:
      - name: hcp_id
        in: path
      operations:
      - name: get-contact
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hcp-medical-information-request-orchestrator.yml

Queries Kong API gateway metrics, correlates with Datadog service-level data, and publishes a consolidated API health summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: API Gateway Health Dashboard
  description: Queries Kong API gateway metrics, correlates with Datadog service-level data, and publishes a consolidated API health summary to Microsoft Teams.
  tags:
  - infrastructure
  - api-management
  - kong
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: api-health
    port: 8080
    tools:
    - name: check-api-health
      description: Given a Kong service name, pull gateway metrics and Datadog SLI data and post a health summary to Teams.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Kong API gateway service name.
      steps:
      - name: get-kong-metrics
        type: call
        call: kong.get-service-status
        with:
          service_name: '{{service_name}}'
      - name: get-datadog-metrics
        type: call
        call: datadog.get-service-metrics
        with:
          service_name: '{{service_name}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: platform-engineering
          text: 'API Health: {{service_name}}. Kong status: {{get-kong-metrics.status}}. Requests/min: {{get-kong-metrics.request_rate}}. Datadog availability: {{get-datadog-metrics.availability_pct}}%. Active alerts: {{get-datadog-metrics.active_alerts}}.'
  consumes:
  - type: http
    namespace: kong
    baseUri: https://gsk-kong-admin.internal.gsk.com
    authentication:
      type: bearer
      token: $secrets.kong_admin_token
    resources:
    - name: services
      path: /services/{{service_name}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-status
        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?query=avg:system.cpu.idle{{service:{{service_name}}}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → api-gateway-health-dashboard.yml

Checks IT incident in ServiceNow for GSK.

naftiko: '0.5'
info:
  label: ServiceNow Incident Detail Check
  description: Checks IT incident in ServiceNow for GSK.
  tags:
  - it-service
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: snow-incident
    port: 8080
    tools:
    - name: check-incident
      description: Check incident at GSK.
      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://gsk.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-detail-check.yml

On identification of a corrective/preventive action, creates a CAPA record in ServiceNow, assigns the investigation owner from Workday, sets a due date, and notifies the quality management team in Microsoft Teams.

naftiko: '0.5'
info:
  label: CAPA Management Orchestrator
  description: On identification of a corrective/preventive action, creates a CAPA record in ServiceNow, assigns the investigation owner from Workday, sets a due date, and notifies the quality management team in Microsoft Teams.
  tags:
  - quality
  - capa
  - servicenow
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-capa
    port: 8080
    tools:
    - name: initiate-capa
      description: Given CAPA details, create a record in ServiceNow, assign an owner from Workday, and notify the quality team.
      inputParameters:
      - name: capa_title
        in: body
        type: string
        description: Title of the CAPA.
      - name: root_cause
        in: body
        type: string
        description: Description of the identified root cause.
      - name: investigation_owner_id
        in: body
        type: string
        description: The Workday ID of the investigation owner.
      - name: due_days
        in: body
        type: number
        description: Number of days until the CAPA is due.
      steps:
      - name: get-owner
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{investigation_owner_id}}'
      - name: create-capa
        type: call
        call: servicenow.create-task
        with:
          short_description: 'CAPA: {{capa_title}}'
          description: 'Root Cause: {{root_cause}}

            Investigation Owner: {{get-owner.full_name}}

            Due in: {{due_days}} days'
          assigned_to: '{{get-owner.work_email}}'
          assigned_group: Quality_CAPA
          category: capa
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-capa
          text: 'New CAPA: {{capa_title}}. Owner: {{get-owner.full_name}}. Due: {{due_days}} days. Record: {{create-capa.number}}. Root cause: {{root_cause}}'
  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://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → capa-management-orchestrator.yml

Tracks a Terraform infrastructure deployment by querying Azure DevOps for the pipeline run, checking Datadog for post-deploy health, and notifying the platform team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Provisioning Tracker
  description: Tracks a Terraform infrastructure deployment by querying Azure DevOps for the pipeline run, checking Datadog for post-deploy health, and notifying the platform team in Microsoft Teams.
  tags:
  - infrastructure
  - devops
  - terraform
  - azure-devops
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-deploy
    port: 8080
    tools:
    - name: track-deployment
      description: Given a deployment pipeline ID and target environment, check deploy status, validate health, and notify the platform team.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps Terraform pipeline ID.
      - name: environment
        in: body
        type: string
        description: The target environment (dev, staging, prod).
      - name: service_name
        in: body
        type: string
        description: The service being deployed.
      steps:
      - name: check-deploy
        type: call
        call: azuredevops.get-latest-run
        with:
          pipeline_id: '{{pipeline_id}}'
      - name: check-health
        type: call
        call: datadog.get-service-metrics
        with:
          service_name: '{{service_name}}-{{environment}}'
      - name: notify-platform
        type: call
        call: msteams.send-message
        with:
          channel_id: platform-deployments
          text: 'Terraform Deploy: {{service_name}} to {{environment}}. Pipeline result: {{check-deploy.result}}. Post-deploy availability: {{check-health.availability_pct}}%. Alerts: {{check-health.active_alerts}}.'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/gsk-pharma/GSK-Platform/_apis
    authentication:
      type: basic
      username: ''
      password: $secrets.azuredevops_pat
    resources:
    - name: builds
      path: /build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: path
      operations:
      - name: get-latest-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?query=avg:system.cpu.idle{{service:{{service_name}}}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-provisioning-tracker.yml

Tracks contract renewals at GSK via contracts system, email, Jira, and Salesforce.

naftiko: '0.5'
info:
  label: Contract Renewal Pipeline
  description: Tracks contract renewals at GSK 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 GSK.
      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.gsk.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.gsk.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://gsk.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://gsk.com.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opps
      path: /sobjects/Opportunity
      operations:
      - name: update
        method: PATCH
Open in Framework → View in Fleet → contract-renewal-pipeline.yml

Remediates vulnerabilities at GSK via scanning, Jira, and Slack.

naftiko: '0.5'
info:
  label: Security Vulnerability Remediation Pipeline
  description: Remediates vulnerabilities at GSK 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 GSK.
      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.gsk.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://gsk.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → security-vulnerability-remediation-pipeline.yml

Onboards employees at GSK with Okta, ServiceNow, Slack, and calendar.

naftiko: '0.5'
info:
  label: New Employee IT Onboarding Pipeline
  description: Onboards employees at GSK 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 GSK.
      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://gsk.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://gsk.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: users
      path: /users.admin.invite
      operations:
      - name: invite
        method: POST
  - type: http
    namespace: calendar
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: events
      path: /users/hr/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → new-employee-it-onboarding-pipeline.yml

Checks SonarQube code quality gate status for a GxP application, creates a ServiceNow compliance record if the gate fails, and notifies the development team in Microsoft Teams.

naftiko: '0.5'
info:
  label: SonarQube GxP Code Quality Gate
  description: Checks SonarQube code quality gate status for a GxP application, creates a ServiceNow compliance record if the gate fails, and notifies the development team in Microsoft Teams.
  tags:
  - devops
  - code-quality
  - gxp
  - sonarqube
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: code-quality
    port: 8080
    tools:
    - name: check-quality-gate
      description: Given a SonarQube project key, check the quality gate status, and if failed, create a compliance record and notify the team.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The SonarQube project key.
      - name: application_name
        in: body
        type: string
        description: The GxP application name.
      steps:
      - name: get-gate-status
        type: call
        call: sonarqube.get-quality-gate
        with:
          project_key: '{{project_key}}'
      - name: create-compliance-record
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Code Quality Gate: {{application_name}} — {{get-gate-status.status}}'
          description: 'SonarQube project: {{project_key}}. Gate status: {{get-gate-status.status}}. Bugs: {{get-gate-status.bugs}}. Vulnerabilities: {{get-gate-status.vulnerabilities}}. Code smells: {{get-gate-status.code_smells}}.'
          assigned_group: GxP_Development
          category: code_quality
      - name: notify-devs
        type: call
        call: msteams.send-message
        with:
          channel_id: gxp-development
          text: 'Quality Gate {{get-gate-status.status}}: {{application_name}} ({{project_key}}). Bugs: {{get-gate-status.bugs}}, Vulns: {{get-gate-status.vulnerabilities}}. Task: {{create-compliance-record.number}}.'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://gsk-sonar.internal.gsk.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status?projectKey={{project_key}}
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sonarqube-gxp-code-quality-gate.yml

Detects payroll exceptions from ADP, looks up the employee in Workday, creates a ServiceNow HR case, and notifies the HR partner in Microsoft Teams.

naftiko: '0.5'
info:
  label: ADP Payroll Exception Alert
  description: Detects payroll exceptions from ADP, looks up the employee in Workday, creates a ServiceNow HR case, and notifies the HR partner in Microsoft Teams.
  tags:
  - hr
  - payroll
  - adp
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: payroll-exceptions
    port: 8080
    tools:
    - name: process-payroll-exception
      description: Given an ADP exception ID and employee ID, look up the employee, create an HR case, and notify the HR partner.
      inputParameters:
      - name: exception_id
        in: body
        type: string
        description: The ADP payroll exception identifier.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: exception_type
        in: body
        type: string
        description: Type of payroll exception (Overpayment, Underpayment, Tax-Withholding, Benefits).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-hr-case
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Payroll Exception: {{exception_type}} — {{get-employee.full_name}}'
          description: 'ADP Exception: {{exception_id}}. Employee: {{get-employee.full_name}} ({{employee_id}}). Department: {{get-employee.department}}. Type: {{exception_type}}.'
          assigned_group: HR_Payroll
          category: payroll_exception
      - name: notify-hr
        type: call
        call: msteams.send-message
        with:
          channel_id: hr-payroll
          text: 'Payroll Exception ({{exception_type}}): {{get-employee.full_name}} ({{get-employee.department}}). ADP: {{exception_id}}. Case: {{create-hr-case.number}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adp-payroll-exception-alert.yml

Reconciles clinical trial budgets by pulling actuals from SAP, comparing to planned costs in the clinical metadata system, flagging overruns in ServiceNow, and notifying finance in Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Budget Reconciliation
  description: Reconciles clinical trial budgets by pulling actuals from SAP, comparing to planned costs in the clinical metadata system, flagging overruns in ServiceNow, and notifying finance in Microsoft Teams.
  tags:
  - finance
  - clinical-trials
  - budget
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: trial-budget
    port: 8080
    tools:
    - name: reconcile-trial-budget
      description: Given a study ID and fiscal period, compare SAP actuals against planned budget and flag any overruns.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period (e.g. 2026-Q1).
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center for the trial.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-cost-center-actuals
        with:
          cost_center: '{{cost_center}}'
          period: '{{fiscal_period}}'
      - name: get-planned
        type: call
        call: clinicalmeta.get-study
        with:
          study_id: '{{study_id}}'
      - name: flag-overrun
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Budget Review: {{study_id}} — {{fiscal_period}}'
          description: 'Study: {{get-planned.study_title}}

            Cost Center: {{cost_center}}

            Actuals: {{get-actuals.total_actual}}

            Planned: {{get-planned.budget_amount}}

            Variance requires review.'
          assigned_group: Clinical_Finance
          category: budget_reconciliation
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-finance
          text: 'Budget Review: {{study_id}} ({{fiscal_period}}). Actuals: {{get-actuals.total_actual}} vs Planned: {{get-planned.budget_amount}}. Task: {{flag-overrun.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://gsk-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: cost-centers
      path: /A_CostCenter('{{cost_center}}')/to_Actuals(Period='{{period}}')
      inputParameters:
      - name: cost_center
        in: path
      - name: period
        in: path
      operations:
      - name: get-cost-center-actuals
        method: GET
  - type: http
    namespace: clinicalmeta
    baseUri: https://gsk-clinical-meta.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.clinical_meta_token
    resources:
    - name: studies
      path: /studies/{{study_id}}
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-study
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-budget-reconciliation.yml

Extracts demand forecast data from SAP BW, validates against Oracle Cloud inventory levels, and publishes a forecast vs. inventory dashboard summary to Microsoft Teams and a Confluence supply chain report.

naftiko: '0.5'
info:
  label: Supply Chain Demand Forecast Sync
  description: Extracts demand forecast data from SAP BW, validates against Oracle Cloud inventory levels, and publishes a forecast vs. inventory dashboard summary to Microsoft Teams and a Confluence supply chain report.
  tags:
  - supply-chain
  - forecasting
  - sap-bw
  - oracle-cloud
  - microsoft-teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: demand-forecast
    port: 8080
    tools:
    - name: sync-demand-forecast
      description: Given a material number and planning horizon, pull the SAP BW forecast, check Oracle inventory, and publish a summary to Teams and Confluence.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The material number to forecast.
      - name: planning_months
        in: body
        type: number
        description: Number of months for the planning horizon.
      - name: warehouse_code
        in: body
        type: string
        description: The primary warehouse code.
      steps:
      - name: get-forecast
        type: call
        call: sapbw.get-forecast
        with:
          material: '{{material_number}}'
          months: '{{planning_months}}'
      - name: get-inventory
        type: call
        call: oracle.get-onhand
        with:
          material_number: '{{material_number}}'
          warehouse_code: '{{warehouse_code}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-planning
          text: 'Demand Forecast Sync: {{material_number}}. Forecast ({{planning_months}}mo): {{get-forecast.total_demand}} units. Current inventory: {{get-inventory.on_hand_qty}} {{get-inventory.uom}} at {{warehouse_code}}.'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: SC
          title: 'Forecast Report: {{material_number}} — {{planning_months}}mo'
          body: 'Material: {{material_number}}

            Forecast Demand: {{get-forecast.total_demand}}

            Current Inventory: {{get-inventory.on_hand_qty}} {{get-inventory.uom}}

            Warehouse: {{warehouse_code}}

            Coverage: {{get-forecast.coverage_months}} months'
  consumes:
  - type: http
    namespace: sapbw
    baseUri: https://gsk-bw.sap.com/sap/opu/odata/sap/ZDEMAND_FORECAST_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    resources:
    - name: forecasts
      path: /ForecastSet(Material='{{material}}',Months={{months}})
      inputParameters:
      - name: material
        in: path
      - name: months
        in: path
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://gsk-cloud.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: inventory
      path: /inventoryOnhandBalances?q=ItemNumber={{material_number}};Subinventory={{warehouse_code}}
      inputParameters:
      - name: material_number
        in: path
      - name: warehouse_code
        in: path
      operations:
      - name: get-onhand
        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/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://gsk-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-forecast-sync.yml

Verifies backups at GSK.

naftiko: '0.5'
info:
  label: Backup Verification Pipeline
  description: Verifies backups at GSK.
  tags:
  - database
  - backup
  - operations
capability:
  exposes:
  - type: mcp
    namespace: backup-verify
    port: 8080
    tools:
    - name: verify-backups
      description: Verify backups at GSK.
      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.gsk.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://gsk.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → backup-verification-pipeline.yml

Reallocates costs at GSK.

naftiko: '0.5'
info:
  label: Cost Reallocation Pipeline
  description: Reallocates costs at GSK.
  tags:
  - finance
  - cost-allocation
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: cost-realloc
    port: 8080
    tools:
    - name: reallocate
      description: Reallocate costs at GSK.
      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.gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: realloc
      path: /compute
      operations:
      - name: realloc
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cost-reallocation-pipeline.yml

Retrieves sprint progress at GSK.

naftiko: '0.5'
info:
  label: Jira Sprint Progress Lookup
  description: Retrieves sprint progress at GSK.
  tags:
  - project-management
  - jira
  - agile
capability:
  exposes:
  - type: mcp
    namespace: jira-sprint
    port: 8080
    tools:
    - name: get-sprint
      description: Look up sprint at GSK.
      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://gsk.com.atlassian.net/rest/agile/1.0
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: sprints
      path: /board/1/sprint
      operations:
      - name: get-sprints
        method: GET
Open in Framework → View in Fleet → jira-sprint-progress-lookup.yml

Triggers an Argo workflow for clinical data processing, monitors completion, stores output in Amazon S3, and notifies the data science team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Argo Workflow Clinical Data Processing
  description: Triggers an Argo workflow for clinical data processing, monitors completion, stores output in Amazon S3, and notifies the data science team in Microsoft Teams.
  tags:
  - data-pipeline
  - clinical-trials
  - argo
  - amazon-s3
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-pipeline
    port: 8080
    tools:
    - name: run-data-pipeline
      description: Given a study ID and workflow template, trigger an Argo workflow for clinical data processing and store the output.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier.
      - name: workflow_template
        in: body
        type: string
        description: The Argo workflow template name.
      - name: output_prefix
        in: body
        type: string
        description: The S3 output prefix for processed data.
      steps:
      - name: trigger-workflow
        type: call
        call: argo.submit-workflow
        with:
          template: '{{workflow_template}}'
          study_id: '{{study_id}}'
      - name: store-output
        type: call
        call: s3.put-object
        with:
          bucket: gsk-clinical-data-processed
          key: '{{output_prefix}}/{{study_id}}/{{trigger-workflow.workflow_id}}'
      - name: notify-data-science
        type: call
        call: msteams.send-message
        with:
          channel_id: data-science
          text: 'Clinical data pipeline completed for {{study_id}}. Workflow: {{trigger-workflow.workflow_id}}. Status: {{trigger-workflow.status}}. Output: s3://gsk-clinical-data-processed/{{output_prefix}}/{{study_id}}/{{trigger-workflow.workflow_id}}'
  consumes:
  - type: http
    namespace: argo
    baseUri: https://gsk-argo.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.argo_token
    resources:
    - name: workflows
      path: /workflows/gsk-clinical
      operations:
      - name: submit-workflow
        method: POST
  - type: http
    namespace: s3
    baseUri: https://gsk-clinical-data-processed.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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → argo-workflow-clinical-data-processing.yml

Fetches an adverse event case from the pharmacovigilance safety database by case ID. Returns case status, seriousness, reporter type, and suspect product.

naftiko: '0.5'
info:
  label: Adverse Event Case Retrieval
  description: Fetches an adverse event case from the pharmacovigilance safety database by case ID. Returns case status, seriousness, reporter type, and suspect product.
  tags:
  - pharmacovigilance
  - drug-safety
  - safety-database
capability:
  exposes:
  - type: mcp
    namespace: pharmacovigilance
    port: 8080
    tools:
    - name: get-adverse-event
      description: Retrieve an adverse event case from the safety database by case number.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The safety database case identifier.
      call: safetydb.get-case
      with:
        case_id: '{{case_id}}'
      outputParameters:
      - name: case_status
        type: string
        mapping: $.caseStatus
      - name: seriousness
        type: string
        mapping: $.seriousnessCriteria
      - name: suspect_product
        type: string
        mapping: $.suspectProduct.productName
      - name: reporter_type
        type: string
        mapping: $.primaryReporter.reporterType
      - name: receipt_date
        type: string
        mapping: $.receiptDate
  consumes:
  - type: http
    namespace: safetydb
    baseUri: https://gsk-safety.veeva.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_safety_token
    resources:
    - name: cases
      path: /objects/adverse_event/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → adverse-event-case-retrieval.yml

Escalates IT incidents at GSK via ServiceNow, PagerDuty, and Slack.

naftiko: '0.5'
info:
  label: IT Incident Escalation Pipeline
  description: Escalates IT incidents at GSK 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 GSK.
      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://gsk.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: channels
      path: /conversations.create
      operations:
      - name: create-channel
        method: POST
Open in Framework → View in Fleet → it-incident-escalation-pipeline.yml

Checks Vault secret at GSK.

naftiko: '0.5'
info:
  label: Vault Secret Metadata
  description: Checks Vault secret at GSK.
  tags:
  - security
  - vault
  - secrets-management
capability:
  exposes:
  - type: mcp
    namespace: vault
    port: 8080
    tools:
    - name: check-secret
      description: Check secret at GSK.
      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.gsk.com/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: secrets
      path: /secret/metadata/{{path}}
      inputParameters:
      - name: path
        in: path
      operations:
      - name: get-metadata
        method: GET
Open in Framework → View in Fleet → vault-secret-metadata.yml

Queries Datadog for current health metrics of a GxP-validated system by service name. Returns availability percentage, error rate, and active alert count.

naftiko: '0.5'
info:
  label: Datadog GxP System Health Check
  description: Queries Datadog for current health metrics of a GxP-validated system by service name. Returns availability percentage, error rate, and active alert count.
  tags:
  - monitoring
  - gxp
  - datadog
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: system-health
    port: 8080
    tools:
    - name: get-system-health
      description: Retrieve Datadog health metrics for a GxP-validated system service.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name (e.g. gsk-lims-prod).
      call: datadog.get-service-metrics
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: availability_pct
        type: number
        mapping: $.series[0].pointlist[-1][1]
      - name: error_rate
        type: number
        mapping: $.series[1].pointlist[-1][1]
      - name: active_alerts
        type: number
        mapping: $.alerts.total
  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?query=avg:system.cpu.idle{{service:{{service_name}}}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-metrics
        method: GET
Open in Framework → View in Fleet → datadog-gxp-system-health-check.yml

Retrieves a regulatory standard operating procedure page from Confluence by SOP number. Returns page content, version, and last updated date.

naftiko: '0.5'
info:
  label: Confluence Regulatory SOP Retrieval
  description: Retrieves a regulatory standard operating procedure page from Confluence by SOP number. Returns page content, version, and last updated date.
  tags:
  - regulatory
  - sop
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: regulatory-docs
    port: 8080
    tools:
    - name: get-sop-page
      description: Retrieve a regulatory SOP from Confluence by SOP number.
      inputParameters:
      - name: sop_number
        in: body
        type: string
        description: The SOP identifier (e.g. SOP-QA-0042).
      call: confluence.get-page
      with:
        sop_number: '{{sop_number}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: version
        type: string
        mapping: $.version.number
      - name: last_updated
        type: string
        mapping: $.version.when
      - name: body_html
        type: string
        mapping: $.body.storage.value
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://gsk-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content?title={{sop_number}}&spaceKey=REG&expand=body.storage,version
      inputParameters:
      - name: sop_number
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-regulatory-sop-retrieval.yml

Generates compliance reports at GSK from Snowflake, Power BI, and email.

naftiko: '0.5'
info:
  label: Quarterly Compliance Report Pipeline
  description: Generates compliance reports at GSK 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 GSK.
      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://gsk.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.gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → quarterly-compliance-report-pipeline.yml

Tests disaster recovery at GSK via failover, health checks, and reporting.

naftiko: '0.5'
info:
  label: DR Test Pipeline
  description: Tests disaster recovery at GSK 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 GSK.
      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.gsk.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.gsk.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://gsk.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → dr-test-pipeline.yml

Ingests experiment results from the lab data system via Apache NiFi, validates data quality with SonarQube scanning rules, stores processed results in PostgreSQL, and notifies the research lead in Microsoft Teams.

naftiko: '0.5'
info:
  label: R&D Experiment Data Pipeline
  description: Ingests experiment results from the lab data system via Apache NiFi, validates data quality with SonarQube scanning rules, stores processed results in PostgreSQL, and notifies the research lead in Microsoft Teams.
  tags:
  - r-and-d
  - data-pipeline
  - apache-nifi
  - sonarqube
  - postgresql
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rd-data-pipeline
    port: 8080
    tools:
    - name: ingest-experiment-data
      description: Given an experiment ID and data source, trigger the NiFi ingestion flow, validate data, store results, and notify the research lead.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: The unique experiment identifier.
      - name: data_source_uri
        in: body
        type: string
        description: The URI of the raw experiment data file.
      - name: research_lead_email
        in: body
        type: string
        description: The email of the research lead to notify.
      steps:
      - name: trigger-ingestion
        type: call
        call: nifi.trigger-flow
        with:
          processor_group_id: experiment-ingestion
          experiment_id: '{{experiment_id}}'
          source_uri: '{{data_source_uri}}'
      - name: store-results
        type: call
        call: labdb.insert-results
        with:
          experiment_id: '{{experiment_id}}'
          flow_id: '{{trigger-ingestion.flow_file_id}}'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{research_lead_email}}'
          text: 'Experiment {{experiment_id}} data ingested successfully. Records stored: {{store-results.row_count}}. Flow: {{trigger-ingestion.flow_file_id}}.'
  consumes:
  - type: http
    namespace: nifi
    baseUri: https://gsk-nifi.internal.gsk.com/nifi-api
    authentication:
      type: bearer
      token: $secrets.nifi_token
    resources:
    - name: process-groups
      path: /process-groups/{{processor_group_id}}/process-groups
      inputParameters:
      - name: processor_group_id
        in: path
      operations:
      - name: trigger-flow
        method: POST
  - type: http
    namespace: labdb
    baseUri: https://gsk-lab-api.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lab_db_token
    resources:
    - name: results
      path: /experiments/{{experiment_id}}/results
      inputParameters:
      - name: experiment_id
        in: path
      operations:
      - name: insert-results
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → r-d-experiment-data-pipeline.yml

Checks Grafana dashboard at GSK.

naftiko: '0.5'
info:
  label: Grafana Dashboard Status
  description: Checks Grafana dashboard at GSK.
  tags:
  - monitoring
  - grafana
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: check-dash
      description: Check dashboard at GSK.
      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.gsk.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dash
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-status.yml

Generates monthly security reports at GSK from Splunk and Qualys.

naftiko: '0.5'
info:
  label: Monthly Security Report Pipeline
  description: Generates monthly security reports at GSK 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 GSK.
      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.gsk.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.gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → monthly-security-report-pipeline.yml

Retrieves Teams activity at GSK.

naftiko: '0.5'
info:
  label: Teams Channel Activity
  description: Retrieves Teams activity at GSK.
  tags:
  - communications
  - microsoft-teams
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: teams-activity
    port: 8080
    tools:
    - name: get-activity
      description: Check Teams activity at GSK.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Team ID.
      - name: channel_id
        in: body
        type: string
        description: Channel ID.
      call: teams.get-messages
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
      outputParameters:
      - name: count
        type: number
        mapping: $.value.length
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: get-messages
        method: GET
Open in Framework → View in Fleet → teams-channel-activity.yml

Retrieves a manufacturing batch record from SAP S/4HANA by batch number. Returns batch status, production date, material, and quantity for GMP compliance checks.

naftiko: '0.5'
info:
  label: SAP Batch Record Lookup
  description: Retrieves a manufacturing batch record from SAP S/4HANA by batch number. Returns batch status, production date, material, and quantity for GMP compliance checks.
  tags:
  - manufacturing
  - gmp
  - sap
  - batch-record
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-batch
    port: 8080
    tools:
    - name: get-batch-record
      description: Look up a manufacturing batch record by batch number in SAP. Returns status, material, production date, and quantity.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number (10-digit).
      call: sap.get-batch
      with:
        batch_number: '{{batch_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.BatchStatus
      - name: material
        type: string
        mapping: $.d.Material
      - name: production_date
        type: string
        mapping: $.d.ProductionDate
      - name: quantity
        type: string
        mapping: $.d.TotalQuantity
      - name: uom
        type: string
        mapping: $.d.UnitOfMeasure
  consumes:
  - type: http
    namespace: sap
    baseUri: https://gsk-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: batches
      path: /A_Batch('{{batch_number}}')
      inputParameters:
      - name: batch_number
        in: path
      operations:
      - name: get-batch
        method: GET
Open in Framework → View in Fleet → sap-batch-record-lookup.yml

Exports an audit trail from the GxP system for a specified date range, stores the export in Amazon S3, creates a ServiceNow tracking record, and notifies the compliance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: GxP Audit Trail Export
  description: Exports an audit trail from the GxP system for a specified date range, stores the export in Amazon S3, creates a ServiceNow tracking record, and notifies the compliance team in Microsoft Teams.
  tags:
  - compliance
  - gxp
  - audit-trail
  - amazon-s3
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: audit-trail
    port: 8080
    tools:
    - name: export-audit-trail
      description: Given a system name and date range, export the audit trail, store in S3, create a tracking record, and notify compliance.
      inputParameters:
      - name: system_name
        in: body
        type: string
        description: The GxP system name.
      - name: date_from
        in: body
        type: string
        description: Start date (YYYY-MM-DD).
      - name: date_to
        in: body
        type: string
        description: End date (YYYY-MM-DD).
      steps:
      - name: upload-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: gsk-gxp-audit-trails
          key: '{{system_name}}/{{date_from}}_to_{{date_to}}.json'
      - name: create-tracking
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Audit Trail Export: {{system_name}} ({{date_from}} to {{date_to}})'
          description: 'Audit trail exported for {{system_name}}. Period: {{date_from}} to {{date_to}}. S3 location: s3://gsk-gxp-audit-trails/{{system_name}}/{{date_from}}_to_{{date_to}}.json'
          assigned_group: GxP_Compliance
          category: audit_trail
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: gxp-compliance
          text: 'Audit Trail Export: {{system_name}} ({{date_from}} to {{date_to}}). Stored in S3. Tracking: {{create-tracking.number}}.'
  consumes:
  - type: http
    namespace: s3
    baseUri: https://gsk-gxp-audit-trails.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
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → gxp-audit-trail-export.yml

Manages API deprecation at GSK via consumer identification, notices, and tracking.

naftiko: '0.5'
info:
  label: API Deprecation Pipeline
  description: Manages API deprecation at GSK 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 GSK.
      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.gsk.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.gsk.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.gsk.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://gsk.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → api-deprecation-pipeline.yml

Checks build at GSK.

naftiko: '0.5'
info:
  label: Azure DevOps Build Check
  description: Checks build at GSK.
  tags:
  - devops
  - azure-devops
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: azdo-build
    port: 8080
    tools:
    - name: check-build
      description: Check build at GSK.
      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/gsk.com
    authentication:
      type: bearer
      token: $secrets.azdo_token
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds/{{build_id}}
      inputParameters:
      - name: project
        in: path
      - name: build_id
        in: path
      operations:
      - name: get-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-check.yml

Queries the clinical metadata repository in PostgreSQL for study configuration details including endpoints, arms, and visit schedule.

naftiko: '0.5'
info:
  label: PostgreSQL Clinical Metadata Query
  description: Queries the clinical metadata repository in PostgreSQL for study configuration details including endpoints, arms, and visit schedule.
  tags:
  - clinical-trials
  - data
  - postgresql
  - metadata
capability:
  exposes:
  - type: mcp
    namespace: clinical-metadata
    port: 8080
    tools:
    - name: get-study-metadata
      description: Retrieve clinical study metadata from the PostgreSQL metadata repository.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier.
      call: clinicalmeta.get-study
      with:
        study_id: '{{study_id}}'
      outputParameters:
      - name: study_title
        type: string
        mapping: $.study_title
      - name: phase
        type: string
        mapping: $.phase
      - name: primary_endpoint
        type: string
        mapping: $.primary_endpoint
      - name: enrollment_target
        type: number
        mapping: $.target_enrollment
  consumes:
  - type: http
    namespace: clinicalmeta
    baseUri: https://gsk-clinical-meta.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.clinical_meta_token
    resources:
    - name: studies
      path: /studies/{{study_id}}
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-study
        method: GET
Open in Framework → View in Fleet → postgresql-clinical-metadata-query.yml

Provisions clinical trial portal access for an external investigator by creating a Keycloak user, assigning study-specific roles, and notifying the clinical operations team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Keycloak Clinical Portal Access Provisioning
  description: Provisions clinical trial portal access for an external investigator by creating a Keycloak user, assigning study-specific roles, and notifying the clinical operations team in Microsoft Teams.
  tags:
  - identity
  - clinical-trials
  - keycloak
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-access
    port: 8080
    tools:
    - name: provision-portal-access
      description: Given an investigator email and study ID, create a Keycloak account with the appropriate role and notify clinical ops.
      inputParameters:
      - name: investigator_email
        in: body
        type: string
        description: The investigator email address.
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier.
      - name: role
        in: body
        type: string
        description: The portal role (Investigator, Sub-Investigator, Study-Coordinator).
      steps:
      - name: create-user
        type: call
        call: keycloak.create-user
        with:
          realm: clinical-portal
          email: '{{investigator_email}}'
          role: '{{study_id}}-{{role}}'
      - name: notify-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-operations
          text: 'Portal access provisioned: {{investigator_email}} as {{role}} for study {{study_id}}. Keycloak user: {{create-user.user_id}}.'
  consumes:
  - type: http
    namespace: keycloak
    baseUri: https://gsk-auth.internal.gsk.com/auth/admin/realms
    authentication:
      type: bearer
      token: $secrets.keycloak_admin_token
    resources:
    - name: users
      path: /{{realm}}/users
      inputParameters:
      - name: realm
        in: path
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → keycloak-clinical-portal-access-provisioning.yml

Retrieves a regulatory guidance document from Google Drive by file ID. Returns file name, MIME type, download link, and last modified date for regulatory affairs reference.

naftiko: '0.5'
info:
  label: Google Drive Regulatory Document Retrieval
  description: Retrieves a regulatory guidance document from Google Drive by file ID. Returns file name, MIME type, download link, and last modified date for regulatory affairs reference.
  tags:
  - regulatory
  - document-management
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: reg-docs-gdrive
    port: 8080
    tools:
    - name: get-regulatory-document
      description: Retrieve a regulatory guidance document from Google Drive by file ID.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Google Drive file ID.
      call: gdrive.get-file
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: mime_type
        type: string
        mapping: $.mimeType
      - name: download_link
        type: string
        mapping: $.webContentLink
      - name: modified_time
        type: string
        mapping: $.modifiedTime
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}?fields=name,mimeType,webContentLink,modifiedTime
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → google-drive-regulatory-document-retrieval.yml

Monitors drug product stability data by pulling time-point results from the lab database, checking against specification limits, flagging OOT trends in ServiceNow, and notifying the stability lead in Microsoft Teams.

naftiko: '0.5'
info:
  label: Drug Product Stability Study Monitor
  description: Monitors drug product stability data by pulling time-point results from the lab database, checking against specification limits, flagging OOT trends in ServiceNow, and notifying the stability lead in Microsoft Teams.
  tags:
  - quality
  - stability
  - manufacturing
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: stability-monitor
    port: 8080
    tools:
    - name: check-stability-data
      description: Given a product code and stability protocol, pull the latest time-point results, check for out-of-trend conditions, and notify if needed.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: The drug product code.
      - name: stability_protocol_id
        in: body
        type: string
        description: The stability study protocol identifier.
      - name: time_point
        in: body
        type: string
        description: The stability time point (e.g. 6M, 12M, 24M).
      steps:
      - name: get-results
        type: call
        call: labdb.get-stability-results
        with:
          product_code: '{{product_code}}'
          protocol_id: '{{stability_protocol_id}}'
          time_point: '{{time_point}}'
      - name: flag-oot
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Stability Review: {{product_code}} — {{time_point}}'
          description: 'Protocol: {{stability_protocol_id}}. Time point: {{time_point}}. Assay: {{get-results.assay_value}}%. Impurity: {{get-results.impurity_value}}%. Review for OOT.'
          assigned_group: Stability_Quality
          category: stability_monitoring
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          channel_id: stability-monitoring
          text: 'Stability Data: {{product_code}} at {{time_point}}. Assay: {{get-results.assay_value}}%. Impurity: {{get-results.impurity_value}}%. Task: {{flag-oot.number}}.'
  consumes:
  - type: http
    namespace: labdb
    baseUri: https://gsk-lab-api.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lab_db_token
    resources:
    - name: stability
      path: /stability/{{product_code}}/{{protocol_id}}/{{time_point}}
      inputParameters:
      - name: product_code
        in: path
      - name: protocol_id
        in: path
      - name: time_point
        in: path
      operations:
      - name: get-stability-results
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → drug-product-stability-study-monitor.yml

On new hire creation in Workday, provisions a ServiceNow onboarding ticket, creates a SharePoint folder for lab documentation, sends a Microsoft Teams welcome message, and grants GitLab access to research repositories.

naftiko: '0.5'
info:
  label: Employee Onboarding for R&D Scientists
  description: On new hire creation in Workday, provisions a ServiceNow onboarding ticket, creates a SharePoint folder for lab documentation, sends a Microsoft Teams welcome message, and grants GitLab access to research repositories.
  tags:
  - hr
  - onboarding
  - r-and-d
  - workday
  - servicenow
  - sharepoint
  - microsoft-teams
  - gitlab
capability:
  exposes:
  - type: mcp
    namespace: rd-onboarding
    port: 8080
    tools:
    - name: onboard-rd-scientist
      description: Given a Workday employee ID and start date, orchestrate R&D scientist onboarding across ServiceNow, SharePoint, Teams, and GitLab.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The employee start date in YYYY-MM-DD format.
      - name: lab_group
        in: body
        type: string
        description: The R&D lab group the scientist is joining.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'R&D Onboarding: {{get-employee.full_name}} — {{lab_group}}'
          category: rd_onboarding
          assigned_group: IT_RD_Onboarding
          description: Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{lab_group}}. Lab access, ELN provisioning, and instrument training required.
      - name: create-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: rd_lab_docs_site
          folder_path: Scientists/{{get-employee.full_name}}_{{start_date}}
      - name: grant-gitlab
        type: call
        call: gitlab.add-group-member
        with:
          group_id: '{{lab_group}}'
          user_email: '{{get-employee.work_email}}'
          access_level: '30'
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Welcome to GSK R&D, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Lab docs: {{create-folder.url}}. GitLab access to {{lab_group}} has been provisioned.'
  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://gsk.service-now.com/api/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: gitlab
    baseUri: https://gitlab.gsk.com/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: group-members
      path: /groups/{{group_id}}/members
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: add-group-member
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-onboarding-for-r-d-scientists.yml

Checks Pluralsight skills assessment completion for GxP-required competencies, cross-references with the employee record in Workday, flags non-compliant staff in ServiceNow, and notifies department managers in Microsoft Teams.

naftiko: '0.5'
info:
  label: Pluralsight GxP Skills Compliance Orchestrator
  description: Checks Pluralsight skills assessment completion for GxP-required competencies, cross-references with the employee record in Workday, flags non-compliant staff in ServiceNow, and notifies department managers in Microsoft Teams.
  tags:
  - compliance
  - training
  - gxp
  - pluralsight
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: skills-compliance
    port: 8080
    tools:
    - name: check-skills-compliance
      description: Given a Pluralsight channel ID and department, check skill assessment completion for GxP roles and flag non-compliant staff.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Pluralsight channel ID for the GxP skill path.
      - name: department
        in: body
        type: string
        description: The department to audit.
      - name: minimum_score
        in: body
        type: number
        description: The minimum passing score percentage.
      steps:
      - name: get-channel-analytics
        type: call
        call: pluralsight.get-channel-analytics
        with:
          channel_id: '{{channel_id}}'
          department: '{{department}}'
      - name: create-compliance-case
        type: call
        call: servicenow.create-task
        with:
          short_description: 'GxP Skills Audit: {{department}} — Pluralsight Channel {{channel_id}}'
          description: 'Department: {{department}}. Enrolled: {{get-channel-analytics.enrolled_count}}. Completed: {{get-channel-analytics.completed_count}}. Below minimum ({{minimum_score}}%): {{get-channel-analytics.below_threshold_count}}.'
          assigned_group: Quality_Training
          category: skills_compliance
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: gxp-training
          text: 'GxP Skills Audit: {{department}}. Enrolled: {{get-channel-analytics.enrolled_count}}. Completed: {{get-channel-analytics.completed_count}}. Non-compliant: {{get-channel-analytics.below_threshold_count}}. Case: {{create-compliance-case.number}}.'
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://app.pluralsight.com/plans/api/reports/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: channels
      path: /channels/{{channel_id}}/analytics?department={{department}}
      inputParameters:
      - name: channel_id
        in: path
      - name: department
        in: path
      operations:
      - name: get-channel-analytics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pluralsight-gxp-skills-compliance-orchestrator.yml

Creates postmortems at GSK.

naftiko: '0.5'
info:
  label: Incident Postmortem Pipeline
  description: Creates postmortems at GSK.
  tags:
  - incident-management
  - postmortem
  - pagerduty
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: postmortem
    port: 8080
    tools:
    - name: create-postmortem
      description: Create postmortem at GSK.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: Incident ID.
      steps:
      - name: timeline
        type: call
        call: pagerduty.get-log
        with:
          id: '{{incident_id}}'
      - name: metrics
        type: call
        call: datadog.get-metrics
        with:
          incident: '{{incident_id}}'
      - name: doc
        type: call
        call: confluence.create-page
        with:
          title: 'Postmortem: {{timeline.title}}'
          body: 'Impact: {{metrics.impact}}'
      - name: review
        type: call
        call: calendar.create-event
        with:
          title: 'Review: {{timeline.title}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents/{{id}}/log_entries
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-log
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://gsk.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        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/sre/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → incident-postmortem-pipeline.yml

Offboards employees at GSK via Okta, Slack, ServiceNow, and storage.

naftiko: '0.5'
info:
  label: Employee Offboarding Pipeline
  description: Offboards employees at GSK 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 GSK.
      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://gsk.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://gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.storage_token
    resources:
    - name: archives
      path: /archive
      operations:
      - name: archive
        method: POST
Open in Framework → View in Fleet → employee-offboarding-pipeline.yml

Pulls vaccine campaign web analytics from Google Analytics, enriches with Salesforce campaign data, and publishes a performance summary to Confluence and Microsoft Teams.

naftiko: '0.5'
info:
  label: Google Analytics Vaccine Campaign Tracker
  description: Pulls vaccine campaign web analytics from Google Analytics, enriches with Salesforce campaign data, and publishes a performance summary to Confluence and Microsoft Teams.
  tags:
  - commercial
  - marketing
  - vaccines
  - google-analytics
  - salesforce
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vaccine-campaign
    port: 8080
    tools:
    - name: track-vaccine-campaign
      description: Given a Google Analytics property ID and Salesforce campaign ID, pull web metrics, enrich with CRM data, and publish a summary.
      inputParameters:
      - name: ga_property_id
        in: body
        type: string
        description: The Google Analytics property ID.
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID.
      - name: date_range
        in: body
        type: string
        description: Date range for analytics (e.g. last7days, last30days).
      steps:
      - name: get-ga-metrics
        type: call
        call: googleanalytics.get-report
        with:
          property_id: '{{ga_property_id}}'
          date_range: '{{date_range}}'
      - name: get-campaign
        type: call
        call: salesforce.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: publish-summary
        type: call
        call: confluence.create-page
        with:
          space_key: MKT
          title: 'Campaign Report: {{get-campaign.name}} — {{date_range}}'
          body: 'Campaign: {{get-campaign.name}}

            Sessions: {{get-ga-metrics.sessions}}

            Conversions: {{get-ga-metrics.conversions}}

            Bounce Rate: {{get-ga-metrics.bounce_rate}}%

            Salesforce Leads: {{get-campaign.number_of_leads}}'
      - name: notify-marketing
        type: call
        call: msteams.send-message
        with:
          channel_id: vaccine-marketing
          text: 'Campaign Update: {{get-campaign.name}}. Sessions: {{get-ga-metrics.sessions}}. Conversions: {{get-ga-metrics.conversions}}. Leads: {{get-campaign.number_of_leads}}.'
  consumes:
  - type: http
    namespace: googleanalytics
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://gsk.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://gsk-wiki.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/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-analytics-vaccine-campaign-tracker.yml

Processes invoices at GSK via OCR, SAP matching, approval, and Oracle recording.

naftiko: '0.5'
info:
  label: Vendor Invoice Processing Pipeline
  description: Processes invoices at GSK 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 GSK.
      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.gsk.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.gsk.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.gsk.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.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: create-payment
        method: POST
Open in Framework → View in Fleet → vendor-invoice-processing-pipeline.yml

Processes an Individual Case Safety Report by creating the case in the safety database, submitting to the regulatory gateway, notifying the PV team in Microsoft Teams, and logging the submission in ServiceNow.

naftiko: '0.5'
info:
  label: Pharmacovigilance ICSR Expedited Reporting
  description: Processes an Individual Case Safety Report by creating the case in the safety database, submitting to the regulatory gateway, notifying the PV team in Microsoft Teams, and logging the submission in ServiceNow.
  tags:
  - pharmacovigilance
  - icsr
  - regulatory
  - drug-safety
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: icsr-reporting
    port: 8080
    tools:
    - name: submit-expedited-icsr
      description: Given ICSR details, create a safety case, submit to the regulatory gateway, notify the PV team, and log the submission.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The safety database case ID.
      - name: regulatory_authority
        in: body
        type: string
        description: Target regulatory authority (FDA, EMA, MHRA).
      - name: report_type
        in: body
        type: string
        description: Report type (Initial, Follow-Up, Final).
      - name: due_date
        in: body
        type: string
        description: Regulatory reporting due date (YYYY-MM-DD).
      steps:
      - name: get-case
        type: call
        call: safetydb.get-case
        with:
          case_id: '{{case_id}}'
      - name: submit-to-gateway
        type: call
        call: reggateway.submit-icsr
        with:
          case_id: '{{case_id}}'
          authority: '{{regulatory_authority}}'
          report_type: '{{report_type}}'
      - name: log-submission
        type: call
        call: servicenow.create-task
        with:
          short_description: 'ICSR Submitted: {{case_id}} to {{regulatory_authority}}'
          description: 'Case: {{case_id}}. Product: {{get-case.suspect_product}}. Seriousness: {{get-case.seriousness}}. Report type: {{report_type}}. Due: {{due_date}}. Gateway ID: {{submit-to-gateway.submission_id}}.'
          assigned_group: PV_Regulatory_Reporting
          category: icsr_submission
      - name: notify-pv
        type: call
        call: msteams.send-message
        with:
          channel_id: pv-expedited-reports
          text: 'ICSR Submitted: Case {{case_id}} ({{get-case.suspect_product}}, {{get-case.seriousness}}) — {{report_type}} to {{regulatory_authority}}. Gateway: {{submit-to-gateway.submission_id}}. Due: {{due_date}}.'
  consumes:
  - type: http
    namespace: safetydb
    baseUri: https://gsk-safety.veeva.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_safety_token
    resources:
    - name: cases
      path: /objects/adverse_event/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: reggateway
    baseUri: https://gsk-regulatory-gateway.internal.gsk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.reg_gateway_token
    resources:
    - name: submissions
      path: /icsr/submit
      operations:
      - name: submit-icsr
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gsk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/gsk-pharma/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-icsr-expedited-reporting.yml

Triggers a Power BI dataset refresh for the Humana healthcare analytics dashboard and notifies the analytics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Healthcare Analytics Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the Humana healthcare analytics dashboard and notifies the analytics team via Microsoft Teams.
  tags:
  - healthcare
  - analytics
  - power-bi
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics-reporting
    port: 8080
    tools:
    - name: refresh-analytics-dashboard
      description: Trigger a Power BI dataset refresh for the Humana healthcare analytics dashboard and notify the analytics team channel in Microsoft Teams that data is current.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the Humana analytics dashboard.
      - name: period
        in: body
        type: string
        description: The reporting period being refreshed, e.g. 2026-Q1.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-analytics
        type: call
        call: msteams-analytics.post-channel-message
        with:
          channel_id: $secrets.analytics_channel_id
          message: Humana analytics dashboard refreshed for {{period}}. Dataset {{dataset_id}} is now current.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams-analytics
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-healthcare-analytics-dashboard-refresh.yml

Retrieves open job requisitions from Workday Recruiting for Humana and publishes a weekly status digest to the HR Confluence page.

naftiko: '0.5'
info:
  label: Workday Recruiting Pipeline Digest
  description: Retrieves open job requisitions from Workday Recruiting for Humana and publishes a weekly status digest to the HR Confluence page.
  tags:
  - hr
  - recruiting
  - workday
  - confluence
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: talent-ops
    port: 8080
    tools:
    - name: publish-recruiting-digest
      description: Retrieve all open Humana job requisitions from Workday Recruiting, count openings by department, and publish a weekly summary to the HR Confluence space.
      inputParameters:
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID where the recruiting digest should be published.
      steps:
      - name: get-open-reqs
        type: call
        call: workday-recruit.list-job-requisitions
        with:
          status: Open
      - name: publish-page
        type: call
        call: confluence-hr.update-page
        with:
          page_id: '{{confluence_page_id}}'
          content: 'Open Requisitions: {{get-open-reqs.total_count}}. By Department: {{get-open-reqs.by_department}}'
  consumes:
  - type: http
    namespace: workday-recruit
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /humana/jobRequisitions
      inputParameters:
      - name: status
        in: query
      operations:
      - name: list-job-requisitions
        method: GET
  - type: http
    namespace: confluence-hr
    baseUri: https://humana.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → workday-recruiting-pipeline-digest.yml

Fetches LinkedIn Campaign Manager metrics for Humana employer brand campaigns and publishes a weekly digest to the HR SharePoint site.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Campaign Digest
  description: Fetches LinkedIn Campaign Manager metrics for Humana employer brand campaigns and publishes a weekly digest to the HR SharePoint site.
  tags:
  - marketing
  - social
  - linkedin
  - sharepoint
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: talent-brand
    port: 8080
    tools:
    - name: digest-linkedin-campaign
      description: Given a LinkedIn campaign ID and date range, retrieve impressions, clicks, and applications for Humana employer brand campaigns, then publish a digest to the Humana Careers SharePoint page.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The LinkedIn Campaign Manager campaign ID.
      - name: start_date
        in: body
        type: string
        description: Report start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Report end date in YYYY-MM-DD format.
      steps:
      - name: get-campaign-stats
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{campaign_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: publish-digest
        type: call
        call: sharepoint.create-page
        with:
          site_id: $secrets.talent_brand_site_id
          title: LinkedIn Campaign Report {{campaign_id}} {{start_date}} to {{end_date}}
          content: 'Impressions: {{get-campaign-stats.impressions}} | Clicks: {{get-campaign-stats.clicks}} | Applications: {{get-campaign-stats.applications}}'
  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
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: pages
      path: /sites/{{site_id}}/pages
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-campaign-digest.yml

Checks Informatica IICS pipeline run status for Humana's member data pipelines and alerts the data engineering team via Teams if any pipelines have failed.

naftiko: '0.5'
info:
  label: Informatica Healthcare Data Pipeline Monitoring
  description: Checks Informatica IICS pipeline run status for Humana's member data pipelines and alerts the data engineering team via Teams if any pipelines have failed.
  tags:
  - data
  - monitoring
  - informatica
  - microsoft-teams
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-ops
    port: 8080
    tools:
    - name: monitor-healthcare-pipelines
      description: List recent Informatica IICS pipeline runs for Humana member data workflows, identify any failures in the last hour, and send an alert to the data engineering Teams channel.
      inputParameters:
      - name: org_id
        in: body
        type: string
        description: The Informatica IICS organization ID for the Humana environment.
      steps:
      - name: get-failed-runs
        type: call
        call: informatica.list-activity-log
        with:
          org_id: '{{org_id}}'
          status: FAILED
      - name: send-alert
        type: call
        call: msteams-informatica.post-channel-message
        with:
          channel_id: $secrets.data_eng_channel_id
          message: 'Humana Informatica alert: {{get-failed-runs.count}} member data pipelines failed. First failure: {{get-failed-runs.first_pipeline_name}}'
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://usw3.dm-us.informaticacloud.com/saas/public/core/v3
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: activity-log
      path: /activityLog
      inputParameters:
      - name: status
        in: query
      operations:
      - name: list-activity-log
        method: GET
  - type: http
    namespace: msteams-informatica
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → informatica-healthcare-data-pipeline-monitoring.yml

When a P1 incident is raised in ServiceNow for Humana healthcare systems, pages the on-call engineer via PagerDuty and posts a war-room message to Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow P1 Incident Response Chain
  description: When a P1 incident is raised in ServiceNow for Humana healthcare systems, pages the on-call engineer via PagerDuty and posts a war-room message to Microsoft Teams.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-p1-incident
      description: Given a ServiceNow P1 incident number for a Humana healthcare platform outage, page the on-call engineer via PagerDuty and post a war-room message to the IT ops Teams channel.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. INC0012345.
      steps:
      - name: get-incident
        type: call
        call: servicenow-read.get-incident
        with:
          number: '{{incident_number}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1: {{get-incident.short_description}}'
          service_id: $secrets.pagerduty_service_id
          details: 'SNOW: {{incident_number}}'
      - name: post-warroom
        type: call
        call: msteams-war.post-channel-message
        with:
          channel_id: $secrets.warroom_channel_id
          message: 'P1 INCIDENT: {{get-incident.short_description}} | PagerDuty: {{page-oncall.incident_id}}'
  consumes:
  - type: http
    namespace: servicenow-read
    baseUri: https://humana.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: 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: msteams-war
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-p1-incident-response-chain.yml

Retrieves submitted SAP Concur expense reports for Humana employees, validates against T&E policy, and flags non-compliant reports in ServiceNow.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Audit
  description: Retrieves submitted SAP Concur expense reports for Humana employees, validates against T&E policy, and flags non-compliant reports in ServiceNow.
  tags:
  - finance
  - expense-management
  - sap-concur
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: finance-compliance
    port: 8080
    tools:
    - name: audit-expense-report
      description: Given a SAP Concur expense report ID, retrieve the line items, validate against Humana travel and expense policy, and open a ServiceNow compliance task if violations are detected.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: flag-violation
        type: call
        call: servicenow-fin.create-incident
        with:
          short_description: 'Expense policy violation: Report {{report_id}}'
          description: Concur report {{report_id}} by {{get-report.employee_name}} contains items requiring review per Humana T&E policy.
          category: finance_compliance
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: servicenow-fin
    baseUri: https://humana.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-audit.yml

On a GitHub Actions workflow failure on a protected branch, creates a Jira bug and alerts the Humana engineering Teams channel.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Handler
  description: On a GitHub Actions workflow failure on a protected branch, creates a Jira bug and alerts the Humana engineering Teams channel.
  tags:
  - devops
  - cicd
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions pipeline failure with repo, workflow, branch, and run URL, open a Jira engineering bug and post an alert to the Humana engineering Teams channel.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository full name, e.g. humana/member-portal.
      - name: workflow_name
        in: body
        type: string
        description: The name of the failed GitHub Actions workflow.
      - name: branch
        in: body
        type: string
        description: The branch on which the pipeline failed.
      - name: run_url
        in: body
        type: string
        description: The URL to the failed GitHub Actions run.
      - name: commit_sha
        in: body
        type: string
        description: The commit SHA that triggered the pipeline.
      steps:
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo_name}} / {{branch}} — {{workflow_name}}'
          description: 'Repo: {{repo_name}}

            Branch: {{branch}}

            Commit: {{commit_sha}}

            Run: {{run_url}}'
      - name: notify-engineering
        type: call
        call: msteams-eng.post-channel-message
        with:
          channel_id: $secrets.engineering_channel_id
          message: 'Pipeline failure in {{repo_name}} on {{branch}} | Jira: {{create-jira-bug.key}} | {{run_url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://humana.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-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-pipeline-failure-handler.yml

Generates a health scorecard for Humana Medicare Advantage group accounts by aggregating open opportunities, service requests, and enrollment data from Salesforce, then refreshes a Power BI dashboard.

naftiko: '0.5'
info:
  label: Salesforce Member Account Health Scorecard
  description: Generates a health scorecard for Humana Medicare Advantage group accounts by aggregating open opportunities, service requests, and enrollment data from Salesforce, then refreshes a Power BI dashboard.
  tags:
  - sales
  - customer-success
  - salesforce
  - power-bi
  - reporting
  - medicare
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: member-account-health
    port: 8080
    tools:
    - name: publish-member-account-scorecard
      description: Given a Salesforce account ID for a Humana Medicare Advantage group client, retrieve open enrollment pipeline, service cases, and last activity, then trigger a Power BI dataset refresh for the member account health dashboard.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID (18-char) for the Humana group client.
      steps:
      - name: get-account-data
        type: call
        call: salesforce-health.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-open-cases
        type: call
        call: salesforce-cases.query-cases
        with:
          account_id: '{{account_id}}'
          status: Open
      - name: refresh-dashboard
        type: call
        call: powerbi-health.refresh-dataset
        with:
          dataset_id: $secrets.member_health_dataset_id
  consumes:
  - type: http
    namespace: salesforce-health
    baseUri: https://humana.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: salesforce-cases
    baseUri: https://humana.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /query
      inputParameters:
      - name: account_id
        in: query
      - name: status
        in: query
      operations:
      - name: query-cases
        method: GET
  - type: http
    namespace: powerbi-health
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → salesforce-member-account-health-scorecard.yml

When Datadog detects an anomaly on a Humana member-facing platform, creates a ServiceNow incident and notifies the platform engineering team via Teams.

naftiko: '0.5'
info:
  label: Datadog Healthcare Platform Observability Alert
  description: When Datadog detects an anomaly on a Humana member-facing platform, creates a ServiceNow incident and notifies the platform engineering team via Teams.
  tags:
  - observability
  - monitoring
  - datadog
  - servicenow
  - microsoft-teams
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: platform-ops
    port: 8080
    tools:
    - name: handle-platform-alert
      description: Given a Datadog monitor ID that fired on a Humana member-facing platform, retrieve alert details, open a ServiceNow incident, and notify the platform engineering channel in Microsoft Teams.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that triggered the alert.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow-platform.create-incident
        with:
          short_description: 'Platform alert: {{get-monitor.name}}'
          description: 'Monitor: {{get-monitor.name}}

            Status: {{get-monitor.overall_state}}'
          category: healthcare_platform
      - name: notify-platform
        type: call
        call: msteams-platform.post-channel-message
        with:
          channel_id: $secrets.platform_channel_id
          message: 'Platform alert: {{get-monitor.name}} | SNOW: {{create-incident.number}} | State: {{get-monitor.overall_state}}'
  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-platform
    baseUri: https://humana.service-now.com/api/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-platform
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-healthcare-platform-observability-alert.yml

Retrieves a pending Humana employee time-off request from Workday, checks team coverage, and approves or escalates to manager.

naftiko: '0.5'
info:
  label: Workday Time-Off Request Processing
  description: Retrieves a pending Humana employee time-off request from Workday, checks team coverage, and approves or escalates to manager.
  tags:
  - hr
  - absence-management
  - workday
  - approval
capability:
  exposes:
  - type: mcp
    namespace: absence-management
    port: 8080
    tools:
    - name: process-time-off-request
      description: Given a Workday time-off request ID for a Humana employee, retrieve request details, check team coverage schedule, and auto-approve if coverage is adequate or escalate to manager for review.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The Workday absence request ID.
      steps:
      - name: get-request
        type: call
        call: workday-absence.get-absence-request
        with:
          request_id: '{{request_id}}'
      - name: check-coverage
        type: call
        call: workday-team.get-team-schedule
        with:
          cost_center: '{{get-request.cost_center}}'
          start_date: '{{get-request.start_date}}'
          end_date: '{{get-request.end_date}}'
      - name: approve-request
        type: call
        call: workday-absence-approve.approve-absence
        with:
          request_id: '{{request_id}}'
          decision: approved
  consumes:
  - type: http
    namespace: workday-absence
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absence-requests
      path: /humana/absenceRequests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-absence-request
        method: GET
  - type: http
    namespace: workday-team
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: team-schedule
      path: /humana/teamSchedule
      inputParameters:
      - name: cost_center
        in: query
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-team-schedule
        method: GET
  - type: http
    namespace: workday-absence-approve
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absence-approvals
      path: /humana/absenceRequests/{{request_id}}/approve
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: approve-absence
        method: POST
Open in Framework → View in Fleet → workday-time-off-request-processing.yml

Runs data quality validation on Humana's Snowflake member claims datasets and alerts the data engineering team via Microsoft Teams if quality thresholds are breached.

naftiko: '0.5'
info:
  label: Snowflake Member Claims Data Quality Check
  description: Runs data quality validation on Humana's Snowflake member claims datasets and alerts the data engineering team via Microsoft Teams if quality thresholds are breached.
  tags:
  - data
  - analytics
  - snowflake
  - microsoft-teams
  - healthcare
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: claims-data-ops
    port: 8080
    tools:
    - name: run-claims-data-quality-check
      description: Execute a named Snowflake stored procedure on Humana's member claims dataset and send a Teams alert to the data engineering channel if the quality score falls below threshold.
      inputParameters:
      - name: check_name
        in: body
        type: string
        description: The Snowflake stored procedure name for the claims data quality check.
      - name: quality_threshold
        in: body
        type: number
        description: Minimum acceptable quality score (0–100).
      steps:
      - name: run-check
        type: call
        call: snowflake.execute-statement
        with:
          statement: CALL claims_data_quality.{{check_name}}()
      - name: send-alert
        type: call
        call: msteams-data.post-channel-message
        with:
          channel_id: $secrets.data_eng_channel_id
          message: 'Claims data quality check {{check_name}} complete. Score: {{run-check.quality_score}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://humana.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: msteams-data
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-member-claims-data-quality-check.yml

Queries Azure Cost Management for Humana resource groups exceeding budget thresholds and posts a weekly FinOps cost digest to the cloud governance Teams channel.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Reporting
  description: Queries Azure Cost Management for Humana resource groups exceeding budget thresholds and posts a weekly FinOps cost digest to the cloud governance Teams channel.
  tags:
  - cloud
  - finops
  - azure
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finops-reporting
    port: 8080
    tools:
    - name: publish-azure-cost-report
      description: Query Azure Cost Management for Humana resource groups exceeding budget thresholds and post a weekly FinOps cost digest to the cloud governance Teams channel.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID to query costs for.
      - name: billing_period
        in: body
        type: string
        description: The billing period in YYYYMM format, e.g. 202603.
      steps:
      - name: get-cost-data
        type: call
        call: azure-cost.get-usage-details
        with:
          subscription_id: '{{subscription_id}}'
          billing_period: '{{billing_period}}'
      - name: post-report
        type: call
        call: msteams-finops.post-channel-message
        with:
          channel_id: $secrets.finops_channel_id
          message: 'Humana Azure cost report for {{billing_period}}: Total {{get-cost-data.total_cost}} {{get-cost-data.currency}}. Top group: {{get-cost-data.top_group}}.'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: usage-details
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.Consumption/usageDetails
      inputParameters:
      - name: subscription_id
        in: path
      - name: billing_period
        in: query
      operations:
      - name: get-usage-details
        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/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-reporting.yml

Enriches new Salesforce Medicare Advantage prospect leads with firmographic and demographic data from ZoomInfo and updates the lead record for sales team prioritization.

naftiko: '0.5'
info:
  label: Salesforce Member Lead Enrichment
  description: Enriches new Salesforce Medicare Advantage prospect leads with firmographic and demographic data from ZoomInfo and updates the lead record for sales team prioritization.
  tags:
  - sales
  - crm
  - salesforce
  - zoominfo
  - lead-enrichment
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: sales-intelligence
    port: 8080
    tools:
    - name: enrich-member-lead
      description: Given a Salesforce lead ID for a Medicare Advantage prospect, look up company or contact data in ZoomInfo and update the lead record with enriched firmographic or demographic fields for Humana sales team prioritization.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID (18-char SFDC ID).
      steps:
      - name: get-lead
        type: call
        call: salesforce-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: enrich-contact
        type: call
        call: zoominfo.search-company
        with:
          company_name: '{{get-lead.company}}'
      - name: update-lead
        type: call
        call: salesforce-lead-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          employee_count: '{{enrich-contact.employee_count}}'
          annual_revenue: '{{enrich-contact.annual_revenue}}'
          industry: '{{enrich-contact.industry}}'
  consumes:
  - type: http
    namespace: salesforce-lead
    baseUri: https://humana.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company
      operations:
      - name: search-company
        method: POST
  - type: http
    namespace: salesforce-lead-update
    baseUri: https://humana.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-member-lead-enrichment.yml

When a Humana employee termination is processed in Workday, deactivates the Okta account, revokes Salesforce license, and closes open ServiceNow tickets.

naftiko: '0.5'
info:
  label: Okta User Deprovisioning on Termination
  description: When a Humana employee termination is processed in Workday, deactivates the Okta account, revokes Salesforce license, and closes open ServiceNow tickets.
  tags:
  - hr
  - security
  - offboarding
  - workday
  - okta
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: deprovision-terminated-employee
      description: Given a Workday employee ID for a terminated Humana employee, deactivate their Okta account, revoke Salesforce license, and close open ServiceNow tickets assigned to them.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the terminated Humana employee.
      steps:
      - name: get-employee
        type: call
        call: workday-term.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          user_id: '{{get-employee.okta_user_id}}'
      - name: revoke-salesforce
        type: call
        call: salesforce-depro.update-user
        with:
          user_id: '{{get-employee.salesforce_user_id}}'
          is_active: 'false'
      - name: close-tickets
        type: call
        call: servicenow-term.close-user-tickets
        with:
          assigned_to: '{{get-employee.servicenow_user_id}}'
  consumes:
  - type: http
    namespace: workday-term
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /humana/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://humana.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_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: salesforce-depro
    baseUri: https://humana.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-term
    baseUri: https://humana.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: assigned_to
        in: query
      operations:
      - name: close-user-tickets
        method: PATCH
Open in Framework → View in Fleet → okta-user-deprovisioning-on-termination.yml

Creates a ServiceNow change request for a planned Humana healthcare platform update and notifies IT stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow IT Change Request for Healthcare Systems
  description: Creates a ServiceNow change request for a planned Humana healthcare platform update and notifies IT stakeholders via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a system name, change description, and implementation window, create a ServiceNow normal change request for a Humana healthcare system, assign to the CAB group, and notify IT stakeholders in Teams.
      inputParameters:
      - name: system_name
        in: body
        type: string
        description: The name of the Humana healthcare system or service being changed.
      - name: change_description
        in: body
        type: string
        description: A detailed description of the planned change.
      - name: planned_start
        in: body
        type: string
        description: Planned start datetime in ISO 8601 format.
      - name: planned_end
        in: body
        type: string
        description: Planned end datetime in ISO 8601 format.
      steps:
      - name: create-change
        type: call
        call: servicenow-chg.create-change-request
        with:
          short_description: 'Change: {{system_name}}'
          description: '{{change_description}}'
          start_date: '{{planned_start}}'
          end_date: '{{planned_end}}'
          type: normal
          assignment_group: CAB
      - name: notify-stakeholders
        type: call
        call: msteams-chg.post-channel-message
        with:
          channel_id: $secrets.itops_channel_id
          message: 'Change request submitted for {{system_name}}. SNOW: {{create-change.number}}. Planned: {{planned_start}} to {{planned_end}}.'
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://humana.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-chg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-change-request-for-healthcare-systems.yml

Submits Humana clinical policy documents and healthcare compliance reports to the Anthropic API for AI-powered summarization and stores the result in SharePoint for clinical team review.

naftiko: '0.5'
info:
  label: Anthropic Clinical Document Summarization
  description: Submits Humana clinical policy documents and healthcare compliance reports to the Anthropic API for AI-powered summarization and stores the result in SharePoint for clinical team review.
  tags:
  - ai
  - healthcare
  - document-management
  - anthropic
  - sharepoint
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: ai-clinical
    port: 8080
    tools:
    - name: summarize-clinical-document
      description: Given a SharePoint URL of a Humana clinical policy or healthcare compliance document, retrieve the content, send to Anthropic API for concise AI summarization, and save the summary to SharePoint for clinical team review.
      inputParameters:
      - name: document_url
        in: body
        type: string
        description: The SharePoint URL of the clinical document to summarize.
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID where the summary should be stored.
      steps:
      - name: get-document
        type: call
        call: sharepoint-doc.get-file-content
        with:
          document_url: '{{document_url}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          prompt: 'Summarize the following Humana clinical policy document, highlighting key clinical guidelines, member obligations, and compliance requirements: {{get-document.content}}'
      - name: save-summary
        type: call
        call: sharepoint-save.create-page
        with:
          site_id: '{{site_id}}'
          title: 'AI Clinical Summary: {{get-document.filename}}'
          content: '{{generate-summary.completion}}'
  consumes:
  - type: http
    namespace: sharepoint-doc
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/root:/{{document_url}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: document_url
        in: path
      operations:
      - name: get-file-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: sharepoint-save
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: pages
      path: /sites/{{site_id}}/pages
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → anthropic-clinical-document-summarization.yml

When a Salesforce Medicare Advantage group enrollment opportunity is updated, logs the activity, triggers a follow-up task for the account team, and notifies via Teams.

naftiko: '0.5'
info:
  label: Salesforce Medicare Advantage Opportunity Tracking
  description: When a Salesforce Medicare Advantage group enrollment opportunity is updated, logs the activity, triggers a follow-up task for the account team, and notifies via Teams.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - healthcare
  - medicare
capability:
  exposes:
  - type: mcp
    namespace: medicare-sales
    port: 8080
    tools:
    - name: track-medicare-opportunity
      description: Given a Salesforce Medicare Advantage opportunity ID, retrieve the current stage and value, create a follow-up task for the account executive, and notify the sales team channel in Microsoft Teams.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID (18-char SFDC ID) for the Medicare Advantage enrollment.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opp.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-followup-task
        type: call
        call: salesforce-task.create-task
        with:
          what_id: '{{opportunity_id}}'
          owner_id: '{{get-opportunity.owner_id}}'
          subject: 'Follow up: {{get-opportunity.name}} — {{get-opportunity.stage_name}}'
          status: Not Started
      - name: notify-sales
        type: call
        call: msteams-sales.post-channel-message
        with:
          channel_id: $secrets.sales_channel_id
          message: Medicare opportunity {{get-opportunity.name}} moved to {{get-opportunity.stage_name}}. Follow-up task created.
  consumes:
  - type: http
    namespace: salesforce-opp
    baseUri: https://humana.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: salesforce-task
    baseUri: https://humana.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams-sales
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-medicare-advantage-opportunity-tracking.yml

Audits Palo Alto Networks firewall security policies protecting Humana PHI network segments and flags unrestricted access rules in ServiceNow under HIPAA security requirements.

naftiko: '0.5'
info:
  label: Palo Alto Firewall Compliance Audit for PHI Segments
  description: Audits Palo Alto Networks firewall security policies protecting Humana PHI network segments and flags unrestricted access rules in ServiceNow under HIPAA security requirements.
  tags:
  - security
  - network
  - palo-alto
  - servicenow
  - hipaa
  - compliance
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: phi-network-security
    port: 8080
    tools:
    - name: audit-phi-firewall-policies
      description: Query Palo Alto Networks Panorama for all security policies protecting Humana PHI network segments, identify unrestricted outbound rules, and open a high-priority ServiceNow HIPAA compliance task for each non-compliant rule.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: The Palo Alto Panorama device group name for the Humana PHI network segment.
      steps:
      - name: get-policies
        type: call
        call: paloalto.list-security-policies
        with:
          device_group: '{{device_group}}'
      - name: create-audit-task
        type: call
        call: servicenow-phi.create-incident
        with:
          short_description: 'HIPAA firewall audit: {{get-policies.unrestricted_count}} unrestricted rules in PHI segment {{device_group}}'
          description: 'Device group: {{device_group}}

            Policies with unrestricted PHI access: {{get-policies.unrestricted_count}}

            HIPAA security rule 164.312 compliance required.'
          category: hipaa_security
          priority: '1'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://humana-panorama.humana.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: security-policies
      path: /Objects/SecurityRules
      inputParameters:
      - name: device_group
        in: query
      operations:
      - name: list-security-policies
        method: GET
  - type: http
    namespace: servicenow-phi
    baseUri: https://humana.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → palo-alto-firewall-compliance-audit-for-phi-segments.yml

When a Humana employee's role changes in Workday, updates their Salesforce profile, adjusts Okta group memberships, and notifies the manager via Teams.

naftiko: '0.5'
info:
  label: Workday Role Change Propagation
  description: When a Humana employee's role changes in Workday, updates their Salesforce profile, adjusts Okta group memberships, and notifies the manager via Teams.
  tags:
  - hr
  - identity
  - workday
  - okta
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-role-change
    port: 8080
    tools:
    - name: propagate-role-change
      description: Given a Workday employee ID and new role, update the Humana employee's Salesforce profile, adjust Okta group memberships for the new access level, and notify their manager via Microsoft Teams.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID of the Humana employee whose role changed.
      - name: new_role
        in: body
        type: string
        description: The new job role or title as defined in Workday.
      steps:
      - name: get-employee
        type: call
        call: workday-role.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: update-salesforce-profile
        type: call
        call: salesforce-role.update-user
        with:
          user_id: '{{get-employee.salesforce_user_id}}'
          title: '{{new_role}}'
      - name: update-okta-groups
        type: call
        call: okta-role.update-user-groups
        with:
          user_id: '{{get-employee.okta_user_id}}'
          role: '{{new_role}}'
      - name: notify-manager
        type: call
        call: msteams-role.send-message
        with:
          recipient: '{{get-employee.manager_email}}'
          message: '{{get-employee.full_name}} has been updated to {{new_role}} in Salesforce and Okta.'
  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: /humana/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: salesforce-role
    baseUri: https://humana.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: okta-role
    baseUri: https://humana.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: user-groups
      path: /users/{{user_id}}/groups
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: msteams-role
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient}}/sendMail
      inputParameters:
      - name: recipient
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-role-change-propagation.yml

Creates a Terraform Cloud workspace for a Humana technology team, applies HIPAA-compliant variable sets, and notifies via Teams.

naftiko: '0.5'
info:
  label: Terraform Cloud Healthcare Infrastructure Provisioner
  description: Creates a Terraform Cloud workspace for a Humana technology team, applies HIPAA-compliant variable sets, and notifies via Teams.
  tags:
  - cloud
  - infrastructure
  - terraform
  - microsoft-teams
  - hipaa
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-terraform-workspace
      description: Given a team name and environment, create a Terraform Cloud workspace for a Humana technology team, apply the HIPAA-compliant standard variable set, and notify the team Microsoft Teams channel.
      inputParameters:
      - name: team_name
        in: body
        type: string
        description: The Humana technology team name, used as the workspace prefix.
      - name: environment
        in: body
        type: string
        description: 'The target environment: dev, staging, or prod.'
      - name: teams_channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID to notify upon completion.
      steps:
      - name: create-workspace
        type: call
        call: terraform.create-workspace
        with:
          name: '{{team_name}}-{{environment}}'
          organization: humana
      - name: assign-varset
        type: call
        call: terraform-varset.assign-variable-set
        with:
          workspace_id: '{{create-workspace.workspace_id}}'
          varset_id: $secrets.terraform_hipaa_varset_id
      - name: notify-team
        type: call
        call: msteams-infra.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: 'Workspace {{team_name}}-{{environment}} created in Terraform Cloud with HIPAA-compliant variable set. 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/humana/workspaces
      operations:
      - name: create-workspace
        method: POST
  - type: http
    namespace: terraform-varset
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: variable-set-workspaces
      path: /varsets/{{varset_id}}/relationships/workspaces
      inputParameters:
      - name: varset_id
        in: path
      operations:
      - name: assign-variable-set
        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/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → terraform-cloud-healthcare-infrastructure-provisioner.yml

Creates a Zoom meeting for a Humana Medicare Advantage group client briefing and sends calendar invites via Microsoft Graph to all account contacts.

naftiko: '0.5'
info:
  label: Zoom Member Services Briefing Scheduler
  description: Creates a Zoom meeting for a Humana Medicare Advantage group client briefing and sends calendar invites via Microsoft Graph to all account contacts.
  tags:
  - sales
  - communication
  - zoom
  - salesforce
  - microsoft-365
  - medicare
capability:
  exposes:
  - type: mcp
    namespace: member-engagement
    port: 8080
    tools:
    - name: schedule-member-briefing
      description: Given a Salesforce account ID and meeting time, create a Zoom meeting for a Humana Medicare Advantage group client briefing and send calendar invites to all account contacts via Microsoft Graph.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the Humana group client.
      - name: meeting_time
        in: body
        type: string
        description: The meeting start time in ISO 8601 format.
      - name: duration_minutes
        in: body
        type: integer
        description: Meeting duration in minutes.
      steps:
      - name: get-account
        type: call
        call: salesforce-acct.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: Humana Medicare Advantage Briefing — {{get-account.name}}
          start_time: '{{meeting_time}}'
          duration: '{{duration_minutes}}'
      - name: send-invite
        type: call
        call: msgraph-cal.create-event
        with:
          subject: Humana Medicare Advantage Briefing — {{get-account.name}}
          start: '{{meeting_time}}'
          join_url: '{{create-meeting.join_url}}'
  consumes:
  - type: http
    namespace: salesforce-acct
    baseUri: https://humana.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: 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: msgraph-cal
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → zoom-member-services-briefing-scheduler.yml

Fetches sprint velocity metrics from Jira for a Humana technology team and publishes a digest to Confluence and the engineering Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Report to Confluence
  description: Fetches sprint velocity metrics from Jira for a Humana technology team and publishes a digest to Confluence and the engineering Teams channel.
  tags:
  - devops
  - reporting
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: publish-sprint-velocity-report
      description: Given a Jira board ID and sprint ID, retrieve completed story points for a Humana technology team, update the Confluence velocity page, and post a summary to the engineering Teams channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID for the Humana technology team.
      - name: sprint_id
        in: body
        type: string
        description: The Jira sprint ID to report on.
      steps:
      - name: get-sprint-report
        type: call
        call: jira-agile.get-sprint-report
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: update-confluence
        type: call
        call: confluence.update-page
        with:
          page_id: $secrets.velocity_confluence_page_id
          content: 'Sprint {{sprint_id}} Velocity: {{get-sprint-report.completed_points}} points.'
      - name: notify-team
        type: call
        call: msteams-agile.post-channel-message
        with:
          channel_id: $secrets.engineering_channel_id
          message: 'Sprint {{sprint_id}} complete. Velocity: {{get-sprint-report.completed_points}} pts. Confluence updated.'
  consumes:
  - type: http
    namespace: jira-agile
    baseUri: https://humana.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprint-reports
      path: /board/{{board_id}}/sprint/{{sprint_id}}/report
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-report
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://humana.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
  - type: http
    namespace: msteams-agile
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-velocity-report-to-confluence.yml

Updates access after role changes using Workday data, ServiceNow groups, and Teams confirmation.

naftiko: '0.5'
info:
  label: Employee Role Change Access Update
  description: Updates access after role changes using Workday data, ServiceNow groups, and Teams confirmation.
  tags:
  - hr
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: employee-ops
    port: 8080
    tools:
    - name: employee-role-change-access-update
      description: Updates access after role changes using Workday data, ServiceNow groups, and Teams confirmation.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Employee Role Change Access Update action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Employee Role Change Access Update completed successfully.
  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: /iqvia/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-role-change-access-update.yml

Fetches HubSpot email campaign metrics for a pharmaceutical product campaign and logs the performance digest as a Salesforce activity on the product campaign record.

naftiko: '0.5'
info:
  label: HubSpot Marketing Campaign Performance to Salesforce
  description: Fetches HubSpot email campaign metrics for a pharmaceutical product campaign and logs the performance digest as a Salesforce activity on the product campaign record.
  tags:
  - marketing
  - sales
  - hubspot
  - salesforce
  - pharma
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: pharma-marketing
    port: 8080
    tools:
    - name: sync-campaign-metrics
      description: Given a HubSpot campaign ID and Salesforce campaign ID, retrieve email send, open, and click metrics from HubSpot and create a performance activity record on the Salesforce campaign.
      inputParameters:
      - name: hubspot_campaign_id
        in: body
        type: string
        description: HubSpot email campaign ID.
      - name: sf_campaign_id
        in: body
        type: string
        description: Salesforce campaign record ID.
      steps:
      - name: get-hs-stats
        type: call
        call: hubspot-stats.get-campaign-stats
        with:
          campaignId: '{{hubspot_campaign_id}}'
      - name: log-sf-activity
        type: call
        call: salesforce-task.create-task
        with:
          WhatId: '{{sf_campaign_id}}'
          Subject: Campaign Performance Digest — {{hubspot_campaign_id}}
          Description: 'Sent: {{get-hs-stats.sent}} | Opens: {{get-hs-stats.opens}} | Clicks: {{get-hs-stats.clicks}} | Unsubscribes: {{get-hs-stats.unsubscribes}}'
  consumes:
  - type: http
    namespace: hubspot-stats
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaign-stats
      path: /emails/statistics/list
      inputParameters:
      - name: campaignId
        in: query
      operations:
      - name: get-campaign-stats
        method: GET
  - type: http
    namespace: salesforce-task
    baseUri: https://iqvia.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
Open in Framework → View in Fleet → hubspot-marketing-campaign-performance-to-salesforce.yml

Orchestrates close-out by archiving Snowflake data, updating SharePoint, and notifying via Teams.

naftiko: '0.5'
info:
  label: Clinical Study Close-Out Orchestrator
  description: Orchestrates close-out by archiving Snowflake data, updating SharePoint, and notifying via Teams.
  tags:
  - clinical
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-study-close-out-orchestrator
      description: Orchestrates close-out by archiving Snowflake data, updating SharePoint, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Study Close-Out Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-study-close-out-orchestrator.yml

Processes catalog requests via ServiceNow and confirms via Teams.

naftiko: '0.5'
info:
  label: IT Service Catalog Request Orchestrator
  description: Processes catalog requests via ServiceNow and confirms via Teams.
  tags:
  - it-service-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: it-service-catalog-request-orchestrator
      description: Processes catalog requests via ServiceNow and confirms via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: IT Service Catalog Request Orchestrator action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: IT Service Catalog Request Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-service-catalog-request-orchestrator.yml

Posts notification to Teams channel.

naftiko: '0.5'
info:
  label: Teams Channel Notification
  description: Posts notification to Teams channel.
  tags:
  - collaboration
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: collab-notify
    port: 8080
    tools:
    - name: send-notification
      description: Post Teams notification.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Team ID.
      - name: channel_id
        in: body
        type: string
        description: Channel ID.
      - name: message
        in: body
        type: string
        description: Text.
      call: msteams.post-channel-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        body: '{{message}}'
      outputParameters:
      - name: id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → teams-channel-notification.yml

Generates retro reports from Jira metrics, Snowflake data, and posts to Teams.

naftiko: '0.5'
info:
  label: Jira Sprint Retrospective Report
  description: Generates retro reports from Jira metrics, Snowflake data, and posts to Teams.
  tags:
  - project-management
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: jira-ops
    port: 8080
    tools:
    - name: jira-sprint-retrospective-report
      description: Generates retro reports from Jira metrics, Snowflake data, and posts to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Jira Sprint Retrospective Report follow-up
          issue_type: Task
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Jira Sprint Retrospective Report completed successfully.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://iqvia.atlassian.net/rest/api/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: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-retrospective-report.yml

Exports patient data from Snowflake and logs in ServiceNow.

naftiko: '0.5'
info:
  label: Clinical Patient Data Export Workflow
  description: Exports patient data from Snowflake and logs in ServiceNow.
  tags:
  - clinical
  - data-management
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-patient-data-export-workflow
      description: Exports patient data from Snowflake and logs in ServiceNow.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Clinical Patient Data Export Workflow action required
          category: automated
          assigned_group: Operations
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → clinical-patient-data-export-workflow.yml

Refreshes site metrics by querying Snowflake, triggering Power BI, and posting to Teams.

naftiko: '0.5'
info:
  label: Clinical Site Performance Dashboard
  description: Refreshes site metrics by querying Snowflake, triggering Power BI, and posting to Teams.
  tags:
  - clinical
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-site-performance-dashboard
      description: Refreshes site metrics by querying Snowflake, triggering Power BI, and posting to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.dashboard_dataset_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Site Performance Dashboard completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-site-performance-dashboard.yml

Generates lineage reports from Snowflake metadata and posts to Teams.

naftiko: '0.5'
info:
  label: Snowflake Data Lineage Report
  description: Generates lineage reports from Snowflake metadata and posts to Teams.
  tags:
  - data-governance
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: snowflake-ops
    port: 8080
    tools:
    - name: snowflake-data-lineage-report
      description: Generates lineage reports from Snowflake metadata and posts to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Snowflake Data Lineage Report completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-lineage-report.yml

Ingests clinical data by loading to Snowflake, running quality checks, and notifying data management via Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Data Ingestion Orchestrator
  description: Ingests clinical data by loading to Snowflake, running quality checks, and notifying data management via Teams.
  tags:
  - clinical
  - data-engineering
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-trial-data-ingestion-orchestrator
      description: Ingests clinical data by loading to Snowflake, running quality checks, and notifying data management via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Trial Data Ingestion Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-data-ingestion-orchestrator.yml

When a GitHub Actions workflow fails on a protected branch, creates a Jira bug in the appropriate project and sends a Microsoft Teams alert to the engineering channel.

naftiko: '0.5'
info:
  label: GitHub Actions Pipeline Failure to Jira Bug
  description: When a GitHub Actions workflow fails on a protected branch, creates a Jira bug in the appropriate project and sends a Microsoft Teams alert to the engineering channel.
  tags:
  - devops
  - cicd
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-ci
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow run failure with repo name, branch, and commit SHA, create a Jira bug and send a Teams notification with failure context.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository full name, e.g. iqvia/my-service.
      - name: branch
        in: body
        type: string
        description: Branch where the pipeline failed.
      - name: run_id
        in: body
        type: string
        description: GitHub Actions workflow run ID.
      - name: commit_sha
        in: body
        type: string
        description: SHA of the failing commit.
      steps:
      - name: get-run
        type: call
        call: github.get-workflow-run
        with:
          owner: iqvia
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{get-run.name}}'
          description: 'Run: {{run_id}} | Commit: {{commit_sha}} | Conclusion: {{get-run.conclusion}}'
      - name: notify-teams
        type: call
        call: msteams-eng.post-message
        with:
          channel_id: $secrets.eng_teams_channel_id
          message: 'CI Failure: {{repo}} | Branch: {{branch}} | Jira: {{create-jira-bug.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{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: jira
    baseUri: https://iqvia.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-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-actions-pipeline-failure-to-jira-bug.yml

After a Jira sprint closes, generates a velocity and defect-rate digest and posts it to the engineering Microsoft Teams channel for retrospective planning.

naftiko: '0.5'
info:
  label: Jira Sprint Retrospective Digest to Microsoft Teams
  description: After a Jira sprint closes, generates a velocity and defect-rate digest and posts it to the engineering Microsoft Teams channel for retrospective planning.
  tags:
  - devops
  - reporting
  - jira
  - microsoft-teams
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: sprint-reporting
    port: 8080
    tools:
    - name: post-sprint-retrospective
      description: Given a Jira board ID and sprint ID, retrieve completed issues and defect counts and post a retrospective digest to the designated Microsoft Teams engineering channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira board ID.
      - name: sprint_id
        in: body
        type: string
        description: Jira sprint ID to report on.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the retrospective post.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira-sprint.get-sprint-issues
        with:
          boardId: '{{board_id}}'
          sprintId: '{{sprint_id}}'
      - name: post-retro
        type: call
        call: msteams-retro.post-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: 'Sprint Retrospective: Completed: {{get-sprint-issues.done_count}} | Bugs: {{get-sprint-issues.bug_count}} | Velocity: {{get-sprint-issues.story_points}}'
  consumes:
  - type: http
    namespace: jira-sprint
    baseUri: https://iqvia.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprint-issues
      path: /board/{{boardId}}/sprint/{{sprintId}}/issue
      inputParameters:
      - name: boardId
        in: path
      - name: sprintId
        in: path
      operations:
      - name: get-sprint-issues
        method: GET
  - type: http
    namespace: msteams-retro
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-retrospective-digest-to-microsoft-teams.yml

When a new life sciences employee is created in Workday, provisions access in ServiceNow, sends a Teams welcome message, and creates a data access request in the clinical systems portal.

naftiko: '0.5'
info:
  label: Workday New Hire Provisioning for Clinical Data Access
  description: When a new life sciences employee is created in Workday, provisions access in ServiceNow, sends a Teams welcome message, and creates a data access request in the clinical systems portal.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - clinical-systems
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: clinical-onboarding
    port: 8080
    tools:
    - name: provision-clinical-access
      description: Given a Workday employee ID, start date, and clinical role, open a ServiceNow onboarding ticket, send a Teams welcome message, and create a clinical data access request.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: start_date
        in: body
        type: string
        description: Employee start date in YYYY-MM-DD format.
      - name: clinical_role
        in: body
        type: string
        description: Clinical role for access provisioning, e.g. Data_Analyst, Clinical_Operations.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          workerId: '{{employee_id}}'
      - name: open-onboard-ticket
        type: call
        call: servicenow-onboard.create-task
        with:
          short_description: 'Clinical access onboarding: {{get-worker.preferredName}} — Role: {{clinical_role}}'
          category: clinical_onboarding
          assignment_group: Clinical_IT
      - name: send-welcome-msg
        type: call
        call: msteams-onboard.send-message
        with:
          recipient_upn: '{{get-worker.workEmail}}'
          message: 'Welcome to IQVIA! Your clinical data access request is being processed. Ticket: {{open-onboard-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: /iqvia/workers/{{workerId}}
      inputParameters:
      - name: workerId
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow-onboard
    baseUri: https://iqvia.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: msteams-onboard
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-new-hire-provisioning-for-clinical-data-access.yml

Orchestrates analytics by loading Snowflake data, refreshing Power BI, and posting to Teams.

naftiko: '0.5'
info:
  label: Power BI Clinical Analytics Orchestrator
  description: Orchestrates analytics by loading Snowflake data, refreshing Power BI, and posting to Teams.
  tags:
  - analytics
  - clinical
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: power-ops
    port: 8080
    tools:
    - name: power-bi-clinical-analytics-orchestrator
      description: Orchestrates analytics by loading Snowflake data, refreshing Power BI, and posting to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.dashboard_dataset_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Power BI Clinical Analytics Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-clinical-analytics-orchestrator.yml

Monitors vendor feeds by checking Snowflake logs, creating ServiceNow tickets, and alerting via Teams.

naftiko: '0.5'
info:
  label: Vendor Data Feed Monitoring
  description: Monitors vendor feeds by checking Snowflake logs, creating ServiceNow tickets, and alerting via Teams.
  tags:
  - data-engineering
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-ops
    port: 8080
    tools:
    - name: vendor-data-feed-monitoring
      description: Monitors vendor feeds by checking Snowflake logs, creating ServiceNow tickets, and alerting via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Vendor Data Feed Monitoring action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Vendor Data Feed Monitoring completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → vendor-data-feed-monitoring.yml

Lists pages in a Confluence space.

naftiko: '0.5'
info:
  label: Confluence Space Page Listing
  description: Lists pages in a Confluence space.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: km-pages
    port: 8080
    tools:
    - name: list-pages
      description: List Confluence pages.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Space key.
      call: confluence.list-pages
      with:
        space_key: '{{space_key}}'
      outputParameters:
      - name: pages
        type: array
        mapping: $.results
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://iqvia.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: space-content
      path: /space/{{space_key}}/content
      inputParameters:
      - name: space_key
        in: path
      operations:
      - name: list-pages
        method: GET
Open in Framework → View in Fleet → confluence-space-page-listing.yml

When an employee termination is recorded in Workday, opens a ServiceNow offboarding task, revokes Salesforce CRM access, and files a GitHub access removal issue.

naftiko: '0.5'
info:
  label: Workday Employee Offboarding from Clinical Systems
  description: When an employee termination is recorded in Workday, opens a ServiceNow offboarding task, revokes Salesforce CRM access, and files a GitHub access removal issue.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - salesforce
  - github
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID and termination date, open a ServiceNow offboarding task, deactivate the Salesforce user, and create a GitHub issue to revoke all repository access.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday 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 of the departing employee.
      steps:
      - name: open-offboard-task
        type: call
        call: servicenow-off.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-access.create-issue
        with:
          owner: iqvia
          repo: access-management
          title: 'Revoke access: {{employee_email}} (terminated {{termination_date}})'
          body: Employee {{employee_id}} terminated. Revoke all repository and clinical systems access.
  consumes:
  - type: http
    namespace: servicenow-off
    baseUri: https://iqvia.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://iqvia.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-access
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/{{owner}}/{{repo}}/issues
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → workday-employee-offboarding-from-clinical-systems.yml

When a new clinical trial site is activated in the study management system, provisions the site in ServiceNow, sends a Microsoft Teams welcome message to the site coordinator, and creates a SharePoint data-sharing folder.

naftiko: '0.5'
info:
  label: Clinical Trial Site Activation Onboarding
  description: When a new clinical trial site is activated in the study management system, provisions the site in ServiceNow, sends a Microsoft Teams welcome message to the site coordinator, and creates a SharePoint data-sharing folder.
  tags:
  - hr
  - onboarding
  - clinical-trials
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: site-onboarding
    port: 8080
    tools:
    - name: trigger-site-activation
      description: Given a site activation record with site ID, coordinator email, and study protocol ID, provision a ServiceNow onboarding task, notify the coordinator via Teams, and create a SharePoint document folder.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Clinical trial site identifier.
      - name: coordinator_email
        in: body
        type: string
        description: Site coordinator email address.
      - name: protocol_id
        in: body
        type: string
        description: Study protocol identifier.
      steps:
      - name: create-onboard-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Site activation: {{site_id}} for protocol {{protocol_id}}'
          category: clinical_operations
          assignment_group: Clinical_IT
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{coordinator_email}}'
          message: 'Welcome to IQVIA Clinical Operations! Your site {{site_id}} has been activated for protocol {{protocol_id}}. Task: {{create-onboard-task.number}}'
      - name: create-site-folder
        type: call
        call: graph-sp.create-folder
        with:
          site_id: iqvia-clinical-data
          folder_name: '{{protocol_id}}_{{site_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: graph-sp
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: folders
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-folder
        method: POST
Open in Framework → View in Fleet → clinical-trial-site-activation-onboarding.yml

Bridges bugs from Jira to ServiceNow and notifies ops via Teams.

naftiko: '0.5'
info:
  label: Jira to ServiceNow Bug Bridge
  description: Bridges bugs from Jira to ServiceNow and notifies ops via Teams.
  tags:
  - devops
  - jira
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: jira-ops
    port: 8080
    tools:
    - name: jira-to-servicenow-bug-bridge
      description: Bridges bugs from Jira to ServiceNow and notifies ops via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Jira to ServiceNow Bug Bridge follow-up
          issue_type: Task
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Jira to ServiceNow Bug Bridge action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Jira to ServiceNow Bug Bridge completed successfully.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://iqvia.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-to-servicenow-bug-bridge.yml

Remediates RWD quality issues by identifying Snowflake failures, creating Jira tickets, and alerting via Teams.

naftiko: '0.5'
info:
  label: Real World Data Quality Remediation
  description: Remediates RWD quality issues by identifying Snowflake failures, creating Jira tickets, and alerting via Teams.
  tags:
  - data-quality
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: real-ops
    port: 8080
    tools:
    - name: real-world-data-quality-remediation
      description: Remediates RWD quality issues by identifying Snowflake failures, creating Jira tickets, and alerting via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Real World Data Quality Remediation follow-up
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Real World Data Quality Remediation completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://iqvia.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → real-world-data-quality-remediation.yml

Masks clinical data using Snowflake transforms and logs in ServiceNow.

naftiko: '0.5'
info:
  label: Clinical Data Masking Workflow
  description: Masks clinical data using Snowflake transforms and logs in ServiceNow.
  tags:
  - compliance
  - clinical
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-data-masking-workflow
      description: Masks clinical data using Snowflake transforms and logs in ServiceNow.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Clinical Data Masking Workflow action required
          category: automated
          assigned_group: Operations
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → clinical-data-masking-workflow.yml

Analyzes ROI from Salesforce and HubSpot data in Snowflake, posting to Teams.

naftiko: '0.5'
info:
  label: Salesforce Campaign ROI Analysis
  description: Analyzes ROI from Salesforce and HubSpot data in Snowflake, posting to Teams.
  tags:
  - marketing
  - salesforce
  - hubspot
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce-ops
    port: 8080
    tools:
    - name: salesforce-campaign-roi-analysis
      description: Analyzes ROI from Salesforce and HubSpot data in Snowflake, posting to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: search-contacts
        type: call
        call: hubspot.search
        with:
          query: '{{search_term}}'
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Salesforce Campaign ROI Analysis completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        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: search
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-campaign-roi-analysis.yml

Escalates SLA breaches from Datadog, creates ServiceNow incidents, and alerts via Teams.

naftiko: '0.5'
info:
  label: Datadog SLA Breach Escalation
  description: Escalates SLA breaches from Datadog, creates ServiceNow incidents, and alerts via Teams.
  tags:
  - observability
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: datadog-ops
    port: 8080
    tools:
    - name: datadog-sla-breach-escalation
      description: Escalates SLA breaches from Datadog, creates ServiceNow incidents, and alerts via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: check-monitors
        type: call
        call: datadog.get-monitors
        with:
          tags: service:{{service_name}}
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Datadog SLA Breach Escalation action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Datadog SLA Breach Escalation completed successfully.
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-sla-breach-escalation.yml

Generates renewal digests from Salesforce and Snowflake, posting to Teams.

naftiko: '0.5'
info:
  label: Salesforce Renewal Pipeline Digest
  description: Generates renewal digests from Salesforce and Snowflake, posting to Teams.
  tags:
  - commercial
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce-ops
    port: 8080
    tools:
    - name: salesforce-renewal-pipeline-digest
      description: Generates renewal digests from Salesforce and Snowflake, posting to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Salesforce Renewal Pipeline Digest completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-renewal-pipeline-digest.yml

Tracks enrollment from Snowflake, refreshes Power BI, and posts to Teams.

naftiko: '0.5'
info:
  label: Clinical Site Enrollment Tracker
  description: Tracks enrollment from Snowflake, refreshes Power BI, and posts to Teams.
  tags:
  - clinical
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-site-enrollment-tracker
      description: Tracks enrollment from Snowflake, refreshes Power BI, and posts to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.dashboard_dataset_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Site Enrollment Tracker completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-site-enrollment-tracker.yml

Onboards pharma clients by creating Salesforce accounts, provisioning Snowflake access, and notifying via Teams.

naftiko: '0.5'
info:
  label: Pharma Client Onboarding Orchestrator
  description: Onboards pharma clients by creating Salesforce accounts, provisioning Snowflake access, and notifying via Teams.
  tags:
  - commercial
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pharma-ops
    port: 8080
    tools:
    - name: pharma-client-onboarding-orchestrator
      description: Onboards pharma clients by creating Salesforce accounts, provisioning Snowflake access, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Pharma Client Onboarding Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → pharma-client-onboarding-orchestrator.yml

Generates forecasts from Workday data, Snowflake trends, and posts to Teams.

naftiko: '0.5'
info:
  label: Workday Headcount Forecast Report
  description: Generates forecasts from Workday data, Snowflake trends, and posts to Teams.
  tags:
  - hr
  - workforce-planning
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday-ops
    port: 8080
    tools:
    - name: workday-headcount-forecast-report
      description: Generates forecasts from Workday data, Snowflake trends, and posts to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Workday Headcount Forecast Report completed successfully.
  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: /iqvia/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-forecast-report.yml

Monitors Datadog SLO burn rate for IQVIA clinical data APIs and creates a P1 ServiceNow incident when error budget consumption exceeds the fast-burn threshold.

naftiko: '0.5'
info:
  label: Datadog SLO Burn Rate Alert for Clinical API
  description: Monitors Datadog SLO burn rate for IQVIA clinical data APIs and creates a P1 ServiceNow incident when error budget consumption exceeds the fast-burn threshold.
  tags:
  - observability
  - itsm
  - datadog
  - servicenow
  - clinical-systems
  - slo
capability:
  exposes:
  - type: mcp
    namespace: clinical-slo
    port: 8080
    tools:
    - name: handle-api-slo-breach
      description: Given a Datadog SLO ID for a clinical API and a burn rate threshold, check the error budget consumption rate and open a P1 ServiceNow incident if the threshold is breached.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: Datadog SLO ID for the clinical API.
      - name: api_name
        in: body
        type: string
        description: Name of the clinical API for incident context.
      - name: burn_threshold
        in: body
        type: number
        description: Burn rate multiplier above which to open an incident.
      steps:
      - name: get-slo-status
        type: call
        call: datadog-slo.get-slo
        with:
          slo_id: '{{slo_id}}'
      - name: create-p1-incident
        type: call
        call: servicenow-slo.create-incident
        with:
          short_description: 'SLO breach: {{api_name}} error budget burning at {{burn_threshold}}x'
          urgency: '1'
          impact: '1'
          category: clinical_api
          description: 'SLO: {{slo_id}} | API: {{api_name}} | Status: {{get-slo-status.overall_status}}'
  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/{{slo_id}}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo
        method: GET
  - type: http
    namespace: servicenow-slo
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → datadog-slo-burn-rate-alert-for-clinical-api.yml

Analyzes API usage from Datadog, loading to Snowflake, and generating Power BI dashboards.

naftiko: '0.5'
info:
  label: Enterprise API Usage Analytics
  description: Analyzes API usage from Datadog, loading to Snowflake, and generating Power BI dashboards.
  tags:
  - platform-engineering
  - datadog
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: enterprise-ops
    port: 8080
    tools:
    - name: enterprise-api-usage-analytics
      description: Analyzes API usage from Datadog, loading to Snowflake, and generating Power BI dashboards.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: check-monitors
        type: call
        call: datadog.get-monitors
        with:
          tags: service:{{service_name}}
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.dashboard_dataset_id
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → enterprise-api-usage-analytics.yml

Generates audit trails from Snowflake, assembles SharePoint reports, and notifies via Teams.

naftiko: '0.5'
info:
  label: Compliance Audit Trail Generator
  description: Generates audit trails from Snowflake, assembles SharePoint reports, and notifies via Teams.
  tags:
  - compliance
  - audit
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-ops
    port: 8080
    tools:
    - name: compliance-audit-trail-generator
      description: Generates audit trails from Snowflake, assembles SharePoint reports, and notifies via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Compliance Audit Trail Generator completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → compliance-audit-trail-generator.yml

Checks Terraform Cloud workspace status.

naftiko: '0.5'
info:
  label: Terraform Workspace Status
  description: Checks Terraform Cloud workspace status.
  tags:
  - infrastructure
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: infra-iac
    port: 8080
    tools:
    - name: check-workspace
      description: Check workspace.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Workspace ID.
      call: terraform.get-workspace
      with:
        workspace_id: '{{workspace_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.attributes.execution-mode
  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-workspace
        method: GET
Open in Framework → View in Fleet → terraform-workspace-status.yml

Qualifies leads from Salesforce, enriching with Snowflake data, and notifying sales via Teams.

naftiko: '0.5'
info:
  label: Salesforce Lead Qualification Orchestrator
  description: Qualifies leads from Salesforce, enriching with Snowflake data, and notifying sales via Teams.
  tags:
  - commercial
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce-ops
    port: 8080
    tools:
    - name: salesforce-lead-qualification-orchestrator
      description: Qualifies leads from Salesforce, enriching with Snowflake data, and notifying sales via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Salesforce Lead Qualification Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-lead-qualification-orchestrator.yml

Prepares QBR materials from Salesforce, Snowflake analytics, and posts to Teams.

naftiko: '0.5'
info:
  label: Salesforce Quarterly Business Review Prep
  description: Prepares QBR materials from Salesforce, Snowflake analytics, and posts to Teams.
  tags:
  - commercial
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce-ops
    port: 8080
    tools:
    - name: salesforce-quarterly-business-review-prep
      description: Prepares QBR materials from Salesforce, Snowflake analytics, and posts to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Salesforce Quarterly Business Review Prep completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-quarterly-business-review-prep.yml

Refreshes quality KPIs from Snowflake, triggers Power BI, and notifies via Teams.

naftiko: '0.5'
info:
  label: Clinical Data Quality KPI Dashboard
  description: Refreshes quality KPIs from Snowflake, triggers Power BI, and notifies via Teams.
  tags:
  - clinical
  - data-quality
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-data-quality-kpi-dashboard
      description: Refreshes quality KPIs from Snowflake, triggers Power BI, and notifies via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.dashboard_dataset_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Data Quality KPI Dashboard completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-data-quality-kpi-dashboard.yml

When a Salesforce pharmaceutical opportunity advances to Proposal stage, triggers a targeted HubSpot marketing email sequence to the associated contacts.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Stage Change to HubSpot Workflow
  description: When a Salesforce pharmaceutical opportunity advances to Proposal stage, triggers a targeted HubSpot marketing email sequence to the associated contacts.
  tags:
  - sales
  - marketing
  - salesforce
  - hubspot
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: sales-marketing-sync
    port: 8080
    tools:
    - name: trigger-proposal-nurture
      description: Given a Salesforce opportunity ID that has reached Proposal stage, retrieve associated contacts and enroll them in the targeted HubSpot nurture sequence for pharmaceutical prospects.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: hubspot_workflow_id
        in: body
        type: string
        description: HubSpot workflow enrollment ID for the proposal nurture sequence.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opp.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: enroll-contacts
        type: call
        call: hubspot-enroll.enroll-in-workflow
        with:
          workflowId: '{{hubspot_workflow_id}}'
          email: '{{get-opportunity.primary_contact_email}}'
  consumes:
  - type: http
    namespace: salesforce-opp
    baseUri: https://iqvia.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: hubspot-enroll
    baseUri: https://api.hubapi.com/automation/v2
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: enrollments
      path: /workflows/{{workflowId}}/enrollments/contacts/{{email}}
      inputParameters:
      - name: workflowId
        in: path
      - name: email
        in: path
      operations:
      - name: enroll-in-workflow
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-stage-change-to-hubspot-workflow.yml

Orchestrates DR tests using ServiceNow runbooks, Snowflake validation, and Teams reporting.

naftiko: '0.5'
info:
  label: IT Disaster Recovery Test Orchestrator
  description: Orchestrates DR tests using ServiceNow runbooks, Snowflake validation, and Teams reporting.
  tags:
  - infrastructure
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: it-disaster-recovery-test-orchestrator
      description: Orchestrates DR tests using ServiceNow runbooks, Snowflake validation, and Teams reporting.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: IT Disaster Recovery Test Orchestrator action required
          category: automated
          assigned_group: Operations
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: IT Disaster Recovery Test Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/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: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-disaster-recovery-test-orchestrator.yml

Generates scorecards from Snowflake KPIs and notifies procurement via Teams.

naftiko: '0.5'
info:
  label: Vendor Performance Scorecard Generator
  description: Generates scorecards from Snowflake KPIs and notifies procurement via Teams.
  tags:
  - procurement
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-ops
    port: 8080
    tools:
    - name: vendor-performance-scorecard-generator
      description: Generates scorecards from Snowflake KPIs and notifies procurement via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Vendor Performance Scorecard Generator completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → vendor-performance-scorecard-generator.yml

Retrieves time off balance from Workday.

naftiko: '0.5'
info:
  label: Workday Time Off Balance Check
  description: Retrieves time off balance from Workday.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-timeoff
    port: 8080
    tools:
    - name: check-balance
      description: Check time off balance.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Worker ID.
      call: workday.get-time-off
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: balance
        type: string
        mapping: $.balance
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-off
      path: /iqvia/workers/{{worker_id}}/timeOff
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-time-off
        method: GET
Open in Framework → View in Fleet → workday-time-off-balance-check.yml

Monitors real-world data ingestion pipeline metrics in Datadog and creates a Jira data engineering ticket when row completeness or latency thresholds are breached.

naftiko: '0.5'
info:
  label: Real-World Data Pipeline Quality Alert
  description: Monitors real-world data ingestion pipeline metrics in Datadog and creates a Jira data engineering ticket when row completeness or latency thresholds are breached.
  tags:
  - data
  - analytics
  - datadog
  - jira
  - monitoring
  - real-world-data
capability:
  exposes:
  - type: mcp
    namespace: rwd-quality
    port: 8080
    tools:
    - name: alert-rwd-pipeline-quality
      description: Given a Datadog monitor ID for a real-world data pipeline and a completeness threshold, check current metrics and create a Jira data engineering bug if quality falls below threshold.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID for the RWD pipeline quality check.
      - name: pipeline_name
        in: body
        type: string
        description: Name of the real-world data ingestion pipeline.
      steps:
      - name: get-monitor-status
        type: call
        call: datadog-rwd.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-data-bug
        type: call
        call: jira-data.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'RWD pipeline quality alert: {{pipeline_name}}'
          description: 'Monitor: {{monitor_id}} | Status: {{get-monitor-status.overall_state}} | Pipeline: {{pipeline_name}}'
  consumes:
  - type: http
    namespace: datadog-rwd
    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-data
    baseUri: https://iqvia.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → real-world-data-pipeline-quality-alert.yml

Checks Power BI dataset refresh status.

naftiko: '0.5'
info:
  label: Power BI Report Refresh Status
  description: Checks Power BI dataset refresh status.
  tags:
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: analytics-refresh
    port: 8080
    tools:
    - name: check-refresh
      description: Check refresh status.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Dataset ID.
      call: powerbi.get-refresh-history
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refresh-history
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-report-refresh-status.yml

Tracks submissions by querying Snowflake, updating SharePoint, and notifying regulatory via Teams.

naftiko: '0.5'
info:
  label: Regulatory Submission Timeline Tracker
  description: Tracks submissions by querying Snowflake, updating SharePoint, and notifying regulatory via Teams.
  tags:
  - regulatory
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: regulatory-submission-timeline-tracker
      description: Tracks submissions by querying Snowflake, updating SharePoint, and notifying regulatory via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Regulatory Submission Timeline Tracker completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-timeline-tracker.yml

Retrieves pharma client account from Salesforce.

naftiko: '0.5'
info:
  label: Salesforce Pharma Account Lookup
  description: Retrieves pharma client account from Salesforce.
  tags:
  - commercial
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm-pharma
    port: 8080
    tools:
    - name: get-pharma-account
      description: Look up pharma account.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Account ID.
      call: salesforce.get-account
      with:
        id: '{{account_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: type
        type: string
        mapping: $.Type
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → salesforce-pharma-account-lookup.yml

Scans repos for compliance using GitHub settings, Snowflake logs, and Jira findings.

naftiko: '0.5'
info:
  label: GitHub Repository Compliance Scanner
  description: Scans repos for compliance using GitHub settings, Snowflake logs, and Jira findings.
  tags:
  - security
  - compliance
  - github
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: github-ops
    port: 8080
    tools:
    - name: github-repository-compliance-scanner
      description: Scans repos for compliance using GitHub settings, Snowflake logs, and Jira findings.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-repo-info
        type: call
        call: github.get-repo
        with:
          repo: '{{repo_name}}'
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: GitHub Repository Compliance Scanner follow-up
          issue_type: Task
  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
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://iqvia.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-repository-compliance-scanner.yml

Retrieves defect status from Jira.

naftiko: '0.5'
info:
  label: Jira Defect Status Lookup
  description: Retrieves defect status from Jira.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pm-defects
    port: 8080
    tools:
    - name: get-defect-status
      description: Look up Jira defect.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://iqvia.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-defect-status-lookup.yml

Refreshes attribution from HubSpot and Salesforce to Snowflake, updating Power BI.

naftiko: '0.5'
info:
  label: Marketing Attribution Pipeline Refresh
  description: Refreshes attribution from HubSpot and Salesforce to Snowflake, updating Power BI.
  tags:
  - marketing
  - hubspot
  - salesforce
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: marketing-ops
    port: 8080
    tools:
    - name: marketing-attribution-pipeline-refresh
      description: Refreshes attribution from HubSpot and Salesforce to Snowflake, updating Power BI.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: search-contacts
        type: call
        call: hubspot.search
        with:
          query: '{{search_term}}'
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.dashboard_dataset_id
  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
      operations:
      - name: search
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → marketing-attribution-pipeline-refresh.yml

Queries Salesforce for clinical trial sponsor account activity metrics and generates an account health score. Posts a digest of at-risk accounts to the account management Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Clinical Trial Account Health Score
  description: Queries Salesforce for clinical trial sponsor account activity metrics and generates an account health score. Posts a digest of at-risk accounts to the account management Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - customer-success
  - clinical-trials
capability:
  exposes:
  - type: mcp
    namespace: account-health
    port: 8080
    tools:
    - name: digest-account-health
      description: Given a Salesforce account type filter and a Microsoft Teams channel ID, calculate health scores for clinical trial sponsor accounts with low engagement and post an at-risk digest to Teams.
      inputParameters:
      - name: account_type
        in: body
        type: string
        description: Salesforce account type to filter, e.g. Clinical Sponsor.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the at-risk account digest.
      steps:
      - name: query-accounts
        type: call
        call: salesforce-health.query-accounts
        with:
          accountType: '{{account_type}}'
      - name: post-health-digest
        type: call
        call: msteams-accounts.post-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: 'Account Health Digest: {{query-accounts.at_risk_count}} {{account_type}} accounts at risk. Review needed for renewal pipeline.'
  consumes:
  - type: http
    namespace: salesforce-health
    baseUri: https://iqvia.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-accounts
        method: GET
  - type: http
    namespace: msteams-accounts
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-clinical-trial-account-health-score.yml

Enumerates S3 bucket policies for IQVIA clinical data lake buckets and creates a ServiceNow security task for any bucket found with public or cross-account access.

naftiko: '0.5'
info:
  label: AWS S3 Clinical Data Lake Access Audit
  description: Enumerates S3 bucket policies for IQVIA clinical data lake buckets and creates a ServiceNow security task for any bucket found with public or cross-account access.
  tags:
  - cloud
  - security
  - aws
  - servicenow
  - clinical-systems
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: data-lake-security
    port: 8080
    tools:
    - name: audit-clinical-data-lake
      description: Given an AWS region, enumerate clinical data lake S3 buckets for policy violations and create a ServiceNow security task for each non-compliant bucket detected.
      inputParameters:
      - name: aws_region
        in: body
        type: string
        description: AWS region to audit, e.g. us-east-1.
      steps:
      - name: list-buckets
        type: call
        call: aws-s3.list-buckets
        with:
          region: '{{aws_region}}'
      - name: create-sec-task
        type: call
        call: servicenow-s3.create-task
        with:
          short_description: 'Clinical data lake access audit: {{aws_region}} — policy violations detected'
          category: data_security
          assignment_group: Cloud_Security
          description: 'Non-compliant buckets: {{list-buckets.non_compliant_count}} in region {{aws_region}}'
  consumes:
  - type: http
    namespace: aws-s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: buckets
      path: /
      operations:
      - name: list-buckets
        method: GET
  - type: http
    namespace: servicenow-s3
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → aws-s3-clinical-data-lake-access-audit.yml

When an AWS CloudWatch alarm triggers for a clinical data application, creates a P2 ServiceNow incident and sends a Datadog synthetic check to verify application availability.

naftiko: '0.5'
info:
  label: AWS CloudWatch Clinical Application Alert to ServiceNow
  description: When an AWS CloudWatch alarm triggers for a clinical data application, creates a P2 ServiceNow incident and sends a Datadog synthetic check to verify application availability.
  tags:
  - cloud
  - observability
  - aws
  - servicenow
  - datadog
  - clinical-systems
capability:
  exposes:
  - type: mcp
    namespace: cloud-clinical-ops
    port: 8080
    tools:
    - name: handle-cloudwatch-alarm
      description: Given an AWS CloudWatch alarm name and affected application name, verify the alarm state, create a ServiceNow incident, and trigger a Datadog synthetic check to confirm application status.
      inputParameters:
      - name: alarm_name
        in: body
        type: string
        description: AWS CloudWatch alarm name.
      - name: application_name
        in: body
        type: string
        description: Name of the affected clinical application.
      steps:
      - name: get-alarm-state
        type: call
        call: cloudwatch.get-alarm
        with:
          AlarmName: '{{alarm_name}}'
      - name: create-incident
        type: call
        call: servicenow-cw.create-incident
        with:
          short_description: 'AWS alarm: {{alarm_name}} — {{application_name}}'
          category: cloud_infrastructure
          urgency: '2'
          description: 'Alarm state: {{get-alarm-state.StateValue}} | Application: {{application_name}}'
      - name: trigger-synthetic
        type: call
        call: datadog-synth.trigger-test
        with:
          public_id: $secrets.dd_synthetic_test_id
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: alarms
      path: /?Action=DescribeAlarms&AlarmNames.member.1={{AlarmName}}
      inputParameters:
      - name: AlarmName
        in: query
      operations:
      - name: get-alarm
        method: GET
  - type: http
    namespace: servicenow-cw
    baseUri: https://iqvia.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-synth
    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/trigger/ci
      operations:
      - name: trigger-test
        method: POST
Open in Framework → View in Fleet → aws-cloudwatch-clinical-application-alert-to-servicenow.yml

Looks up a SAP S/4HANA purchase order by number and returns header status, vendor name, total amount, and currency. Used by procurement agents to verify PO state.

naftiko: '0.5'
info:
  label: SAP S/4HANA PO Status Lookup
  description: Looks up a SAP S/4HANA purchase order by number and returns header status, vendor name, total amount, and currency. Used by procurement agents to verify PO state.
  tags:
  - finance
  - erp
  - sap-s4hana
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP purchase order number, return the order header status, vendor name, total amount, and document currency from SAP S/4HANA.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number, e.g. 4500001234.
      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://iqvia-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-po-status-lookup.yml

Assigns training from Workday roles and notifies employees via Teams.

naftiko: '0.5'
info:
  label: Workday Learning Assignment Orchestrator
  description: Assigns training from Workday roles and notifies employees via Teams.
  tags:
  - hr
  - learning
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday-ops
    port: 8080
    tools:
    - name: workday-learning-assignment-orchestrator
      description: Assigns training from Workday roles and notifies employees via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Workday Learning Assignment Orchestrator completed successfully.
  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: /iqvia/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-learning-assignment-orchestrator.yml

Tracks DTAs in Snowflake, updates SharePoint, and notifies legal via Teams.

naftiko: '0.5'
info:
  label: Clinical Data Transfer Agreement Tracker
  description: Tracks DTAs in Snowflake, updates SharePoint, and notifies legal via Teams.
  tags:
  - clinical
  - compliance
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-data-transfer-agreement-tracker
      description: Tracks DTAs in Snowflake, updates SharePoint, and notifies legal via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Data Transfer Agreement Tracker completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-data-transfer-agreement-tracker.yml

Revokes departing employee access across Workday, ServiceNow, and logs via Teams.

naftiko: '0.5'
info:
  label: Workday Offboarding Access Revocation
  description: Revokes departing employee access across Workday, ServiceNow, and logs via Teams.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday-ops
    port: 8080
    tools:
    - name: workday-offboarding-access-revocation
      description: Revokes departing employee access across Workday, ServiceNow, and logs via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Workday Offboarding Access Revocation action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Workday Offboarding Access Revocation completed successfully.
  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: /iqvia/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-offboarding-access-revocation.yml

Searches SharePoint documents by keyword.

naftiko: '0.5'
info:
  label: SharePoint Site Document Search
  description: Searches SharePoint documents by keyword.
  tags:
  - collaboration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: collab-search
    port: 8080
    tools:
    - name: search-documents
      description: Search SharePoint.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Site ID.
      - name: query
        in: body
        type: string
        description: Query.
      call: sharepoint.search
      with:
        site_id: '{{site_id}}'
        query: '{{query}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: search
      path: /sites/{{site_id}}/drive/root/search(q='{{query}}')
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → sharepoint-site-document-search.yml

Detects payroll variances from Workday and Snowflake, creating ServiceNow tickets.

naftiko: '0.5'
info:
  label: Workday Payroll Variance Detector
  description: Detects payroll variances from Workday and Snowflake, creating ServiceNow tickets.
  tags:
  - hr
  - payroll
  - workday
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: workday-ops
    port: 8080
    tools:
    - name: workday-payroll-variance-detector
      description: Detects payroll variances from Workday and Snowflake, creating ServiceNow tickets.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Workday Payroll Variance Detector action required
          category: automated
          assigned_group: Operations
  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: /iqvia/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → workday-payroll-variance-detector.yml

Scans GitHub repositories containing clinical or regulatory data for secret exposure and compliance violations. Creates ServiceNow security incidents for any violations found.

naftiko: '0.5'
info:
  label: GitHub Repository Compliance Scan for Regulatory Data
  description: Scans GitHub repositories containing clinical or regulatory data for secret exposure and compliance violations. Creates ServiceNow security incidents for any violations found.
  tags:
  - security
  - devops
  - github
  - servicenow
  - compliance
  - clinical-systems
capability:
  exposes:
  - type: mcp
    namespace: repo-compliance
    port: 8080
    tools:
    - name: scan-repo-compliance
      description: Given a GitHub repository name and a compliance topic tag, retrieve repository secret scanning alerts and create a ServiceNow security incident for each critical exposure detected.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository name within the iqvia org.
      - name: compliance_topic
        in: body
        type: string
        description: Compliance topic tag to validate, e.g. clinical-data, phi-data.
      steps:
      - name: get-secret-alerts
        type: call
        call: github-sec.get-secret-alerts
        with:
          owner: iqvia
          repo: '{{repo}}'
      - name: create-sec-incident
        type: call
        call: servicenow-compliance.create-incident
        with:
          short_description: 'Secret exposure in {{repo}}: {{compliance_topic}} compliance violation'
          category: security
          urgency: '1'
          description: 'Repo: {{repo}} | Alert count: {{get-secret-alerts.total_count}} | Topic: {{compliance_topic}}'
  consumes:
  - type: http
    namespace: github-sec
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: secret-alerts
      path: /repos/{{owner}}/{{repo}}/secret-scanning/alerts
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: get-secret-alerts
        method: GET
  - type: http
    namespace: servicenow-compliance
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → github-repository-compliance-scan-for-regulatory-data.yml

Optimizes licenses from Snowflake data, creating ServiceNow recommendations and notifying FinOps via Teams.

naftiko: '0.5'
info:
  label: Enterprise License Usage Optimizer
  description: Optimizes licenses from Snowflake data, creating ServiceNow recommendations and notifying FinOps via Teams.
  tags:
  - finops
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: enterprise-ops
    port: 8080
    tools:
    - name: enterprise-license-usage-optimizer
      description: Optimizes licenses from Snowflake data, creating ServiceNow recommendations and notifying FinOps via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Enterprise License Usage Optimizer action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Enterprise License Usage Optimizer completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → enterprise-license-usage-optimizer.yml

Validates data deliveries by running Snowflake checks, logging results, and notifying via Teams.

naftiko: '0.5'
info:
  label: Clinical Data Delivery Validation
  description: Validates data deliveries by running Snowflake checks, logging results, and notifying via Teams.
  tags:
  - clinical
  - data-quality
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-data-delivery-validation
      description: Validates data deliveries by running Snowflake checks, logging results, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Data Delivery Validation completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-data-delivery-validation.yml

Checks pipeline health from Snowflake logs, creating ServiceNow alerts and notifying via Teams.

naftiko: '0.5'
info:
  label: Data Pipeline Orchestration Health Check
  description: Checks pipeline health from Snowflake logs, creating ServiceNow alerts and notifying via Teams.
  tags:
  - data-engineering
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: data-pipeline-orchestration-health-check
      description: Checks pipeline health from Snowflake logs, creating ServiceNow alerts and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Data Pipeline Orchestration Health Check action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Data Pipeline Orchestration Health Check completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → data-pipeline-orchestration-health-check.yml

Checks AWS CloudWatch alarm status.

naftiko: '0.5'
info:
  label: AWS CloudWatch Alarm Status
  description: Checks AWS CloudWatch alarm status.
  tags:
  - observability
  - aws
capability:
  exposes:
  - type: mcp
    namespace: cloud-monitoring
    port: 8080
    tools:
    - name: check-alarm
      description: Check CloudWatch alarm.
      inputParameters:
      - name: alarm_name
        in: body
        type: string
        description: Alarm name.
      call: cloudwatch.describe-alarm
      with:
        alarm_name: '{{alarm_name}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.MetricAlarms[0].StateValue
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: alarms
      path: /
      operations:
      - name: describe-alarm
        method: POST
Open in Framework → View in Fleet → aws-cloudwatch-alarm-status.yml

Tracks deployments from GitHub Actions, updates ServiceNow, and notifies DevOps via Teams.

naftiko: '0.5'
info:
  label: GitHub CI/CD Deployment Tracker
  description: Tracks deployments from GitHub Actions, updates ServiceNow, and notifies DevOps via Teams.
  tags:
  - devops
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github-ops
    port: 8080
    tools:
    - name: github-cicd-deployment-tracker
      description: Tracks deployments from GitHub Actions, updates ServiceNow, and notifies DevOps via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-repo-info
        type: call
        call: github.get-repo
        with:
          repo: '{{repo_name}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: GitHub CI/CD Deployment Tracker action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: GitHub CI/CD Deployment Tracker completed successfully.
  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
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-deployment-tracker.yml

Retrieves a vendor invoice from SAP S/4HANA awaiting approval and creates a ServiceNow finance request for the appropriate cost center manager to review.

naftiko: '0.5'
info:
  label: SAP S/4HANA Vendor Invoice to ServiceNow Finance Request
  description: Retrieves a vendor invoice from SAP S/4HANA awaiting approval and creates a ServiceNow finance request for the appropriate cost center manager to review.
  tags:
  - finance
  - erp
  - sap-s4hana
  - servicenow
  - accounts-payable
capability:
  exposes:
  - type: mcp
    namespace: ap-workflow
    port: 8080
    tools:
    - name: route-invoice-for-approval
      description: Given a SAP vendor invoice document number and fiscal year, retrieve invoice details and create a ServiceNow finance approval request for the cost center manager.
      inputParameters:
      - name: invoice_doc
        in: body
        type: string
        description: SAP supplier invoice document number.
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year, e.g. 2025.
      steps:
      - name: get-invoice
        type: call
        call: sap-s4.get-invoice
        with:
          SupplierInvoice: '{{invoice_doc}}'
          FiscalYear: '{{fiscal_year}}'
      - name: create-approval-request
        type: call
        call: servicenow-fin.create-request
        with:
          short_description: 'Invoice approval: {{invoice_doc}} — {{get-invoice.Supplier}}'
          category: finance_approval
          description: 'Amount: {{get-invoice.InvoiceGrossAmount}} {{get-invoice.DocumentCurrency}} | Vendor: {{get-invoice.Supplier}}'
          assignment_group: Finance_AP
  consumes:
  - type: http
    namespace: sap-s4
    baseUri: https://iqvia-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(SupplierInvoice='{{SupplierInvoice}}',FiscalYear='{{FiscalYear}}')
      inputParameters:
      - name: SupplierInvoice
        in: path
      - name: FiscalYear
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: servicenow-fin
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
Open in Framework → View in Fleet → sap-s-4hana-vendor-invoice-to-servicenow-finance-request.yml

Checks AWS CloudFormation stacks in clinical environments for configuration drift and creates a ServiceNow change request for each stack with detected drift.

naftiko: '0.5'
info:
  label: AWS CloudFormation Stack Drift to ServiceNow Change
  description: Checks AWS CloudFormation stacks in clinical environments for configuration drift and creates a ServiceNow change request for each stack with detected drift.
  tags:
  - cloud
  - infrastructure
  - aws
  - servicenow
  - governance
  - drift-detection
capability:
  exposes:
  - type: mcp
    namespace: stack-governance
    port: 8080
    tools:
    - name: audit-cloudformation-drift
      description: Given an AWS CloudFormation stack name and region, detect drift status and create a ServiceNow change request for any stack showing resource drift from its template.
      inputParameters:
      - name: stack_name
        in: body
        type: string
        description: AWS CloudFormation stack name to check for drift.
      - name: aws_region
        in: body
        type: string
        description: AWS region where the stack is deployed.
      steps:
      - name: detect-drift
        type: call
        call: cloudformation.detect-stack-drift
        with:
          StackName: '{{stack_name}}'
          region: '{{aws_region}}'
      - name: create-change-request
        type: call
        call: servicenow-cf.create-change
        with:
          short_description: 'CloudFormation drift: {{stack_name}} in {{aws_region}}'
          type: standard
          description: 'Stack {{stack_name}} has drifted from its CloudFormation template. Drift status: {{detect-drift.StackDriftStatus}}'
  consumes:
  - type: http
    namespace: cloudformation
    baseUri: https://cloudformation.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: stacks
      path: /?Action=DetectStackDrift&StackName={{StackName}}
      inputParameters:
      - name: StackName
        in: query
      operations:
      - name: detect-stack-drift
        method: POST
  - type: http
    namespace: servicenow-cf
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → aws-cloudformation-stack-drift-to-servicenow-change.yml

Checks compliance by scanning Terraform state, comparing Snowflake baselines, and creating ServiceNow findings.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Compliance Check
  description: Checks compliance by scanning Terraform state, comparing Snowflake baselines, and creating ServiceNow findings.
  tags:
  - infrastructure
  - compliance
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: terraform-ops
    port: 8080
    tools:
    - name: terraform-infrastructure-compliance-check
      description: Checks compliance by scanning Terraform state, comparing Snowflake baselines, and creating ServiceNow findings.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Terraform Infrastructure Compliance Check action required
          category: automated
          assigned_group: Operations
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-compliance-check.yml

Manages contracts by tracking Salesforce milestones, updating Snowflake, and notifying via Teams.

naftiko: '0.5'
info:
  label: Salesforce Contract Lifecycle Manager
  description: Manages contracts by tracking Salesforce milestones, updating Snowflake, and notifying via Teams.
  tags:
  - commercial
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce-ops
    port: 8080
    tools:
    - name: salesforce-contract-lifecycle-manager
      description: Manages contracts by tracking Salesforce milestones, updating Snowflake, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Salesforce Contract Lifecycle Manager completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-contract-lifecycle-manager.yml

When a Terraform Cloud plan is created for a clinical data environment, checks estimated cost and routes to ServiceNow for approval if above the compliance threshold.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Provisioning Governance
  description: When a Terraform Cloud plan is created for a clinical data environment, checks estimated cost and routes to ServiceNow for approval if above the compliance threshold.
  tags:
  - cloud
  - infrastructure
  - terraform
  - servicenow
  - governance
  - finops
capability:
  exposes:
  - type: mcp
    namespace: infra-governance
    port: 8080
    tools:
    - name: gate-clinical-infrastructure
      description: Given a Terraform Cloud run ID, fetch the cost estimate and workspace metadata and route to ServiceNow for compliance approval if the projected monthly cost exceeds the clinical environment budget.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: Terraform Cloud run ID for the clinical environment plan.
      - name: budget_limit_usd
        in: body
        type: number
        description: Monthly budget limit in USD for clinical environment infrastructure.
      steps:
      - name: get-cost-estimate
        type: call
        call: terraform.get-cost-estimate
        with:
          runId: '{{run_id}}'
      - name: create-compliance-approval
        type: call
        call: servicenow-tf.create-approval
        with:
          short_description: 'Infrastructure approval: Clinical env — ${{get-cost-estimate.proposed_monthly_cost}}/mo'
          category: cloud_governance
          assignment_group: IT_Compliance
          description: 'Run: {{run_id}} | Estimated monthly cost: ${{get-cost-estimate.proposed_monthly_cost}} | Limit: ${{budget_limit_usd}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: cost-estimates
      path: /runs/{{runId}}/cost-estimate
      inputParameters:
      - name: runId
        in: path
      operations:
      - name: get-cost-estimate
        method: GET
  - type: http
    namespace: servicenow-tf
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: approvals
      path: /table/sysapproval_approver
      operations:
      - name: create-approval
        method: POST
Open in Framework → View in Fleet → terraform-cloud-infrastructure-provisioning-governance.yml

Retrieves lead score from HubSpot.

naftiko: '0.5'
info:
  label: HubSpot Lead Score Lookup
  description: Retrieves lead score from HubSpot.
  tags:
  - marketing
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: marketing-leads
    port: 8080
    tools:
    - name: get-lead-score
      description: Look up HubSpot lead score.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: Contact ID.
      call: hubspot.get-contact
      with:
        contact_id: '{{contact_id}}'
      outputParameters:
      - name: score
        type: string
        mapping: $.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/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → hubspot-lead-score-lookup.yml

Generates SLA digests from ServiceNow, enriching in Snowflake, and posting to Teams.

naftiko: '0.5'
info:
  label: ServiceNow SLA Performance Digest
  description: Generates SLA digests from ServiceNow, enriching in Snowflake, and posting to Teams.
  tags:
  - it-service-management
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: servicenow-ops
    port: 8080
    tools:
    - name: servicenow-sla-performance-digest
      description: Generates SLA digests from ServiceNow, enriching in Snowflake, and posting to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: ServiceNow SLA Performance Digest action required
          category: automated
          assigned_group: Operations
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: ServiceNow SLA Performance Digest completed successfully.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/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: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-sla-performance-digest.yml

Lists members of an Entra security group.

naftiko: '0.5'
info:
  label: Microsoft Entra Group Membership
  description: Lists members of an Entra security group.
  tags:
  - identity
  - microsoft-entra
capability:
  exposes:
  - type: mcp
    namespace: identity-groups
    port: 8080
    tools:
    - name: list-group-members
      description: List Entra group members.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: Group ID.
      call: msgraph.get-group-members
      with:
        group_id: '{{group_id}}'
      outputParameters:
      - name: members
        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: groups
      path: /groups/{{group_id}}/members
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: get-group-members
        method: GET
Open in Framework → View in Fleet → microsoft-entra-group-membership.yml

Reconciles access across Workday, ServiceNow, and Snowflake.

naftiko: '0.5'
info:
  label: Cross-System User Access Reconciliation
  description: Reconciles access across Workday, ServiceNow, and Snowflake.
  tags:
  - security
  - identity
  - workday
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cross-ops
    port: 8080
    tools:
    - name: cross-system-user-access-reconciliation
      description: Reconciles access across Workday, ServiceNow, and Snowflake.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Cross-System User Access Reconciliation action required
          category: automated
          assigned_group: Operations
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
  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: /iqvia/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/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: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → cross-system-user-access-reconciliation.yml

Handles cost anomalies by querying Snowflake, creating ServiceNow tickets, and alerting FinOps via Teams.

naftiko: '0.5'
info:
  label: AWS Infrastructure Cost Anomaly Handler
  description: Handles cost anomalies by querying Snowflake, creating ServiceNow tickets, and alerting FinOps via Teams.
  tags:
  - finops
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aws-ops
    port: 8080
    tools:
    - name: aws-infrastructure-cost-anomaly-handler
      description: Handles cost anomalies by querying Snowflake, creating ServiceNow tickets, and alerting FinOps via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: AWS Infrastructure Cost Anomaly Handler action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: AWS Infrastructure Cost Anomaly Handler completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → aws-infrastructure-cost-anomaly-handler.yml

Checks real-world data pipeline status.

naftiko: '0.5'
info:
  label: Snowflake RWD Pipeline Status
  description: Checks real-world data pipeline status.
  tags:
  - data-engineering
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: check-rwd-pipeline
      description: Check RWD pipeline.
      inputParameters:
      - name: pipeline
        in: body
        type: string
        description: Pipeline name.
      call: snowflake.run-query
      with:
        statement: SELECT status FROM pipelines.runs WHERE name='{{pipeline}}' ORDER BY completed_at DESC LIMIT 1
      outputParameters:
      - name: status
        type: string
        mapping: $.data[0][0]
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-rwd-pipeline-status.yml

Responds to security incidents by creating ServiceNow tickets, checking Datadog, and alerting via Teams.

naftiko: '0.5'
info:
  label: IT Security Incident Response Orchestrator
  description: Responds to security incidents by creating ServiceNow tickets, checking Datadog, and alerting via Teams.
  tags:
  - security
  - servicenow
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: it-security-incident-response-orchestrator
      description: Responds to security incidents by creating ServiceNow tickets, checking Datadog, and alerting via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: IT Security Incident Response Orchestrator action required
          category: automated
          assigned_group: Operations
      - name: check-monitors
        type: call
        call: datadog.get-monitors
        with:
          tags: service:{{service_name}}
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: IT Security Incident Response Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-security-incident-response-orchestrator.yml

Identifies Salesforce contracts approaching renewal within 90 days and enrolls associated contacts in a HubSpot renewal nurture email sequence.

naftiko: '0.5'
info:
  label: Salesforce Contract Renewal Alert to HubSpot Sequence
  description: Identifies Salesforce contracts approaching renewal within 90 days and enrolls associated contacts in a HubSpot renewal nurture email sequence.
  tags:
  - sales
  - marketing
  - salesforce
  - hubspot
  - contract-management
capability:
  exposes:
  - type: mcp
    namespace: renewal-automation
    port: 8080
    tools:
    - name: trigger-renewal-sequence
      description: Given a Salesforce contract ID with an upcoming renewal date and a HubSpot workflow ID, retrieve the contract's contacts and enroll them in the renewal nurture sequence.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: Salesforce contract record ID.
      - name: hubspot_workflow_id
        in: body
        type: string
        description: HubSpot workflow ID for the renewal nurture sequence.
      steps:
      - name: get-contract-contacts
        type: call
        call: salesforce-contract.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: enroll-in-sequence
        type: call
        call: hubspot-renewal.enroll-contact
        with:
          workflowId: '{{hubspot_workflow_id}}'
          email: '{{get-contract-contacts.primary_contact_email}}'
  consumes:
  - type: http
    namespace: salesforce-contract
    baseUri: https://iqvia.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: hubspot-renewal
    baseUri: https://api.hubapi.com/automation/v2
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: enrollments
      path: /workflows/{{workflowId}}/enrollments/contacts/{{email}}
      inputParameters:
      - name: workflowId
        in: path
      - name: email
        in: path
      operations:
      - name: enroll-contact
        method: POST
Open in Framework → View in Fleet → salesforce-contract-renewal-alert-to-hubspot-sequence.yml

Returns row count for a clinical data table.

naftiko: '0.5'
info:
  label: Snowflake Clinical Data Count
  description: Returns row count for a clinical data table.
  tags:
  - data-engineering
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: count-clinical-rows
      description: Count clinical rows.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Table name.
      call: snowflake.run-query
      with:
        statement: SELECT COUNT(*) FROM {{table_name}}
      outputParameters:
      - name: count
        type: integer
        mapping: $.data[0][0]
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-data-count.yml

Aggregates pending ServiceNow change requests for the weekly CAB meeting and posts a structured digest to the Microsoft Teams governance channel.

naftiko: '0.5'
info:
  label: ServiceNow Change Advisory Board Digest to Teams
  description: Aggregates pending ServiceNow change requests for the weekly CAB meeting and posts a structured digest to the Microsoft Teams governance channel.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: cab-ops
    port: 8080
    tools:
    - name: post-cab-digest
      description: Retrieve all ServiceNow change requests in Scheduled or Pending Approval state for the next 7 days and post a structured CAB digest to the designated Microsoft Teams channel.
      inputParameters:
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the CAB digest post.
      steps:
      - name: list-pending-changes
        type: call
        call: servicenow-cab.list-changes
        with:
          state: scheduled
      - name: post-digest
        type: call
        call: msteams-cab.post-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: 'CAB Weekly Digest: {{list-pending-changes.total}} changes. Critical: {{list-pending-changes.critical_count}} | Standard: {{list-pending-changes.standard_count}}'
  consumes:
  - type: http
    namespace: servicenow-cab
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: changes
      path: /table/change_request
      inputParameters:
      - name: state
        in: query
      operations:
      - name: list-changes
        method: GET
  - type: http
    namespace: msteams-cab
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-advisory-board-digest-to-teams.yml

Searches Datadog logs by query.

naftiko: '0.5'
info:
  label: Datadog Log Search
  description: Searches Datadog logs by query.
  tags:
  - observability
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: observability-logs
    port: 8080
    tools:
    - name: search-logs
      description: Search Datadog logs.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Log query.
      call: datadog.search-logs
      with:
        query: '{{query}}'
      outputParameters:
      - name: logs
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: logs
      path: /logs/events/search
      operations:
      - name: search-logs
        method: POST
Open in Framework → View in Fleet → datadog-log-search.yml

Detects cloud infrastructure cost anomalies via Datadog metrics and routes a ServiceNow FinOps review task to the cloud governance team when daily spend exceeds budget thresholds.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Cost Anomaly to ServiceNow FinOps
  description: Detects cloud infrastructure cost anomalies via Datadog metrics and routes a ServiceNow FinOps review task to the cloud governance team when daily spend exceeds budget thresholds.
  tags:
  - cloud
  - finops
  - datadog
  - servicenow
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: detect-cloud-cost-anomaly
      description: Given a Datadog cost anomaly monitor ID and environment tag, check current cloud spend metrics and create a ServiceNow FinOps review task if the anomaly threshold is exceeded.
      inputParameters:
      - name: cost_monitor_id
        in: body
        type: string
        description: Datadog monitor ID tracking cloud cost anomalies.
      - name: environment
        in: body
        type: string
        description: Cloud environment tag, e.g. prod, staging.
      steps:
      - name: check-cost-monitor
        type: call
        call: datadog-cost.get-monitor
        with:
          monitor_id: '{{cost_monitor_id}}'
      - name: create-finops-task
        type: call
        call: servicenow-finops.create-task
        with:
          short_description: 'Cloud cost anomaly: {{environment}} — monitor {{cost_monitor_id}} triggered'
          category: finops
          assignment_group: Cloud_FinOps
          description: 'Environment: {{environment}} | Monitor state: {{check-cost-monitor.overall_state}}'
  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: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow-finops
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → datadog-infrastructure-cost-anomaly-to-servicenow-finops.yml

Checks S3 bucket size and object count.

naftiko: '0.5'
info:
  label: AWS S3 Bucket Size Check
  description: Checks S3 bucket size and object count.
  tags:
  - data-engineering
  - aws
capability:
  exposes:
  - type: mcp
    namespace: cloud-storage
    port: 8080
    tools:
    - name: check-bucket-size
      description: Check S3 bucket.
      inputParameters:
      - name: bucket_name
        in: body
        type: string
        description: Bucket name.
      call: s3.get-bucket-metrics
      with:
        bucket: '{{bucket_name}}'
      outputParameters:
      - name: size_bytes
        type: integer
        mapping: $.size
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: buckets
      path: /{{bucket_name}}
      inputParameters:
      - name: bucket_name
        in: path
      operations:
      - name: get-bucket-metrics
        method: GET
Open in Framework → View in Fleet → aws-s3-bucket-size-check.yml

Detects risky sign-in events in Microsoft Entra ID Protection for clinical system users and creates a ServiceNow security incident for the identity security team to investigate.

naftiko: '0.5'
info:
  label: Microsoft Entra Identity Risk to ServiceNow Security Incident
  description: Detects risky sign-in events in Microsoft Entra ID Protection for clinical system users and creates a ServiceNow security incident for the identity security team to investigate.
  tags:
  - security
  - identity
  - microsoft-entra
  - servicenow
  - clinical-systems
capability:
  exposes:
  - type: mcp
    namespace: identity-risk-ops
    port: 8080
    tools:
    - name: handle-identity-risk-event
      description: Given a Microsoft Entra risk detection ID, retrieve risky sign-in details from Microsoft Graph and create a ServiceNow security incident for the IQVIA identity security team.
      inputParameters:
      - name: risk_detection_id
        in: body
        type: string
        description: Microsoft Entra ID risk detection ID.
      steps:
      - name: get-risk-event
        type: call
        call: graph-risk.get-risk-detection
        with:
          riskDetectionId: '{{risk_detection_id}}'
      - name: create-security-incident
        type: call
        call: servicenow-identity.create-incident
        with:
          short_description: 'Identity risk: {{get-risk-event.userDisplayName}} — {{get-risk-event.riskEventType}}'
          category: security
          urgency: '2'
          description: 'UPN: {{get-risk-event.userPrincipalName}} | Risk level: {{get-risk-event.riskLevel}} | IP: {{get-risk-event.ipAddress}} | Detection: {{risk_detection_id}}'
  consumes:
  - type: http
    namespace: graph-risk
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: risk-detections
      path: /identityProtection/riskDetections/{{riskDetectionId}}
      inputParameters:
      - name: riskDetectionId
        in: path
      operations:
      - name: get-risk-detection
        method: GET
  - type: http
    namespace: servicenow-identity
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → microsoft-entra-identity-risk-to-servicenow-security-incident.yml

Pulls new LinkedIn recruiter candidate applications for a life sciences role and creates candidate records in Workday HCM for recruiter review and disposition.

naftiko: '0.5'
info:
  label: LinkedIn Talent Sourcing to Workday Candidate Pipeline
  description: Pulls new LinkedIn recruiter candidate applications for a life sciences role and creates candidate records in Workday HCM for recruiter review and disposition.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: sync-linkedin-candidates
      description: Given a LinkedIn job posting ID and Workday business unit, retrieve new candidate applications from LinkedIn Recruiter and create candidate profiles in Workday HCM for review.
      inputParameters:
      - name: linkedin_job_id
        in: body
        type: string
        description: LinkedIn job posting ID.
      - name: business_unit
        in: body
        type: string
        description: Workday business unit code for candidate placement.
      steps:
      - name: get-candidates
        type: call
        call: linkedin-jobs.get-applicants
        with:
          jobId: '{{linkedin_job_id}}'
      - name: create-wd-candidates
        type: call
        call: workday-recruit.create-candidates
        with:
          businessUnit: '{{business_unit}}'
          applicants: '{{get-candidates.applicants}}'
  consumes:
  - type: http
    namespace: linkedin-jobs
    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: workday-recruit
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: candidates
      path: /iqvia/candidates
      operations:
      - name: create-candidates
        method: POST
Open in Framework → View in Fleet → linkedin-talent-sourcing-to-workday-candidate-pipeline.yml

When a P1 incident is opened for a clinical data system in ServiceNow, queries Datadog for correlated infrastructure alerts and enriches the incident with system health context.

naftiko: '0.5'
info:
  label: ServiceNow ITSM Incident Triage for Clinical Systems
  description: When a P1 incident is opened for a clinical data system in ServiceNow, queries Datadog for correlated infrastructure alerts and enriches the incident with system health context.
  tags:
  - itsm
  - observability
  - servicenow
  - datadog
  - clinical-systems
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: clinical-itsm
    port: 8080
    tools:
    - name: triage-clinical-incident
      description: Given a ServiceNow incident number and the name of the affected clinical system, fetch correlated Datadog monitors and update the incident with alert context for faster resolution.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number, e.g. INC0098765.
      - name: system_name
        in: body
        type: string
        description: Affected clinical system name as tagged in Datadog.
      steps:
      - name: get-incident
        type: call
        call: servicenow-read.get-incident
        with:
          number: '{{incident_number}}'
      - name: get-dd-alerts
        type: call
        call: datadog-clinical.list-monitors
        with:
          tags: service:{{system_name}}
      - name: update-incident
        type: call
        call: servicenow-write.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          work_notes: 'Datadog correlated alerts: {{get-dd-alerts.alert_ids}} | Monitor count: {{get-dd-alerts.total}}'
  consumes:
  - type: http
    namespace: servicenow-read
    baseUri: https://iqvia.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-clinical
    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-monitors
        method: GET
  - type: http
    namespace: servicenow-write
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PATCH
Open in Framework → View in Fleet → servicenow-itsm-incident-triage-for-clinical-systems.yml

Syncs email metrics from HubSpot to Snowflake, refreshes Power BI, and notifies via Teams.

naftiko: '0.5'
info:
  label: HubSpot Email Campaign Performance Sync
  description: Syncs email metrics from HubSpot to Snowflake, refreshes Power BI, and notifies via Teams.
  tags:
  - marketing
  - hubspot
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hubspot-ops
    port: 8080
    tools:
    - name: hubspot-email-campaign-performance-sync
      description: Syncs email metrics from HubSpot to Snowflake, refreshes Power BI, and notifies via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: search-contacts
        type: call
        call: hubspot.search
        with:
          query: '{{search_term}}'
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.dashboard_dataset_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: HubSpot Email Campaign Performance Sync completed successfully.
  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
      operations:
      - name: search
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → hubspot-email-campaign-performance-sync.yml

Enforces quality gates from GitHub PRs, Snowflake metrics, and Jira issues.

naftiko: '0.5'
info:
  label: GitHub Code Quality Gate Enforcer
  description: Enforces quality gates from GitHub PRs, Snowflake metrics, and Jira issues.
  tags:
  - devops
  - github
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: github-ops
    port: 8080
    tools:
    - name: github-code-quality-gate-enforcer
      description: Enforces quality gates from GitHub PRs, Snowflake metrics, and Jira issues.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-repo-info
        type: call
        call: github.get-repo
        with:
          repo: '{{repo_name}}'
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: GitHub Code Quality Gate Enforcer follow-up
          issue_type: Task
  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
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://iqvia.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-code-quality-gate-enforcer.yml

Checks user account status in Entra ID.

naftiko: '0.5'
info:
  label: Microsoft Entra User Status
  description: Checks user account status in Entra ID.
  tags:
  - identity
  - microsoft-entra
capability:
  exposes:
  - type: mcp
    namespace: identity-status
    port: 8080
    tools:
    - name: check-user-status
      description: Check Entra user.
      inputParameters:
      - name: upn
        in: body
        type: string
        description: UPN.
      call: msgraph.get-user
      with:
        upn: '{{upn}}'
      outputParameters:
      - name: enabled
        type: boolean
        mapping: $.accountEnabled
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → microsoft-entra-user-status.yml

Triggers a Power BI dataset refresh for the pharmaceutical sales analytics workspace and posts a distribution link to the IQVIA commercial teams Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Power BI Pharma Sales Analytics Refresh
  description: Triggers a Power BI dataset refresh for the pharmaceutical sales analytics workspace and posts a distribution link to the IQVIA commercial teams Microsoft Teams channel.
  tags:
  - analytics
  - reporting
  - power-bi
  - microsoft-teams
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: pharma-analytics
    port: 8080
    tools:
    - name: refresh-pharma-dashboard
      description: Trigger a Power BI pharma sales dataset refresh and post the updated dashboard URL to the designated Microsoft Teams commercial analytics channel.
      inputParameters:
      - name: powerbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the pharma sales analytics workspace.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for commercial analytics distribution.
      steps:
      - name: refresh-dataset
        type: call
        call: powerbi.refresh-dataset
        with:
          datasetId: '{{powerbi_dataset_id}}'
      - name: notify-channel
        type: call
        call: msteams-analytics.post-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: Pharma Sales Analytics dashboard has been refreshed and is ready for review.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams-analytics
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → power-bi-pharma-sales-analytics-refresh.yml

Processes anonymization by executing Snowflake transforms, logging in ServiceNow, and confirming via Teams.

naftiko: '0.5'
info:
  label: Data Privacy Anonymization Workflow
  description: Processes anonymization by executing Snowflake transforms, logging in ServiceNow, and confirming via Teams.
  tags:
  - compliance
  - privacy
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: data-privacy-anonymization-workflow
      description: Processes anonymization by executing Snowflake transforms, logging in ServiceNow, and confirming via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Data Privacy Anonymization Workflow action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Data Privacy Anonymization Workflow completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → data-privacy-anonymization-workflow.yml

Orchestrates month-end close with Snowflake reconciliations and notifies finance via Teams.

naftiko: '0.5'
info:
  label: Financial Month-End Close Orchestrator
  description: Orchestrates month-end close with Snowflake reconciliations and notifies finance via Teams.
  tags:
  - finance
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: financial-ops
    port: 8080
    tools:
    - name: financial-month-end-close-orchestrator
      description: Orchestrates month-end close with Snowflake reconciliations and notifies finance via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Financial Month-End Close Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → financial-month-end-close-orchestrator.yml

Syncs leads from HubSpot to Salesforce, logs in Snowflake, and notifies sales via Teams.

naftiko: '0.5'
info:
  label: HubSpot to Salesforce Lead Sync
  description: Syncs leads from HubSpot to Salesforce, logs in Snowflake, and notifies sales via Teams.
  tags:
  - marketing
  - commercial
  - hubspot
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hubspot-ops
    port: 8080
    tools:
    - name: hubspot-to-salesforce-lead-sync
      description: Syncs leads from HubSpot to Salesforce, logs in Snowflake, and notifies sales via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: search-contacts
        type: call
        call: hubspot.search
        with:
          query: '{{search_term}}'
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: HubSpot to Salesforce Lead Sync completed successfully.
  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
      operations:
      - name: search
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → hubspot-to-salesforce-lead-sync.yml

Audits data lake governance using Snowflake, ServiceNow findings, and Teams alerts.

naftiko: '0.5'
info:
  label: AWS S3 Data Lake Governance Check
  description: Audits data lake governance using Snowflake, ServiceNow findings, and Teams alerts.
  tags:
  - data-governance
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: aws-ops
    port: 8080
    tools:
    - name: aws-s3-data-lake-governance-check
      description: Audits data lake governance using Snowflake, ServiceNow findings, and Teams alerts.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: AWS S3 Data Lake Governance Check action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: AWS S3 Data Lake Governance Check completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://iqvia.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: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → aws-s3-data-lake-governance-check.yml

Provisions new hire access across Workday, ServiceNow, and confirms via Teams.

naftiko: '0.5'
info:
  label: Employee Onboarding Access Provisioning
  description: Provisions new hire access across Workday, ServiceNow, and confirms via Teams.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: employee-ops
    port: 8080
    tools:
    - name: employee-onboarding-access-provisioning
      description: Provisions new hire access across Workday, ServiceNow, and confirms via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Employee Onboarding Access Provisioning action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Employee Onboarding Access Provisioning completed successfully.
  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: /iqvia/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://iqvia.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-onboarding-access-provisioning.yml

Enriches Salesforce pharmaceutical customer account records with real-world data signals from IQVIA's analytics platform, updating commercial potential and therapeutic area tags.

naftiko: '0.5'
info:
  label: Salesforce CRM Pharma Account Enrichment
  description: Enriches Salesforce pharmaceutical customer account records with real-world data signals from IQVIA's analytics platform, updating commercial potential and therapeutic area tags.
  tags:
  - sales
  - crm
  - salesforce
  - data-enrichment
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: pharma-account-enrichment
    port: 8080
    tools:
    - name: enrich-pharma-account
      description: Given a Salesforce account ID and a target therapeutic area, retrieve prescriber potential and market share data and update the Salesforce account with commercial insights.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID for the pharmaceutical customer.
      - name: therapeutic_area
        in: body
        type: string
        description: Therapeutic area to look up, e.g. Oncology.
      steps:
      - name: get-account
        type: call
        call: salesforce-acct.get-account
        with:
          account_id: '{{account_id}}'
      - name: update-account
        type: call
        call: salesforce-update.update-account
        with:
          account_id: '{{account_id}}'
          Therapeutic_Area__c: '{{therapeutic_area}}'
          Commercial_Potential__c: '{{get-account.prescriber_potential}}'
  consumes:
  - type: http
    namespace: salesforce-acct
    baseUri: https://iqvia.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: salesforce-update
    baseUri: https://iqvia.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: account-update
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
Open in Framework → View in Fleet → salesforce-crm-pharma-account-enrichment.yml

Extracts defect and bug metrics from Jira for a given project and refreshes a Power BI quality dashboard for engineering and QA leadership.

naftiko: '0.5'
info:
  label: Jira Defect Rate Report to Power BI
  description: Extracts defect and bug metrics from Jira for a given project and refreshes a Power BI quality dashboard for engineering and QA leadership.
  tags:
  - devops
  - analytics
  - jira
  - power-bi
  - quality
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: quality-reporting
    port: 8080
    tools:
    - name: refresh-defect-rate-report
      description: Given a Jira project key and a Power BI dataset ID, count open bugs and escaped defects from Jira and push a dataset refresh to the Power BI quality dashboard.
      inputParameters:
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key to analyze for defects, e.g. CLINICAL.
      - name: powerbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the quality dashboard.
      steps:
      - name: get-bug-count
        type: call
        call: jira-quality.count-bugs
        with:
          project: '{{jira_project_key}}'
          issuetype: Bug
          status: Open
      - name: refresh-pbi
        type: call
        call: powerbi-quality.refresh-dataset
        with:
          datasetId: '{{powerbi_dataset_id}}'
  consumes:
  - type: http
    namespace: jira-quality
    baseUri: https://iqvia.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: count-bugs
        method: GET
  - type: http
    namespace: powerbi-quality
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: datasetId
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → jira-defect-rate-report-to-power-bi.yml

Monitors warehouse capacity levels in SAP, creates planning alerts in ServiceNow, and notifies logistics when thresholds are breached for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Warehouse Capacity Planning Alert
  description: Monitors warehouse capacity levels in SAP, creates planning alerts in ServiceNow, and notifies logistics when thresholds are breached for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - warehouse
  - capacity-planning
capability:
  exposes:
  - type: mcp
    namespace: logistics-planning
    port: 8080
    tools:
    - name: alert-warehouse-capacity
      description: Given a warehouse and capacity threshold, check current utilization and alert if exceeded.
      inputParameters:
      - name: warehouse_id
        in: body
        type: string
        description: The SAP warehouse number.
      - name: threshold_percent
        in: body
        type: integer
        description: Capacity utilization threshold percentage.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      steps:
      - name: check-capacity
        type: call
        call: sap.get-warehouse-utilization
        with:
          warehouse: '{{warehouse_id}}'
          plant: '{{plant}}'
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Warehouse Capacity Alert: {{warehouse_id}} at {{check-capacity.utilization}}%'
          category: logistics
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.logistics_channel
          text: 'Warehouse Capacity: {{warehouse_id}} at Plant {{plant}} is at {{check-capacity.utilization}}% (threshold: {{threshold_percent}}%). SNOW: {{create-alert.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_WAREHOUSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-warehouse-capacity-planning-alert.yml

Checks travel expense reports for policy violations, creates audit findings in ServiceNow, and notifies finance for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Concur Travel Policy Compliance Checker
  description: Checks travel expense reports for policy violations, creates audit findings in ServiceNow, and notifies finance for Johnson & Johnson.
  tags:
  - finance
  - sap-concur
  - compliance
  - audit
capability:
  exposes:
  - type: mcp
    namespace: finance-compliance
    port: 8080
    tools:
    - name: check-travel-compliance
      description: Given an expense report ID, check for policy violations, create audit findings, and notify the compliance team.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: employee_id
        in: body
        type: string
        description: The employee ID who submitted the report.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: log-findings
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Travel Compliance Review: Report {{report_id}}'
          category: finance_audit
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.finance_compliance_channel
          text: 'Travel Compliance: Report {{report_id}} by Employee {{employee_id}}. Total: {{get-report.total}}. Violations: {{get-report.violations_count}}. SNOW: {{log-findings.number}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us2.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-policy-compliance-checker.yml

Retrieves the latest document versions and approval states from Veeva Vault for a given product dossier, and flags any documents in Draft state past their review deadline.

naftiko: '0.5'
info:
  label: Veeva Vault Document Version Control Check
  description: Retrieves the latest document versions and approval states from Veeva Vault for a given product dossier, and flags any documents in Draft state past their review deadline.
  tags:
  - regulatory
  - quality
  - veeva
  - compliance
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: vault-ops
    port: 8080
    tools:
    - name: check-dossier-document-states
      description: Given a Veeva Vault product dossier ID, retrieve all contained documents and their lifecycle states. Flag any that are in Draft state and past the expected review deadline.
      inputParameters:
      - name: dossier_id
        in: body
        type: string
        description: The Veeva Vault dossier or binder ID to check.
      - name: review_deadline
        in: body
        type: string
        description: The review deadline date in YYYY-MM-DD format.
      call: veeva.list-binder-documents
      with:
        dossier_id: '{{dossier_id}}'
      outputParameters:
      - name: document_count
        type: number
        mapping: $.responseStatus
      - name: documents
        type: array
        mapping: $.data
        items:
        - name: document_id
          type: string
          mapping: $.id
        - name: state
          type: string
          mapping: $.lifecycle_state__v
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: binder-documents
      path: /objects/binders/{{dossier_id}}/documents
      inputParameters:
      - name: dossier_id
        in: path
      operations:
      - name: list-binder-documents
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-version-control-check.yml

Retrieves batch genealogy and traceability data from SAP for a given batch number in Johnson & Johnson manufacturing.

naftiko: '0.5'
info:
  label: SAP Batch Genealogy Lookup
  description: Retrieves batch genealogy and traceability data from SAP for a given batch number in Johnson & Johnson manufacturing.
  tags:
  - manufacturing
  - sap
  - batch-tracking
  - quality
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-ops
    port: 8080
    tools:
    - name: get-batch-genealogy
      description: Given a batch number and plant code, return the batch creation date, material, and expiry date.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      call: sap.get-batch
      with:
        batch_number: '{{batch_number}}'
        plant: '{{plant}}'
      outputParameters:
      - name: material
        type: string
        mapping: $.d.Material
      - name: manufacture_date
        type: string
        mapping: $.d.ManufactureDate
      - name: shelf_life_expiry
        type: string
        mapping: $.d.ShelfLifeExpirationDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch(Material='',Batch='{{batch_number}}',Plant='{{plant}}')
      inputParameters:
      - name: batch_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-batch
        method: GET
Open in Framework → View in Fleet → sap-batch-genealogy-lookup.yml

Creates monitoring visit schedules in Veeva Vault, assigns tasks in Jira, and notifies the CRA team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Site Monitoring Visit Scheduler
  description: Creates monitoring visit schedules in Veeva Vault, assigns tasks in Jira, and notifies the CRA team for Johnson & Johnson.
  tags:
  - clinical-trials
  - veeva-vault
  - jira
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: clinical-monitoring
    port: 8080
    tools:
    - name: schedule-monitoring-visit
      description: Given site and visit details, create a Veeva Vault record, a Jira task, and a Teams notification.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The clinical site identifier.
      - name: visit_type
        in: body
        type: string
        description: Type of monitoring visit (routine, for-cause, closeout).
      - name: visit_date
        in: body
        type: string
        description: Scheduled date for the visit.
      - name: cra_name
        in: body
        type: string
        description: Name of the assigned CRA.
      steps:
      - name: create-vault-record
        type: call
        call: veeva.create-object-record
        with:
          object_type: monitoring_visit__c
          site_id__c: '{{site_id}}'
          visit_type__c: '{{visit_type}}'
          visit_date__c: '{{visit_date}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project: CLIN
          summary: 'Monitoring Visit: {{visit_type}} at Site {{site_id}} on {{visit_date}}'
          issuetype: Task
      - name: notify-cra-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cra_channel
          text: 'New {{visit_type}} monitoring visit at Site {{site_id}} on {{visit_date}}. CRA: {{cra_name}}. Jira: {{create-jira-task.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-site-monitoring-visit-scheduler.yml

Validates invoices by performing three-way matching in SAP, logs exceptions in ServiceNow, and notifies accounts payable for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Invoice Three-Way Match Validator
  description: Validates invoices by performing three-way matching in SAP, logs exceptions in ServiceNow, and notifies accounts payable for Johnson & Johnson.
  tags:
  - finance
  - sap
  - accounts-payable
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: finance-ap
    port: 8080
    tools:
    - name: validate-invoice-match
      description: Given an invoice number, perform three-way match validation, log exceptions, and notify AP.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP invoice document number.
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      steps:
      - name: check-match
        type: call
        call: sap.validate-three-way-match
        with:
          invoice_number: '{{invoice_number}}'
          company_code: '{{company_code}}'
      - name: log-exception
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Invoice Match Exception: {{invoice_number}}'
          category: accounts_payable
      - name: notify-ap
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.ap_channel
          text: 'Invoice Match: {{invoice_number}} in Company {{company_code}}. Status: {{check-match.status}}. Variance: {{check-match.variance}}. SNOW: {{log-exception.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-invoice-three-way-match-validator.yml

Retrieves cost element master data from SAP for Johnson & Johnson finance and controlling operations.

naftiko: '0.5'
info:
  label: SAP Cost Element Lookup
  description: Retrieves cost element master data from SAP for Johnson & Johnson finance and controlling operations.
  tags:
  - finance
  - sap
  - controlling
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: finance-controlling
    port: 8080
    tools:
    - name: get-cost-element
      description: Given a cost element code, return the description, category, and controlling area.
      inputParameters:
      - name: cost_element
        in: body
        type: string
        description: The SAP cost element code.
      call: sap.get-cost-element
      with:
        cost_element: '{{cost_element}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.d.CostElementDescription
      - name: category
        type: string
        mapping: $.d.CostElementCategory
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_COSTELEMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → sap-cost-element-lookup.yml

When a new lead is created in Salesforce for an Innovative Medicine product, enriches the lead with additional contact and company data, then updates the Salesforce record.

naftiko: '0.5'
info:
  label: Salesforce CRM Lead Enrichment
  description: When a new lead is created in Salesforce for an Innovative Medicine product, enriches the lead with additional contact and company data, then updates the Salesforce record.
  tags:
  - sales
  - crm
  - salesforce
  - enrichment
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: crm-enrichment
    port: 8080
    tools:
    - name: enrich-pharma-lead
      description: Given a Salesforce lead ID for an Innovative Medicine product, retrieve the lead details and update the record with enriched medical specialty and institution data.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich.
      steps:
      - name: get-lead
        type: call
        call: salesforce-read.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: update-lead
        type: call
        call: salesforce-write.update-lead
        with:
          lead_id: '{{lead_id}}'
          lead_source: Enriched
          status: Working
  consumes:
  - type: http
    namespace: salesforce-read
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: salesforce-write
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-crm-lead-enrichment.yml

Tracks IRB approval status for clinical sites by querying Veeva Vault, updating Jira, and notifying the regulatory team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical IRB Approval Tracking Orchestrator
  description: Tracks IRB approval status for clinical sites by querying Veeva Vault, updating Jira, and notifying the regulatory team for Johnson & Johnson.
  tags:
  - clinical-trials
  - regulatory
  - veeva-vault
  - jira
capability:
  exposes:
  - type: mcp
    namespace: clinical-regulatory
    port: 8080
    tools:
    - name: track-irb-approvals
      description: Given a study ID, check IRB approval status across sites, update tracking, and notify the team.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: region
        in: body
        type: string
        description: The geographic region to check.
      steps:
      - name: query-irb-status
        type: call
        call: veeva.query-submissions
        with:
          query: SELECT site_id__c, irb_status__c FROM irb_submission__c WHERE study_id__c = '{{study_id}}' AND region__c = '{{region}}'
      - name: update-tracker
        type: call
        call: jira.create-issue
        with:
          project: REG
          summary: 'IRB Status Update: Study {{study_id}} — {{region}}'
          issuetype: Task
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.regulatory_channel
          text: 'IRB Approval Status for Study {{study_id}} ({{region}}): {{query-irb-status.totalCount}} sites tracked. Jira: {{update-tracker.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-submissions
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-irb-approval-tracking-orchestrator.yml

Retrieves outbound delivery document details from SAP by delivery number for Johnson & Johnson logistics operations.

naftiko: '0.5'
info:
  label: SAP Delivery Document Lookup
  description: Retrieves outbound delivery document details from SAP by delivery number for Johnson & Johnson logistics operations.
  tags:
  - logistics
  - sap
  - delivery
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: logistics-ops
    port: 8080
    tools:
    - name: get-delivery-document
      description: Given a SAP delivery number, return the ship-to party, delivery date, and total weight.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery document number.
      call: sap.get-delivery
      with:
        delivery_number: '{{delivery_number}}'
      outputParameters:
      - name: ship_to
        type: string
        mapping: $.d.ShipToParty
      - name: delivery_date
        type: string
        mapping: $.d.DeliveryDate
      - name: total_weight
        type: string
        mapping: $.d.HeaderGrossWeight
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
Open in Framework → View in Fleet → sap-delivery-document-lookup.yml

Orchestrates vendor qualification reviews by pulling vendor data from SAP, creating a ServiceNow assessment task, and notifying procurement for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Vendor Qualification Review Orchestrator
  description: Orchestrates vendor qualification reviews by pulling vendor data from SAP, creating a ServiceNow assessment task, and notifying procurement for Johnson & Johnson.
  tags:
  - procurement
  - sap
  - servicenow
  - vendor-management
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: initiate-vendor-review
      description: Given a vendor number, retrieve vendor details from SAP, create an assessment task, and notify procurement.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The SAP vendor number.
      - name: review_type
        in: body
        type: string
        description: Type of qualification review (initial, periodic, for-cause).
      steps:
      - name: get-vendor-data
        type: call
        call: sap.get-vendor
        with:
          vendor_number: '{{vendor_number}}'
      - name: create-assessment
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Vendor Qualification: {{get-vendor-data.SupplierName}} — {{review_type}}'
          category: vendor_management
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.procurement_channel
          text: 'Vendor Review initiated for {{get-vendor-data.SupplierName}} ({{vendor_number}}). Type: {{review_type}}. Task: {{create-assessment.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-qualification-review-orchestrator.yml

Retrieves the current health status of a monitored service from Datadog for Johnson & Johnson SRE operations.

naftiko: '0.5'
info:
  label: Datadog Service Health Check
  description: Retrieves the current health status of a monitored service from Datadog for Johnson & Johnson SRE operations.
  tags:
  - monitoring
  - datadog
  - sre
  - health-check
capability:
  exposes:
  - type: mcp
    namespace: sre-ops
    port: 8080
    tools:
    - name: get-service-health
      description: Given a service name, return the overall status, number of active monitors, and last check time.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog.get-service-status
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: overall_status
        type: string
        mapping: $.overall_status
      - name: active_monitors
        type: integer
        mapping: $.counts.total
      - name: last_triggered
        type: string
        mapping: $.last_triggered_ts
  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/search?query=service:{{service_name}}
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-service-status
        method: GET
Open in Framework → View in Fleet → datadog-service-health-check.yml

Identifies overdue compliance training assignments in Workday and sends reminder notifications for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Workday Learning Compliance Reminder
  description: Identifies overdue compliance training assignments in Workday and sends reminder notifications for Johnson & Johnson.
  tags:
  - hr
  - workday
  - compliance
  - training
capability:
  exposes:
  - type: mcp
    namespace: hr-compliance
    port: 8080
    tools:
    - name: send-compliance-reminders
      description: Given a compliance training program ID, find overdue assignments and send reminders.
      inputParameters:
      - name: program_id
        in: body
        type: string
        description: The Workday learning program ID.
      - name: days_overdue
        in: body
        type: integer
        description: Minimum days overdue to trigger reminder.
      steps:
      - name: get-overdue
        type: call
        call: workday.get-overdue-training
        with:
          program_id: '{{program_id}}'
          days_overdue: '{{days_overdue}}'
      - name: send-reminder
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.hr_compliance_channel
          text: 'Compliance Training Alert: {{get-overdue.count}} employees overdue for program {{program_id}} (>{{days_overdue}} days).'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Learning/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /learningAssignments?overdue=true&program={{program_id}}
      inputParameters:
      - name: program_id
        in: query
      operations:
      - name: get-overdue-training
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-learning-compliance-reminder.yml

Coordinates HCP speaker program events by creating events in Salesforce, logging compliance checks, and notifying medical affairs for Johnson & Johnson.

naftiko: '0.5'
info:
  label: HCP Speaker Program Event Coordinator
  description: Coordinates HCP speaker program events by creating events in Salesforce, logging compliance checks, and notifying medical affairs for Johnson & Johnson.
  tags:
  - medical-affairs
  - salesforce
  - compliance
  - events
capability:
  exposes:
  - type: mcp
    namespace: medical-affairs-events
    port: 8080
    tools:
    - name: coordinate-speaker-event
      description: Given speaker event details, create the event in Salesforce, verify FMV compliance, and notify the team.
      inputParameters:
      - name: speaker_name
        in: body
        type: string
        description: Name of the HCP speaker.
      - name: event_title
        in: body
        type: string
        description: Title of the speaker program event.
      - name: event_date
        in: body
        type: string
        description: Date of the event.
      - name: honorarium_amount
        in: body
        type: string
        description: Speaker honorarium amount.
      steps:
      - name: create-event
        type: call
        call: salesforce.create-record
        with:
          object_type: Speaker_Event__c
          Speaker_Name__c: '{{speaker_name}}'
          Event_Title__c: '{{event_title}}'
      - name: check-fmv
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'FMV Compliance Check: {{speaker_name}} — {{honorarium_amount}}'
          category: compliance
      - name: notify-med-affairs
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.med_affairs_events_channel
          text: 'Speaker Event: {{event_title}} on {{event_date}}. Speaker: {{speaker_name}}. Honorarium: {{honorarium_amount}}. SFDC: {{create-event.id}}. FMV: {{check-fmv.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /sobjects/Speaker_Event__c
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hcp-speaker-program-event-coordinator.yml

Queries SAP Ariba for supplier contracts expiring within the next 60 days, creates a ServiceNow procurement renewal task for each, and posts a contract expiry digest to the procurement Teams channel.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Expiry Monitor
  description: Queries SAP Ariba for supplier contracts expiring within the next 60 days, creates a ServiceNow procurement renewal task for each, and posts a contract expiry digest to the procurement Teams channel.
  tags:
  - procurement
  - sap-ariba
  - servicenow
  - microsoft-teams
  - contract-management
capability:
  exposes:
  - type: mcp
    namespace: contract-ops
    port: 8080
    tools:
    - name: monitor-expiring-contracts
      description: Retrieve all SAP Ariba contracts expiring in the next 60 days, open a ServiceNow renewal task for each, and post a summary digest to the procurement Teams channel.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: integer
        description: Number of days ahead to look for expiring contracts (default 60).
      steps:
      - name: get-expiring-contracts
        type: call
        call: ariba.list-expiring-contracts
        with:
          days: '{{days_until_expiry}}'
      - name: create-renewal-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Contract renewal required: {{days_until_expiry}} day expiry window'
          category: procurement
          assigned_group: Strategic_Sourcing
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_procurement_channel_id
          text: 'Contract Expiry Digest: {{get-expiring-contracts.contract_count}} contracts expiring within {{days_until_expiry}} days | Renewal task: {{create-renewal-task.number}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts
      operations:
      - name: list-expiring-contracts
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-expiry-monitor.yml

Processes Suspected Unexpected Serious Adverse Reactions by logging in Veeva Vault, creating urgent ServiceNow cases, and alerting the DSMB for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Safety Reporting SUSAR Handler
  description: Processes Suspected Unexpected Serious Adverse Reactions by logging in Veeva Vault, creating urgent ServiceNow cases, and alerting the DSMB for Johnson & Johnson.
  tags:
  - drug-safety
  - clinical-trials
  - veeva-vault
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: clinical-safety
    port: 8080
    tools:
    - name: process-susar
      description: Given SUSAR details, log in Veeva Vault, create an urgent ServiceNow case, and alert the DSMB.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: patient_id
        in: body
        type: string
        description: Anonymized patient identifier.
      - name: event_term
        in: body
        type: string
        description: The adverse event MedDRA preferred term.
      - name: seriousness_criteria
        in: body
        type: string
        description: Seriousness criteria met.
      steps:
      - name: log-in-vault
        type: call
        call: veeva.create-object-record
        with:
          object_type: safety_case__c
          study_id__c: '{{study_id}}'
          patient_id__c: '{{patient_id}}'
          event_term__c: '{{event_term}}'
      - name: create-urgent-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SUSAR: {{event_term}} — Study {{study_id}}'
          priority: '1'
      - name: alert-dsmb
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.dsmb_channel
          text: 'URGENT SUSAR: {{event_term}} in Study {{study_id}} (Patient {{patient_id}}). Seriousness: {{seriousness_criteria}}. Vault: {{log-in-vault.id}}. SNOW: {{create-urgent-case.number}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-safety-reporting-susar-handler.yml

Processes patient assistance program enrollments by creating cases in Salesforce, verifying eligibility, and notifying patient services for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Patient Assistance Program Enrollment Processor
  description: Processes patient assistance program enrollments by creating cases in Salesforce, verifying eligibility, and notifying patient services for Johnson & Johnson.
  tags:
  - commercial
  - salesforce
  - patient-services
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: patient-services
    port: 8080
    tools:
    - name: process-pap-enrollment
      description: Given patient enrollment details, create a Salesforce case, verify eligibility, and notify the patient services team.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient identifier.
      - name: product_name
        in: body
        type: string
        description: The product for which assistance is requested.
      - name: insurance_status
        in: body
        type: string
        description: Patient insurance status.
      steps:
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'PAP Enrollment: {{product_name}} — Patient {{patient_id}}'
          type: Patient_Assistance
      - name: verify-eligibility
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT eligible FROM pap_eligibility_rules WHERE product = '{{product_name}}'
          warehouse: COMMERCIAL_WH
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.patient_services_channel
          text: 'PAP Enrollment: Patient {{patient_id}} for {{product_name}}. Eligibility: {{verify-eligibility.data}}. Case: {{create-case.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-assistance-program-enrollment-processor.yml

Retrieves current inventory stock levels from SAP for a material at a given plant for Johnson & Johnson supply chain operations.

naftiko: '0.5'
info:
  label: SAP Inventory Stock Lookup
  description: Retrieves current inventory stock levels from SAP for a material at a given plant for Johnson & Johnson supply chain operations.
  tags:
  - supply-chain
  - sap
  - inventory
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: get-stock-level
      description: Given a material number and plant code, return the unrestricted stock, quality inspection stock, and blocked stock quantities.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      call: sap.get-stock
      with:
        material_number: '{{material_number}}'
        plant: '{{plant}}'
      outputParameters:
      - name: unrestricted
        type: string
        mapping: $.d.MatlWrhsStkQtyInMatlBaseUnit
      - name: quality_inspection
        type: string
        mapping: $.d.QualityInspectionStockQty
      - name: blocked
        type: string
        mapping: $.d.BlockedStockQty
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant
        in: path
      operations:
      - name: get-stock
        method: GET
Open in Framework → View in Fleet → sap-inventory-stock-lookup.yml

Tracks clinical study budgets by pulling actuals from SAP, comparing to plan in Snowflake, and notifying finance for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Study Budget Tracker
  description: Tracks clinical study budgets by pulling actuals from SAP, comparing to plan in Snowflake, and notifying finance for Johnson & Johnson.
  tags:
  - clinical-trials
  - finance
  - sap
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: clinical-finance
    port: 8080
    tools:
    - name: track-study-budget
      description: Given a study ID and fiscal period, pull actuals from SAP, compare to budget, and alert on variances.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period to analyze.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-cost-report
        with:
          study_id: '{{study_id}}'
          period: '{{fiscal_period}}'
      - name: get-budget
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT budget_amount, study_id FROM clinical_budgets WHERE study_id = '{{study_id}}' AND period = '{{fiscal_period}}'
          warehouse: FINANCE_WH
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.clinical_finance_channel
          text: 'Study Budget Alert: {{study_id}} for {{fiscal_period}}. Actuals: {{get-actuals.total}}. Budget: {{get-budget.data}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-study-budget-tracker.yml

Retrieves the status and details of a Jira issue by key for Johnson & Johnson clinical operations project tracking.

naftiko: '0.5'
info:
  label: Jira Clinical Issue Status Lookup
  description: Retrieves the status and details of a Jira issue by key for Johnson & Johnson clinical operations project tracking.
  tags:
  - clinical-trials
  - jira
  - project-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: clinical-pm
    port: 8080
    tools:
    - name: get-issue-status
      description: Given a Jira issue key, return the issue summary, status, assignee, and priority.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., CLIN-1234).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-clinical-issue-status-lookup.yml

Sources MSL candidates from LinkedIn, creates profiles in Workday recruiting, and notifies the talent acquisition team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline for Medical Science Liaisons
  description: Sources MSL candidates from LinkedIn, creates profiles in Workday recruiting, and notifies the talent acquisition team for Johnson & Johnson.
  tags:
  - hr
  - linkedin
  - workday
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: hr-talent-sourcing
    port: 8080
    tools:
    - name: source-msl-candidates
      description: Given search criteria for MSL roles, source candidates from LinkedIn, create prospects in Workday, and notify TA.
      inputParameters:
      - name: therapeutic_area
        in: body
        type: string
        description: The target therapeutic area.
      - name: location
        in: body
        type: string
        description: The target geographic location.
      - name: experience_years
        in: body
        type: integer
        description: Minimum years of experience.
      steps:
      - name: search-linkedin
        type: call
        call: linkedin.search-candidates
        with:
          keywords: Medical Science Liaison {{therapeutic_area}}
          location: '{{location}}'
      - name: create-prospects
        type: call
        call: workday.create-prospect
        with:
          source: LinkedIn
          requisition_area: '{{therapeutic_area}}'
      - name: notify-ta
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.talent_channel
          text: 'MSL Talent Pipeline: {{search-linkedin.count}} candidates found for {{therapeutic_area}} in {{location}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: people-search
      path: /people?keywords={{keywords}}
      inputParameters:
      - name: keywords
        in: query
      operations:
      - name: search-candidates
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Recruiting/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: prospects
      path: /prospects
      operations:
      - name: create-prospect
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-pipeline-for-medical-science-liaisons.yml

Processes manufacturing deviations by creating a ServiceNow incident, logging in SAP QM, and notifying quality assurance for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Manufacturing Deviation Handler
  description: Processes manufacturing deviations by creating a ServiceNow incident, logging in SAP QM, and notifying quality assurance for Johnson & Johnson.
  tags:
  - manufacturing
  - quality
  - servicenow
  - sap
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-qa
    port: 8080
    tools:
    - name: handle-deviation
      description: Given deviation details, create a ServiceNow incident, log in SAP quality management, and notify the QA team.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The manufacturing batch number.
      - name: deviation_type
        in: body
        type: string
        description: Type of deviation (process, equipment, material).
      - name: description
        in: body
        type: string
        description: Detailed description of the deviation.
      - name: plant
        in: body
        type: string
        description: The manufacturing plant code.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'MFG Deviation: {{deviation_type}} — Batch {{batch_number}}'
          category: manufacturing_quality
          description: 'Plant: {{plant}} | Batch: {{batch_number}} | Type: {{deviation_type}} | Details: {{description}}'
      - name: log-sap-notification
        type: call
        call: sap.create-quality-notification
        with:
          notification_type: Q2
          material: '{{batch_number}}'
          plant: '{{plant}}'
          description: '{{deviation_type}}: {{description}}'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.qa_channel
          text: 'MFG Deviation Alert: {{deviation_type}} at Plant {{plant}}, Batch {{batch_number}}. SNOW: {{create-snow-incident.number}}. SAP QN: {{log-sap-notification.notification_number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-deviation-handler.yml

Processes goods receipt in SAP, triggers quality inspection, and notifies the warehouse team upon completion for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Goods Receipt and Quality Release
  description: Processes goods receipt in SAP, triggers quality inspection, and notifies the warehouse team upon completion for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - quality
  - warehouse
capability:
  exposes:
  - type: mcp
    namespace: warehouse-ops
    port: 8080
    tools:
    - name: process-goods-receipt
      description: Given a purchase order and delivery details, post goods receipt, trigger quality inspection, and notify warehouse.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: delivery_number
        in: body
        type: string
        description: The inbound delivery number.
      - name: plant
        in: body
        type: string
        description: The receiving plant code.
      steps:
      - name: post-goods-receipt
        type: call
        call: sap.post-goods-receipt
        with:
          po_number: '{{po_number}}'
          delivery: '{{delivery_number}}'
          plant: '{{plant}}'
      - name: trigger-qi
        type: call
        call: sap.create-inspection-lot
        with:
          material_document: '{{post-goods-receipt.material_document}}'
          plant: '{{plant}}'
      - name: notify-warehouse
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.warehouse_channel
          text: 'Goods Receipt for PO {{po_number}}, Delivery {{delivery_number}} at Plant {{plant}}. Material Doc: {{post-goods-receipt.material_document}}. QI Lot: {{trigger-qi.inspection_lot}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-goods-receipt-and-quality-release.yml

Retrieves the latest build status from Azure DevOps for a given pipeline in Johnson & Johnson CI/CD operations.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Lookup
  description: Retrieves the latest build status from Azure DevOps for a given pipeline in Johnson & Johnson CI/CD operations.
  tags:
  - devops
  - azure-devops
  - ci-cd
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: get-build-status
      description: Given a pipeline ID, return the latest build result, status, and build number.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline definition ID.
      call: azdo.get-latest-build
      with:
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: build_number
        type: string
        mapping: $.value[0].buildNumber
      - name: result
        type: string
        mapping: $.value[0].result
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/jnj
    authentication:
      type: bearer
      token: $secrets.azuredevops_token
    resources:
    - name: builds
      path: /_apis/build/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: query
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status-lookup.yml

Handles MRP run exceptions from SAP by creating supply chain alerts, logging in ServiceNow, and notifying the planning team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP MRP Run Exception Handler
  description: Handles MRP run exceptions from SAP by creating supply chain alerts, logging in ServiceNow, and notifying the planning team for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - planning
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: supply-planning
    port: 8080
    tools:
    - name: handle-mrp-exception
      description: Given MRP exception details, create a ServiceNow alert and notify the supply planning team.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The material with the MRP exception.
      - name: exception_type
        in: body
        type: string
        description: Type of MRP exception (shortage, excess, rescheduling).
      - name: plant
        in: body
        type: string
        description: The plant code.
      - name: quantity
        in: body
        type: string
        description: The exception quantity.
      steps:
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'MRP Exception: {{exception_type}} — Material {{material_number}}'
          category: supply_planning
      - name: notify-planning
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.planning_channel
          text: 'MRP Exception: {{exception_type}} for Material {{material_number}} at Plant {{plant}}. Qty: {{quantity}}. SNOW: {{create-alert.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-mrp-run-exception-handler.yml

Orchestrates RWE data ingestion from external sources into Snowflake, validates data quality, and notifies the HEOR team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Real-World Evidence Data Ingestion Pipeline
  description: Orchestrates RWE data ingestion from external sources into Snowflake, validates data quality, and notifies the HEOR team for Johnson & Johnson.
  tags:
  - r-and-d
  - real-world-evidence
  - snowflake
  - data-engineering
capability:
  exposes:
  - type: mcp
    namespace: rwe-analytics
    port: 8080
    tools:
    - name: ingest-rwe-data
      description: Given a data source and dataset identifier, ingest into Snowflake, run quality checks, and notify HEOR.
      inputParameters:
      - name: data_source
        in: body
        type: string
        description: The RWE data source name (claims, EMR, registry).
      - name: dataset_id
        in: body
        type: string
        description: The dataset identifier.
      - name: study_id
        in: body
        type: string
        description: The associated study ID.
      steps:
      - name: ingest-data
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL rwe_ingest_pipeline('{{data_source}}', '{{dataset_id}}', '{{study_id}}')
          warehouse: RWE_WH
      - name: validate-quality
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL rwe_data_quality_check('{{dataset_id}}')
          warehouse: RWE_WH
      - name: notify-heor
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.heor_channel
          text: 'RWE Data Ingestion Complete: {{data_source}} ({{dataset_id}}) for Study {{study_id}}. Records: {{ingest-data.row_count}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → real-world-evidence-data-ingestion-pipeline.yml

Pulls open position headcount from Workday and compares against the SAP cost center budget, posting a variance digest to the Finance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Workday Position Budget Variance Report
  description: Pulls open position headcount from Workday and compares against the SAP cost center budget, posting a variance digest to the Finance Microsoft Teams channel.
  tags:
  - hr
  - finance
  - workday
  - sap
  - reporting
  - budgeting
capability:
  exposes:
  - type: mcp
    namespace: hr-finance-reporting
    port: 8080
    tools:
    - name: report-position-budget-variance
      description: Pull open position data from Workday and compare against the SAP cost center budget. Post a variance summary to the Finance Teams channel for headcount cost management.
      inputParameters:
      - name: cost_center_id
        in: body
        type: string
        description: The SAP cost center ID to analyze for budget variance.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period to compare, e.g., 2026-Q2.
      steps:
      - name: get-positions
        type: call
        call: workday.get-open-positions
        with:
          cost_center_id: '{{cost_center_id}}'
      - name: post-variance
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: 'Headcount Budget Report: Cost Center {{cost_center_id}} | Open positions: {{get-positions.open_count}} | Period: {{fiscal_period}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: positions
      path: /positions
      operations:
      - name: get-open-positions
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-position-budget-variance-report.yml

Processes environmental monitoring excursions in manufacturing by logging in SAP QM, creating a ServiceNow incident, and alerting quality for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Environmental Monitoring Alert Handler
  description: Processes environmental monitoring excursions in manufacturing by logging in SAP QM, creating a ServiceNow incident, and alerting quality for Johnson & Johnson.
  tags:
  - manufacturing
  - quality
  - sap
  - environmental-monitoring
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-em
    port: 8080
    tools:
    - name: handle-em-excursion
      description: Given environmental excursion details, log a quality notification in SAP, create a ServiceNow incident, and alert quality.
      inputParameters:
      - name: area_name
        in: body
        type: string
        description: The monitored area name.
      - name: parameter
        in: body
        type: string
        description: The environmental parameter.
      - name: reading
        in: body
        type: string
        description: The actual reading value.
      - name: limit
        in: body
        type: string
        description: The acceptable limit value.
      - name: plant
        in: body
        type: string
        description: The plant code.
      steps:
      - name: log-sap-qn
        type: call
        call: sap.create-quality-notification
        with:
          notification_type: Q2
          description: 'EM Excursion: {{area_name}} — {{parameter}} reading {{reading}} exceeds limit {{limit}}'
          plant: '{{plant}}'
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'EM Excursion: {{area_name}} — {{parameter}}'
          category: environmental_monitoring
      - name: alert-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.em_quality_channel
          text: 'EM ALERT: {{parameter}} excursion in {{area_name}} at Plant {{plant}}. Reading: {{reading}} (limit: {{limit}}). SAP QN: {{log-sap-qn.notification_number}}. SNOW: {{create-snow-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → environmental-monitoring-alert-handler.yml

Manages contract renewal workflows by checking expiring contracts in SAP Ariba, creating ServiceNow tasks, and notifying procurement for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Renewal Workflow
  description: Manages contract renewal workflows by checking expiring contracts in SAP Ariba, creating ServiceNow tasks, and notifying procurement for Johnson & Johnson.
  tags:
  - procurement
  - sap-ariba
  - servicenow
  - contract-management
capability:
  exposes:
  - type: mcp
    namespace: procurement-contracts
    port: 8080
    tools:
    - name: process-contract-renewal
      description: Given a contract ID, check renewal terms, create a ServiceNow task, and notify procurement.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The SAP Ariba contract ID.
      - name: contract_owner
        in: body
        type: string
        description: The contract owner name.
      steps:
      - name: get-contract
        type: call
        call: ariba.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: create-renewal-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Contract Renewal: {{get-contract.title}} — Expires {{get-contract.end_date}}'
          category: procurement
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.procurement_channel
          text: 'Contract Renewal: {{get-contract.title}} ({{contract_id}}) expires {{get-contract.end_date}}. Task: {{create-renewal-task.number}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/procurement/v2/jnj
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-renewal-workflow.yml

Processes new position requisitions by validating budget in SAP, creating the requisition in Workday, and notifying HR for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Workday Position Requisition Approval Workflow
  description: Processes new position requisitions by validating budget in SAP, creating the requisition in Workday, and notifying HR for Johnson & Johnson.
  tags:
  - hr
  - workday
  - sap
  - hiring
capability:
  exposes:
  - type: mcp
    namespace: hr-talent
    port: 8080
    tools:
    - name: process-position-requisition
      description: Given requisition details, validate budget, create the position in Workday, and notify HR.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department requesting the position.
      - name: job_title
        in: body
        type: string
        description: The job title.
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center.
      - name: hiring_manager
        in: body
        type: string
        description: Name of the hiring manager.
      steps:
      - name: validate-budget
        type: call
        call: sap.check-budget
        with:
          cost_center: '{{cost_center}}'
          amount_type: headcount
      - name: create-requisition
        type: call
        call: workday.create-requisition
        with:
          department: '{{department}}'
          job_title: '{{job_title}}'
          hiring_manager: '{{hiring_manager}}'
      - name: notify-hr
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.hr_recruiting_channel
          text: 'New Position Requisition: {{job_title}} in {{department}}. Manager: {{hiring_manager}}. Budget: {{validate-budget.status}}. Workday Req: {{create-requisition.requisition_id}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BUDGET_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Recruiting/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /jobRequisitions
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-position-requisition-approval-workflow.yml

Tracks outbound shipments in SAP TM, updates delivery status in Salesforce, and notifies the distribution team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Transport Management Shipment Tracker
  description: Tracks outbound shipments in SAP TM, updates delivery status in Salesforce, and notifies the distribution team for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - salesforce
  - logistics
capability:
  exposes:
  - type: mcp
    namespace: distribution-ops
    port: 8080
    tools:
    - name: track-shipment
      description: Given a shipment ID, retrieve tracking data from SAP TM, update Salesforce, and notify distribution.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The SAP Transportation Management shipment ID.
      - name: salesforce_order_id
        in: body
        type: string
        description: The related Salesforce order ID.
      steps:
      - name: get-tracking
        type: call
        call: sap.get-shipment-status
        with:
          shipment_id: '{{shipment_id}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-record
        with:
          object_type: Order
          id: '{{salesforce_order_id}}'
          Shipping_Status__c: '{{get-tracking.status}}'
      - name: notify-distribution
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.distribution_channel
          text: 'Shipment Update: {{shipment_id}} — Status: {{get-tracking.status}}. ETA: {{get-tracking.eta}}. Salesforce updated.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_FREIGHT_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-transport-management-shipment-tracker.yml

Handles Azure Data Factory pipeline failures by creating a ServiceNow incident and notifying the data engineering team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Azure Data Factory Pipeline Failure Handler
  description: Handles Azure Data Factory pipeline failures by creating a ServiceNow incident and notifying the data engineering team for Johnson & Johnson.
  tags:
  - data-engineering
  - azure-data-factory
  - servicenow
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-engineering
    port: 8080
    tools:
    - name: handle-adf-failure
      description: Given a pipeline run ID and failure details, create a ServiceNow incident and notify the team.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: The ADF pipeline name.
      - name: run_id
        in: body
        type: string
        description: The pipeline run ID.
      - name: error_message
        in: body
        type: string
        description: The error message from the failed run.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'ADF Pipeline Failure: {{pipeline_name}}'
          description: 'Pipeline: {{pipeline_name}} | Run: {{run_id}} | Error: {{error_message}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.data_eng_channel
          text: 'ADF Pipeline FAILURE: {{pipeline_name}} (Run: {{run_id}}). Error: {{error_message}}. SNOW: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-data-factory-pipeline-failure-handler.yml

Creates and routes a ServiceNow change request for validated production infrastructure changes, attaches risk assessment, and notifies stakeholders via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Automation
  description: Creates and routes a ServiceNow change request for validated production infrastructure changes, attaches risk assessment, and notifies stakeholders via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: itsm-change
    port: 8080
    tools:
    - name: open-change-request
      description: Given a change description, affected configuration item, and risk level, create a ServiceNow change request and notify the change owner and CAB via Microsoft Teams.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Description of the proposed infrastructure or application change.
      - name: affected_ci
        in: body
        type: string
        description: The configuration item being changed.
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: low, medium, or high.'
      - name: owner_upn
        in: body
        type: string
        description: Microsoft Teams UPN of the change owner.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change-request
        with:
          short_description: '{{change_description}}'
          cmdb_ci: '{{affected_ci}}'
          risk: '{{risk_level}}'
      - name: notify-owner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{owner_upn}}'
          text: 'Change request {{create-change.number}} opened for {{affected_ci}} (risk: {{risk_level}}). Please review in ServiceNow.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-automation.yml

On a protected-branch pipeline failure in GitHub Actions, creates a ServiceNow incident and posts a failure summary to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: GitHub Actions Pipeline Failure Alert
  description: On a protected-branch pipeline failure in GitHub Actions, creates a ServiceNow incident and posts a failure summary to the engineering Microsoft Teams channel.
  tags:
  - devops
  - cicd
  - github-actions
  - servicenow
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions pipeline failure event, open a ServiceNow incident and alert the engineering Teams channel with the repository, branch, and workflow context.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository name in owner/repo format.
      - name: workflow_name
        in: body
        type: string
        description: The name of the failed GitHub Actions workflow.
      - name: branch
        in: body
        type: string
        description: The branch on which the pipeline failed.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions run ID for the failed run.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: '[CI Failure] {{repository}} / {{branch}} — {{workflow_name}}'
          category: software
          urgency: '2'
      - name: post-alert
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_engineering_channel_id
          text: 'Pipeline Failure: {{repository}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Run: {{run_id}} | Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-actions-pipeline-failure-alert.yml

Reconciles clinical data between Veeva Vault and Snowflake, logs discrepancies in Jira, and alerts the data management team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Data Reconciliation Checker
  description: Reconciles clinical data between Veeva Vault and Snowflake, logs discrepancies in Jira, and alerts the data management team for Johnson & Johnson.
  tags:
  - clinical-trials
  - data-management
  - veeva-vault
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-quality
    port: 8080
    tools:
    - name: reconcile-clinical-data
      description: Given a study ID, compare record counts between Veeva Vault and Snowflake and report discrepancies.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: data_domain
        in: body
        type: string
        description: Data domain to reconcile (demographics, adverse-events, labs).
      steps:
      - name: query-vault
        type: call
        call: veeva.query-submissions
        with:
          query: SELECT COUNT(*) FROM {{data_domain}}__c WHERE study_id__c = '{{study_id}}'
      - name: query-snowflake
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT COUNT(*) as cnt FROM {{data_domain}} WHERE study_id = '{{study_id}}'
          warehouse: CLINICAL_WH
      - name: log-discrepancy
        type: call
        call: jira.create-issue
        with:
          project: CDM
          summary: 'Data Reconciliation: {{study_id}} — {{data_domain}}'
          issuetype: Bug
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cdm_channel
          text: 'Data Reconciliation for Study {{study_id}} ({{data_domain}}): Vault={{query-vault.totalCount}}, Snowflake={{query-snowflake.data}}. Jira: {{log-discrepancy.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-data-reconciliation-checker.yml

Orchestrates ML model deployment by promoting a model in Databricks, updating the model registry, and notifying the data science team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Databricks ML Model Deployment Pipeline
  description: Orchestrates ML model deployment by promoting a model in Databricks, updating the model registry, and notifying the data science team for Johnson & Johnson.
  tags:
  - r-and-d
  - databricks
  - machine-learning
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: rd-ml-ops
    port: 8080
    tools:
    - name: deploy-ml-model
      description: Given a model name and version, promote in Databricks MLflow, register in the model registry, and notify the team.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The MLflow model name.
      - name: model_version
        in: body
        type: string
        description: The model version to promote.
      - name: target_stage
        in: body
        type: string
        description: Target stage (Staging, Production).
      steps:
      - name: promote-model
        type: call
        call: databricks.transition-model-stage
        with:
          name: '{{model_name}}'
          version: '{{model_version}}'
          stage: '{{target_stage}}'
      - name: log-deployment
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'ML Model Deployment: {{model_name}} v{{model_version}} to {{target_stage}}'
          category: ml_ops
      - name: notify-ds-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.data_science_channel
          text: 'ML Model Deployed: {{model_name}} v{{model_version}} promoted to {{target_stage}}. SNOW: {{log-deployment.number}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://jnj.cloud.databricks.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: model-versions
      path: /mlflow/model-versions/transition-stage
      operations:
      - name: transition-model-stage
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → databricks-ml-model-deployment-pipeline.yml

Orchestrates the clinical database lock process by verifying data completeness in Snowflake, updating status in Veeva Vault, and notifying stakeholders for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Data Lock Orchestrator
  description: Orchestrates the clinical database lock process by verifying data completeness in Snowflake, updating status in Veeva Vault, and notifying stakeholders for Johnson & Johnson.
  tags:
  - clinical-trials
  - data-management
  - snowflake
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-mgmt
    port: 8080
    tools:
    - name: execute-data-lock
      description: Given a study ID and database identifier, verify completeness, update lock status, and notify the team.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: database_id
        in: body
        type: string
        description: The clinical database identifier.
      - name: lock_type
        in: body
        type: string
        description: Lock type (soft-lock, hard-lock).
      steps:
      - name: verify-completeness
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT COUNT(*) as open_queries FROM data_queries WHERE study_id = '{{study_id}}' AND status = 'Open'
          warehouse: CLINICAL_WH
      - name: update-vault-status
        type: call
        call: veeva.update-object-record
        with:
          object_type: study_database__c
          id: '{{database_id}}'
          lock_status__c: '{{lock_type}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cdm_channel
          text: 'Database Lock: Study {{study_id}} — {{lock_type}} initiated. Open queries: {{verify-completeness.data}}. Vault updated.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-data-lock-orchestrator.yml

Receives an adverse event report, creates a pharmacovigilance case in ServiceNow, and notifies the drug safety team via Teams for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Drug Safety Adverse Event Report Processor
  description: Receives an adverse event report, creates a pharmacovigilance case in ServiceNow, and notifies the drug safety team via Teams for Johnson & Johnson.
  tags:
  - drug-safety
  - pharmacovigilance
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: process-adverse-event
      description: Given adverse event details, create a PV case in ServiceNow and send an urgent notification to the drug safety officer.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: Anonymized patient identifier.
      - name: product_name
        in: body
        type: string
        description: The drug product name.
      - name: event_description
        in: body
        type: string
        description: Description of the adverse event.
      - name: severity
        in: body
        type: string
        description: Severity classification (mild, moderate, severe, life-threatening).
      steps:
      - name: create-pv-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AE Report: {{product_name}} — {{severity}}'
          category: pharmacovigilance
          description: 'Patient: {{patient_id}} | Product: {{product_name}} | Event: {{event_description}} | Severity: {{severity}}'
      - name: notify-safety-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.drug_safety_channel
          text: 'URGENT: New {{severity}} AE for {{product_name}}. Case: {{create-pv-case.number}}. Patient: {{patient_id}}. Review required within 24 hours.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → drug-safety-adverse-event-report-processor.yml

Creates breakdown maintenance notifications in SAP when equipment failures are reported and notifies the maintenance team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Equipment Breakdown Incident Creator
  description: Creates breakdown maintenance notifications in SAP when equipment failures are reported and notifies the maintenance team for Johnson & Johnson.
  tags:
  - manufacturing
  - sap
  - maintenance
  - incident
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-breakdown
    port: 8080
    tools:
    - name: create-breakdown-incident
      description: Given equipment failure details, create a SAP breakdown notification and a ServiceNow incident.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID.
      - name: failure_description
        in: body
        type: string
        description: Description of the equipment failure.
      - name: plant
        in: body
        type: string
        description: The manufacturing plant code.
      - name: priority
        in: body
        type: string
        description: Incident priority (P1-P4).
      steps:
      - name: create-sap-notification
        type: call
        call: sap.create-maintenance-notification
        with:
          equipment: '{{equipment_id}}'
          notification_type: M2
          description: '{{failure_description}}'
          plant: '{{plant}}'
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Equipment Breakdown: {{equipment_id}} at Plant {{plant}}'
          priority: '{{priority}}'
          description: 'Equipment: {{equipment_id}} | Failure: {{failure_description}} | Plant: {{plant}} | SAP: {{create-sap-notification.notification_number}}'
      - name: notify-maintenance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.maintenance_channel
          text: 'EQUIPMENT BREAKDOWN: {{equipment_id}} at Plant {{plant}}. Priority: {{priority}}. SAP: {{create-sap-notification.notification_number}}. SNOW: {{create-snow-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_MAINTNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-equipment-breakdown-incident-creator.yml

Reconciles intercompany billing documents in SAP across company codes and creates exception reports for Johnson & Johnson finance operations.

naftiko: '0.5'
info:
  label: SAP Intercompany Billing Reconciliation
  description: Reconciles intercompany billing documents in SAP across company codes and creates exception reports for Johnson & Johnson finance operations.
  tags:
  - finance
  - sap
  - billing
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: finance-intercompany
    port: 8080
    tools:
    - name: reconcile-intercompany-billing
      description: Given company codes and a billing period, reconcile intercompany transactions and report exceptions.
      inputParameters:
      - name: sender_company
        in: body
        type: string
        description: The sending company code.
      - name: receiver_company
        in: body
        type: string
        description: The receiving company code.
      - name: billing_period
        in: body
        type: string
        description: The billing period to reconcile.
      steps:
      - name: get-sender-docs
        type: call
        call: sap.get-billing-documents
        with:
          company_code: '{{sender_company}}'
          period: '{{billing_period}}'
      - name: get-receiver-docs
        type: call
        call: sap.get-billing-documents
        with:
          company_code: '{{receiver_company}}'
          period: '{{billing_period}}'
      - name: create-exception-report
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'IC Billing Reconciliation: {{sender_company}} to {{receiver_company}} — {{billing_period}}'
          category: finance_reconciliation
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.finance_ic_channel
          text: 'IC Billing Reconciliation: {{sender_company}} to {{receiver_company}} for {{billing_period}}. Sender docs: {{get-sender-docs.count}}. Receiver docs: {{get-receiver-docs.count}}. SNOW: {{create-exception-report.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-intercompany-billing-reconciliation.yml

When a candidate applies via LinkedIn Recruiter, creates a candidate record in Workday Recruiting, assigns the requisition, and notifies the hiring manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Recruiting Pipeline Sync
  description: When a candidate applies via LinkedIn Recruiter, creates a candidate record in Workday Recruiting, assigns the requisition, and notifies the hiring manager via Microsoft Teams.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: recruiting-ops
    port: 8080
    tools:
    - name: sync-linkedin-candidate
      description: Given a LinkedIn Recruiter candidate ID and a Workday job requisition ID, create the candidate record in Workday and notify the hiring manager via Microsoft Teams.
      inputParameters:
      - name: linkedin_candidate_id
        in: body
        type: string
        description: The LinkedIn Recruiter candidate profile ID.
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID the candidate is applying to.
      steps:
      - name: get-candidate
        type: call
        call: linkedin.get-candidate-profile
        with:
          candidate_id: '{{linkedin_candidate_id}}'
      - name: create-candidate
        type: call
        call: workday.create-candidate
        with:
          first_name: '{{get-candidate.first_name}}'
          last_name: '{{get-candidate.last_name}}'
          email: '{{get-candidate.email}}'
          requisition_id: '{{requisition_id}}'
      - name: notify-hiring-manager
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_talent_channel_id
          text: 'New candidate synced: {{get-candidate.first_name}} {{get-candidate.last_name}} for requisition {{requisition_id}} | Workday candidate ID: {{create-candidate.candidate_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: candidate-profiles
      path: /recruiterProfiles/{{candidate_id}}
      inputParameters:
      - name: candidate_id
        in: path
      operations:
      - name: get-candidate-profile
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: candidates
      path: /candidates
      operations:
      - name: create-candidate
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-recruiting-pipeline-sync.yml

Searches Johnson & Johnson Confluence knowledge base for regulatory guidance documents by keyword.

naftiko: '0.5'
info:
  label: Confluence Regulatory Knowledge Search
  description: Searches Johnson & Johnson Confluence knowledge base for regulatory guidance documents by keyword.
  tags:
  - regulatory
  - confluence
  - knowledge-management
  - search
capability:
  exposes:
  - type: mcp
    namespace: regulatory-kb
    port: 8080
    tools:
    - name: search-regulatory-docs
      description: Given a search query, return matching Confluence pages with titles, space keys, and URLs.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search query for regulatory guidance documents.
      call: confluence.search-content
      with:
        search_query: '{{search_query}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: total_size
        type: integer
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://jnj.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: search
      path: /content/search?cql=text~'{{search_query}}'
      inputParameters:
      - name: search_query
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-regulatory-knowledge-search.yml

Handles cold chain temperature excursions by logging in SAP, creating a quality incident, and alerting logistics and quality teams for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Cold Chain Temperature Excursion Handler
  description: Handles cold chain temperature excursions by logging in SAP, creating a quality incident, and alerting logistics and quality teams for Johnson & Johnson.
  tags:
  - supply-chain
  - cold-chain
  - quality
  - sap
capability:
  exposes:
  - type: mcp
    namespace: cold-chain-ops
    port: 8080
    tools:
    - name: handle-temp-excursion
      description: Given temperature excursion details, log in SAP, create a ServiceNow quality incident, and alert teams.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The shipment identifier.
      - name: product_name
        in: body
        type: string
        description: The product being shipped.
      - name: temperature_reading
        in: body
        type: string
        description: The temperature reading.
      - name: acceptable_range
        in: body
        type: string
        description: The acceptable temperature range.
      - name: duration_minutes
        in: body
        type: integer
        description: Duration of excursion in minutes.
      steps:
      - name: log-sap-excursion
        type: call
        call: sap.create-quality-notification
        with:
          notification_type: Q2
          description: 'Cold Chain Excursion: Shipment {{shipment_id}}, Product {{product_name}}, Temp {{temperature_reading}}'
      - name: create-quality-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cold Chain Excursion: {{product_name}} — Shipment {{shipment_id}}'
          priority: '2'
      - name: alert-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cold_chain_channel
          text: 'COLD CHAIN ALERT: Temp excursion for {{product_name}} (Shipment {{shipment_id}}). Reading: {{temperature_reading}} (range: {{acceptable_range}}). SAP: {{log-sap-excursion.notification_number}}. SNOW: {{create-quality-incident.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cold-chain-temperature-excursion-handler.yml

Tracks laboratory instrument calibration schedules by querying SAP PM, creating ServiceNow work orders, and notifying lab managers for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Laboratory Instrument Calibration Tracker
  description: Tracks laboratory instrument calibration schedules by querying SAP PM, creating ServiceNow work orders, and notifying lab managers for Johnson & Johnson.
  tags:
  - r-and-d
  - quality
  - sap
  - laboratory
capability:
  exposes:
  - type: mcp
    namespace: lab-ops
    port: 8080
    tools:
    - name: track-calibration
      description: Given a lab identifier, find instruments due for calibration, create work orders, and notify lab management.
      inputParameters:
      - name: lab_id
        in: body
        type: string
        description: The laboratory identifier.
      - name: days_ahead
        in: body
        type: integer
        description: Days ahead to check for calibration due dates.
      steps:
      - name: query-instruments
        type: call
        call: sap.get-equipment-list
        with:
          lab_id: '{{lab_id}}'
          next_calibration_within: '{{days_ahead}}'
      - name: create-work-orders
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Lab Calibration Due: {{query-instruments.count}} instruments in Lab {{lab_id}}'
          category: lab_operations
      - name: notify-lab-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.lab_ops_channel
          text: 'Calibration Alert: {{query-instruments.count}} instruments in Lab {{lab_id}} due within {{days_ahead}} days. SNOW: {{create-work-orders.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_EQUIPMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → laboratory-instrument-calibration-tracker.yml

Queries Snowflake for the latest real-world evidence cohort data for a specified therapeutic area, returns cohort size and key demographic breakdowns for medical affairs reporting.

naftiko: '0.5'
info:
  label: Snowflake Real-World Evidence Data Snapshot
  description: Queries Snowflake for the latest real-world evidence cohort data for a specified therapeutic area, returns cohort size and key demographic breakdowns for medical affairs reporting.
  tags:
  - data
  - analytics
  - snowflake
  - reporting
  - pharma
  - real-world-evidence
capability:
  exposes:
  - type: mcp
    namespace: rwe-analytics
    port: 8080
    tools:
    - name: get-rwe-cohort-snapshot
      description: Given a therapeutic area code and data cutoff date, query Snowflake for the RWE patient cohort size, age distribution, and key comorbidities for medical affairs reporting.
      inputParameters:
      - name: therapeutic_area
        in: body
        type: string
        description: The therapeutic area code (e.g., ONCOLOGY, IMMUNOLOGY, NEUROSCIENCE).
      - name: data_cutoff_date
        in: body
        type: string
        description: The data cutoff date in YYYY-MM-DD format.
      call: snowflake.execute-statement
      with:
        statement: SELECT therapeutic_area, COUNT(*) as cohort_size, AVG(age) as mean_age FROM PROD_RWE.PATIENTS WHERE therapeutic_area = '{{therapeutic_area}}' AND data_date <= '{{data_cutoff_date}}' GROUP BY 1
      outputParameters:
      - name: cohort_size
        type: number
        mapping: $.data[0].COHORT_SIZE
      - name: mean_age
        type: number
        mapping: $.data[0].MEAN_AGE
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → snowflake-real-world-evidence-data-snapshot.yml

Manages GxP-validated system change requests by creating a ServiceNow change, logging in Veeva Vault audit trail, and notifying approvers for Johnson & Johnson.

naftiko: '0.5'
info:
  label: GxP System Change Approval Workflow
  description: Manages GxP-validated system change requests by creating a ServiceNow change, logging in Veeva Vault audit trail, and notifying approvers for Johnson & Johnson.
  tags:
  - compliance
  - gxp
  - servicenow
  - veeva-vault
capability:
  exposes:
  - type: mcp
    namespace: gxp-compliance
    port: 8080
    tools:
    - name: initiate-gxp-change
      description: Given change request details, create a ServiceNow change request, log in Veeva Vault, and notify the CAB.
      inputParameters:
      - name: system_name
        in: body
        type: string
        description: Name of the GxP-validated system.
      - name: change_description
        in: body
        type: string
        description: Description of the proposed change.
      - name: risk_level
        in: body
        type: string
        description: Risk classification (low, medium, high, critical).
      steps:
      - name: create-change-request
        type: call
        call: servicenow.create-change
        with:
          short_description: 'GxP Change: {{system_name}} — {{risk_level}} risk'
          category: gxp_change_control
          description: 'System: {{system_name}} | Change: {{change_description}} | Risk: {{risk_level}}'
      - name: log-vault-audit
        type: call
        call: veeva.create-object-record
        with:
          object_type: change_control__c
          system_name__c: '{{system_name}}'
          description__c: '{{change_description}}'
      - name: notify-cab
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cab_channel
          text: 'GxP Change Request: {{system_name}} ({{risk_level}} risk). SNOW: {{create-change-request.number}}. Vault: {{log-vault-audit.id}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → gxp-system-change-approval-workflow.yml

Validates training records in SharePoint against Workday assignments and creates compliance tickets for gaps for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SharePoint Training Record Validator
  description: Validates training records in SharePoint against Workday assignments and creates compliance tickets for gaps for Johnson & Johnson.
  tags:
  - quality
  - sharepoint
  - workday
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: quality-training
    port: 8080
    tools:
    - name: validate-training-records
      description: Given a department and training program, cross-reference SharePoint records with Workday and report gaps.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to validate.
      - name: training_program
        in: body
        type: string
        description: The training program name.
      steps:
      - name: get-sharepoint-records
        type: call
        call: sharepoint.get-training-records
        with:
          department: '{{department}}'
          program: '{{training_program}}'
      - name: get-workday-assignments
        type: call
        call: workday.get-training-assignments
        with:
          department: '{{department}}'
          program: '{{training_program}}'
      - name: create-gap-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Training Compliance Gap: {{department}} — {{training_program}}'
          category: quality_compliance
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.quality_training_channel
          text: 'Training Gap Alert: {{department}} for {{training_program}}. SharePoint: {{get-sharepoint-records.count}}. Workday: {{get-workday-assignments.count}}. SNOW: {{create-gap-ticket.number}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://jnj.sharepoint.com/_api/web
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: lists
      path: /lists
      operations:
      - name: get-training-records
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Learning/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /learningAssignments
      operations:
      - name: get-training-assignments
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sharepoint-training-record-validator.yml

Generates FDA inspection readiness checklists by pulling SOPs from SharePoint, checking training compliance in Workday, and creating Jira tracking for Johnson & Johnson.

naftiko: '0.5'
info:
  label: FDA Inspection Readiness Checklist Generator
  description: Generates FDA inspection readiness checklists by pulling SOPs from SharePoint, checking training compliance in Workday, and creating Jira tracking for Johnson & Johnson.
  tags:
  - regulatory
  - compliance
  - sharepoint
  - workday
capability:
  exposes:
  - type: mcp
    namespace: regulatory-compliance
    port: 8080
    tools:
    - name: generate-inspection-checklist
      description: Given a facility and inspection type, compile SOP readiness, training status, and create tracking tasks.
      inputParameters:
      - name: facility_name
        in: body
        type: string
        description: The facility being inspected.
      - name: inspection_type
        in: body
        type: string
        description: Type of FDA inspection (pre-approval, routine, for-cause).
      steps:
      - name: check-sops
        type: call
        call: sharepoint.get-document-list
        with:
          library: SOPs
          filter: facility eq '{{facility_name}}'
      - name: check-training
        type: call
        call: workday.get-training-compliance
        with:
          facility: '{{facility_name}}'
          program: GMP_Training
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project: REG
          summary: 'FDA Inspection Readiness: {{facility_name}} — {{inspection_type}}'
          issuetype: Epic
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.quality_compliance_channel
          text: 'FDA Inspection Readiness for {{facility_name}} ({{inspection_type}}): {{check-sops.count}} SOPs, {{check-training.compliance_rate}}% training compliant. Jira: {{create-epic.key}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://jnj.sharepoint.com/_api/web
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: lists
      path: /lists
      operations:
      - name: get-document-list
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Learning/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /learningAssignments
      operations:
      - name: get-training-compliance
        method: GET
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fda-inspection-readiness-checklist-generator.yml

Processes clinical protocol amendments by updating Veeva Vault, creating Jira tracking tasks, and notifying the clinical team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Protocol Amendment Processor
  description: Processes clinical protocol amendments by updating Veeva Vault, creating Jira tracking tasks, and notifying the clinical team for Johnson & Johnson.
  tags:
  - clinical-trials
  - veeva-vault
  - jira
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: clinical-regulatory
    port: 8080
    tools:
    - name: process-protocol-amendment
      description: Given protocol amendment details, update the document in Veeva Vault, create a Jira task, and notify affected teams.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: amendment_number
        in: body
        type: string
        description: The amendment version number.
      - name: amendment_summary
        in: body
        type: string
        description: Summary of protocol changes.
      - name: impacted_sites
        in: body
        type: string
        description: Comma-separated list of impacted site IDs.
      steps:
      - name: update-vault
        type: call
        call: veeva.create-object-record
        with:
          object_type: protocol_amendment__c
          study_id__c: '{{study_id}}'
          amendment_number__c: '{{amendment_number}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project: CLIN
          summary: Protocol Amendment {{amendment_number}} for Study {{study_id}}
          issuetype: Task
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.clinical_ops_channel
          text: 'Protocol Amendment {{amendment_number}} for Study {{study_id}} processed. Impacted sites: {{impacted_sites}}. Jira: {{create-jira-task.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-protocol-amendment-processor.yml

Queries Veeva Vault for upcoming regulatory submission deadlines, creates Jira tracking tickets, and alerts the regulatory affairs team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Regulatory Submission Deadline Tracker
  description: Queries Veeva Vault for upcoming regulatory submission deadlines, creates Jira tracking tickets, and alerts the regulatory affairs team for Johnson & Johnson.
  tags:
  - regulatory
  - veeva-vault
  - jira
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: track-submission-deadlines
      description: Given a time horizon in days, find upcoming submission deadlines, create Jira tickets, and post a summary.
      inputParameters:
      - name: days_ahead
        in: body
        type: integer
        description: Number of days ahead to check for deadlines.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel for regulatory affairs notifications.
      steps:
      - name: query-deadlines
        type: call
        call: veeva.query-submissions
        with:
          query: SELECT id, name__v, submission_date__c FROM submission__c WHERE submission_date__c <= DATEADD(day,{{days_ahead}},GETDATE())
      - name: create-tracker
        type: call
        call: jira.create-issue
        with:
          project: REG
          summary: 'Upcoming Submissions: {{query-deadlines.totalCount}} items within {{days_ahead}} days'
          issuetype: Task
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Regulatory Alert: {{query-deadlines.totalCount}} submissions due within {{days_ahead}} days. Jira: {{create-tracker.key}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-deadline-tracker.yml

Accepts a Veeva Vault regulatory document ID, retrieves the document text, sends it to Anthropic Claude for summarization, and posts the AI-generated summary to the regulatory affairs Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Anthropic-Powered Regulatory Document Summarizer
  description: Accepts a Veeva Vault regulatory document ID, retrieves the document text, sends it to Anthropic Claude for summarization, and posts the AI-generated summary to the regulatory affairs Microsoft Teams channel.
  tags:
  - ai
  - regulatory
  - veeva
  - anthropic
  - microsoft-teams
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: ai-regulatory
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a Veeva Vault document ID, retrieve the document content and generate an executive summary using Anthropic Claude. Post the summary to the regulatory affairs Teams channel.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault document ID to summarize.
      - name: document_type
        in: body
        type: string
        description: The document type context (e.g., IND, NDA, Clinical Study Report) to guide the summary.
      steps:
      - name: get-document
        type: call
        call: veeva.get-document-content
        with:
          document_id: '{{document_id}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a regulatory affairs expert at a pharmaceutical company. Summarize this {{document_type}} document in 3-5 bullet points highlighting key findings, safety signals, and regulatory actions required: {{get-document.content}}'
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_regulatory_channel_id
          text: 'AI Summary of {{document_type}} (Vault ID: {{document_id}}): {{generate-summary.content}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: document-content
      path: /objects/documents/{{document_id}}/file
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → anthropic-powered-regulatory-document-summarizer.yml

Triggers GxP validation pipelines in GitHub Actions, logs validation events in ServiceNow, and notifies the QA team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: GitHub Actions GxP Validation Pipeline Trigger
  description: Triggers GxP validation pipelines in GitHub Actions, logs validation events in ServiceNow, and notifies the QA team for Johnson & Johnson.
  tags:
  - devops
  - github-actions
  - gxp
  - validation
capability:
  exposes:
  - type: mcp
    namespace: gxp-devops
    port: 8080
    tools:
    - name: trigger-gxp-validation
      description: Given a system name and validation type, trigger the pipeline, log in ServiceNow, and notify QA.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name.
      - name: validation_type
        in: body
        type: string
        description: Type of validation (IQ, OQ, PQ).
      - name: system_name
        in: body
        type: string
        description: The GxP system being validated.
      steps:
      - name: trigger-pipeline
        type: call
        call: github.trigger-workflow
        with:
          repo: '{{repo_name}}'
          workflow: gxp-validation.yml
      - name: log-validation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'GxP Validation: {{validation_type}} — {{system_name}}'
          category: gxp_validation
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.gxp_qa_channel
          text: 'GxP Validation triggered: {{validation_type}} for {{system_name}}. Repo: {{repo_name}}. SNOW: {{log-validation.number}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-actions-gxp-validation-pipeline-trigger.yml

Processes medical information requests by logging in Salesforce, searching the knowledge base, and notifying the medical affairs team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Medical Information Request Handler
  description: Processes medical information requests by logging in Salesforce, searching the knowledge base, and notifying the medical affairs team for Johnson & Johnson.
  tags:
  - medical-affairs
  - salesforce
  - knowledge-management
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: medical-affairs
    port: 8080
    tools:
    - name: handle-med-info-request
      description: Given a medical information request, log in Salesforce, search the knowledge base, and notify medical affairs.
      inputParameters:
      - name: requestor_name
        in: body
        type: string
        description: Name of the healthcare professional.
      - name: product_name
        in: body
        type: string
        description: The product being inquired about.
      - name: question
        in: body
        type: string
        description: The medical information question.
      - name: channel
        in: body
        type: string
        description: Request channel (phone, email, web).
      steps:
      - name: log-in-salesforce
        type: call
        call: salesforce.create-case
        with:
          subject: 'MedInfo Request: {{product_name}}'
          description: 'Requestor: {{requestor_name}} | Product: {{product_name}} | Question: {{question}}'
          type: Medical_Information
      - name: search-knowledge
        type: call
        call: confluence.search-content
        with:
          search_query: '{{product_name}} {{question}}'
      - name: notify-med-affairs
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.med_affairs_channel
          text: 'New MedInfo Request from {{requestor_name}} about {{product_name}}. Case: {{log-in-salesforce.id}}. KB matches: {{search-knowledge.totalSize}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://jnj.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-information-request-handler.yml

Retrieves standard operating procedure document metadata from SharePoint by document name for Johnson & Johnson quality operations.

naftiko: '0.5'
info:
  label: SharePoint SOP Document Retrieval
  description: Retrieves standard operating procedure document metadata from SharePoint by document name for Johnson & Johnson quality operations.
  tags:
  - quality
  - sharepoint
  - document-management
  - sop
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: get-sop-document
      description: Given an SOP document name or ID, return the document title, version, approval status, and URL.
      inputParameters:
      - name: document_name
        in: body
        type: string
        description: The SOP document name or ID.
      call: sharepoint.get-document
      with:
        document_name: '{{document_name}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.d.Title
      - name: version
        type: string
        mapping: $.d.UIVersionLabel
      - name: modified
        type: string
        mapping: $.d.Modified
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://jnj.sharepoint.com/_api/web
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: files
      path: /GetFileByServerRelativeUrl('/sites/SOPs/{{document_name}}')
      inputParameters:
      - name: document_name
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → sharepoint-sop-document-retrieval.yml

When a new clinical trial site is approved in the study management system, creates the site record in Veeva Vault, assigns the study team, and sends an activation notification via Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Site Activation in Veeva Vault
  description: When a new clinical trial site is approved in the study management system, creates the site record in Veeva Vault, assigns the study team, and sends an activation notification via Microsoft Teams.
  tags:
  - clinical-operations
  - veeva
  - microsoft-teams
  - pharma
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: activate-clinical-site
      description: Given a clinical trial study ID and site details, create the site activation record in Veeva Vault and notify the clinical operations team in Microsoft Teams.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier (e.g., CR-2026-001).
      - name: site_id
        in: body
        type: string
        description: The investigator site identifier.
      - name: site_name
        in: body
        type: string
        description: The name of the clinical investigation site.
      - name: principal_investigator
        in: body
        type: string
        description: Name of the principal investigator at the site.
      steps:
      - name: create-site-record
        type: call
        call: veeva.create-site-document
        with:
          study_id: '{{study_id}}'
          site_id: '{{site_id}}'
          site_name: '{{site_name}}'
          pi_name: '{{principal_investigator}}'
      - name: notify-clinical-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_clinical_ops_channel_id
          text: 'Site activated: {{site_name}} ({{site_id}}) for study {{study_id}} | PI: {{principal_investigator}} | Vault doc: {{create-site-record.document_id}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-site-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-site-activation-in-veeva-vault.yml

When a MedTech sales opportunity in Salesforce reaches a Verbal Commit stage, creates a corresponding SAP sales order and notifies the regional sales manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Medical Device Sales Opportunity Sync
  description: When a MedTech sales opportunity in Salesforce reaches a Verbal Commit stage, creates a corresponding SAP sales order and notifies the regional sales manager via Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - sap
  - medtech
  - erp
capability:
  exposes:
  - type: mcp
    namespace: medtech-sales
    port: 8080
    tools:
    - name: sync-opportunity-to-sap
      description: Given a Salesforce opportunity ID at Verbal Commit stage, create a SAP sales order and write the SAP document number back to Salesforce. Use when a medtech deal is confirmed.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID to sync into SAP.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-read.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-order
        type: call
        call: sap-sd.create-sales-order
        with:
          customer_id: '{{get-opportunity.account_external_id}}'
          amount: '{{get-opportunity.amount}}'
          currency: '{{get-opportunity.currency_code}}'
      - name: update-opportunity
        type: call
        call: salesforce-write.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          sap_order_number: '{{create-sap-order.document_number}}'
  consumes:
  - type: http
    namespace: salesforce-read
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sap-sd
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-orders
      path: /A_SalesOrder
      operations:
      - name: create-sales-order
        method: POST
  - type: http
    namespace: salesforce-write
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → salesforce-medical-device-sales-opportunity-sync.yml

Executes a predefined SQL query against the Johnson & Johnson clinical data warehouse in Snowflake and returns summary results.

naftiko: '0.5'
info:
  label: Snowflake Clinical Query Runner
  description: Executes a predefined SQL query against the Johnson & Johnson clinical data warehouse in Snowflake and returns summary results.
  tags:
  - clinical-trials
  - snowflake
  - data-warehouse
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: clinical-analytics
    port: 8080
    tools:
    - name: run-clinical-query
      description: Given a query identifier and optional study ID filter, execute the corresponding Snowflake query and return results.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: Predefined query identifier (e.g., enrollment-summary, ae-counts).
      - name: study_id
        in: body
        type: string
        description: Optional clinical study ID filter.
      call: snowflake.execute-query
      with:
        query_id: '{{query_id}}'
        study_id: '{{study_id}}'
      outputParameters:
      - name: row_count
        type: integer
        mapping: $.resultSetMetaData.numRows
      - name: data
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-query-runner.yml

When a P1 incident is opened in ServiceNow, pages the on-call engineer via Microsoft Teams and posts a war-room bridge link to the IT operations channel.

naftiko: '0.5'
info:
  label: ServiceNow ITSM Incident P1 Escalation
  description: When a P1 incident is opened in ServiceNow, pages the on-call engineer via Microsoft Teams and posts a war-room bridge link to the IT operations channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - microsoft-teams
  - operations
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: escalate-p1-incident
      description: Given a ServiceNow P1 incident number, retrieve the incident details and page the on-call engineer and IT leadership via Microsoft Teams with a war-room bridge link.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      - name: bridge_url
        in: body
        type: string
        description: The Teams meeting or bridge URL for the incident war room.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: page-oncall
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_oncall_channel_id
          text: 'P1 INCIDENT: {{incident_number}} | {{get-incident.short_description}} | Affected: {{get-incident.cmdb_ci}} | Bridge: {{bridge_url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-itsm-incident-p1-escalation.yml

Coordinates product recall activities by creating cases in Salesforce, notifying logistics via SAP, and alerting leadership for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Product Recall Coordination Workflow
  description: Coordinates product recall activities by creating cases in Salesforce, notifying logistics via SAP, and alerting leadership for Johnson & Johnson.
  tags:
  - quality
  - product-recall
  - salesforce
  - sap
capability:
  exposes:
  - type: mcp
    namespace: quality-recall
    port: 8080
    tools:
    - name: initiate-recall
      description: Given product recall details, create a Salesforce case, update SAP batch status, and send urgent notifications.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product name being recalled.
      - name: batch_numbers
        in: body
        type: string
        description: Comma-separated affected batch numbers.
      - name: recall_reason
        in: body
        type: string
        description: Reason for the recall.
      - name: recall_class
        in: body
        type: string
        description: Recall classification (Class I, II, III).
      steps:
      - name: create-recall-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'Product Recall: {{product_name}} — {{recall_class}}'
          type: Product_Recall
      - name: update-batch-status
        type: call
        call: sap.update-batch-status
        with:
          batch_numbers: '{{batch_numbers}}'
          status: blocked
      - name: alert-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.executive_channel
          text: 'URGENT — Product Recall: {{product_name}} ({{recall_class}}). Batches: {{batch_numbers}}. Case: {{create-recall-case.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-recall-coordination-workflow.yml

At month-end close, queries SAP for all open AP invoices past their due date in a given cost center, creates a ServiceNow finance task, and posts the reconciliation list to the Finance Teams channel.

naftiko: '0.5'
info:
  label: SAP Invoice Period Close Reconciliation
  description: At month-end close, queries SAP for all open AP invoices past their due date in a given cost center, creates a ServiceNow finance task, and posts the reconciliation list to the Finance Teams channel.
  tags:
  - finance
  - erp
  - sap
  - servicenow
  - microsoft-teams
  - period-close
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-ap-period-close
      description: Given a SAP company code and fiscal period, retrieve all open and overdue AP invoices, open a ServiceNow finance reconciliation task, and post the summary to the Finance Teams channel.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The SAP company code for the legal entity being closed.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period to close in YYYYMM format.
      steps:
      - name: get-open-invoices
        type: call
        call: sap.list-open-invoices
        with:
          company_code: '{{company_code}}'
          fiscal_period: '{{fiscal_period}}'
      - name: create-close-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'AP period close reconciliation: {{company_code}} period {{fiscal_period}}'
          category: finance
          assigned_group: Finance_AP
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_finance_channel_id
          text: 'AP Close: {{company_code}} / {{fiscal_period}} | Open invoices: {{get-open-invoices.invoice_count}} | Task: {{create-close-task.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: supplier-invoices
      path: /A_SupplierInvoice
      operations:
      - name: list-open-invoices
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-invoice-period-close-reconciliation.yml

Orchestrates commercial territory realignment by updating Salesforce territories, adjusting Workday reporting, and notifying the commercial team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Salesforce Commercial Territory Realignment Orchestrator
  description: Orchestrates commercial territory realignment by updating Salesforce territories, adjusting Workday reporting, and notifying the commercial team for Johnson & Johnson.
  tags:
  - commercial
  - salesforce
  - workday
  - territory-management
capability:
  exposes:
  - type: mcp
    namespace: commercial-ops-mgmt
    port: 8080
    tools:
    - name: realign-territories
      description: Given territory changes, update Salesforce assignments, adjust Workday structures, and notify the team.
      inputParameters:
      - name: territory_id
        in: body
        type: string
        description: The territory identifier.
      - name: new_rep_id
        in: body
        type: string
        description: The new sales representative employee ID.
      - name: effective_date
        in: body
        type: string
        description: Effective date of the realignment.
      steps:
      - name: update-salesforce
        type: call
        call: salesforce.update-record
        with:
          object_type: Territory2
          id: '{{territory_id}}'
          Assigned_Rep__c: '{{new_rep_id}}'
      - name: update-workday
        type: call
        call: workday.update-assignment
        with:
          employee_id: '{{new_rep_id}}'
          territory: '{{territory_id}}'
      - name: notify-commercial
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.commercial_ops_channel
          text: 'Territory Realignment: Territory {{territory_id}} assigned to Rep {{new_rep_id}} effective {{effective_date}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: territories
      path: /sobjects/Territory2/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-record
        method: PATCH
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Staffing/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: assignments
      path: /workers/{{employee_id}}/assignments
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: update-assignment
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-commercial-territory-realignment-orchestrator.yml

Retrieves the current lifecycle status of a document in Veeva Vault by document ID for Johnson & Johnson regulatory operations.

naftiko: '0.5'
info:
  label: Veeva Vault Document Status Lookup
  description: Retrieves the current lifecycle status of a document in Veeva Vault by document ID for Johnson & Johnson regulatory operations.
  tags:
  - regulatory
  - veeva-vault
  - document-management
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: get-document-status
      description: Given a Veeva Vault document ID, return the lifecycle state, owner, and last modified date.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault document ID.
      call: veeva.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: lifecycle_state
        type: string
        mapping: $.responseDetails.lifecycle__v
      - name: owner
        type: string
        mapping: $.responseDetails.owner__v
      - name: last_modified
        type: string
        mapping: $.responseDetails.last_modified_date__v
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-status-lookup.yml

Queries Snowflake for current enrollment figures by study, generates a summary, and posts to the clinical operations Teams channel for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Clinical Trial Enrollment Status Reporter
  description: Queries Snowflake for current enrollment figures by study, generates a summary, and posts to the clinical operations Teams channel for Johnson & Johnson.
  tags:
  - clinical-trials
  - snowflake
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: report-enrollment-status
      description: Given a study ID, query enrollment data, format a summary, and post to the designated Teams channel.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for clinical operations.
      steps:
      - name: query-enrollment
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT site_id, enrolled_count, target FROM enrollment_tracker WHERE study_id = '{{study_id}}'
          warehouse: CLINICAL_WH
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Enrollment Status for Study {{study_id}}: {{query-enrollment.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-enrollment-status-reporter.yml

When a medical device complaint is logged in Salesforce Service Cloud, enriches it with product master data from SAP, creates a quality event in Veeva Vault, and routes to the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Medical Device Complaint Case Triage
  description: When a medical device complaint is logged in Salesforce Service Cloud, enriches it with product master data from SAP, creates a quality event in Veeva Vault, and routes to the quality team via Microsoft Teams.
  tags:
  - customer-support
  - quality
  - salesforce
  - sap
  - veeva
  - microsoft-teams
  - medtech
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: triage-device-complaint
      description: Given a Salesforce case ID for a medical device complaint, retrieve SAP product details, create a Veeva quality event, and notify the quality team in Microsoft Teams.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce Service Cloud case ID for the device complaint.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: get-product
        type: call
        call: sap.get-material
        with:
          material_number: '{{get-case.product_code}}'
      - name: create-quality-event
        type: call
        call: veeva.create-quality-event
        with:
          case_id: '{{case_id}}'
          product_name: '{{get-product.material_description}}'
          complaint_summary: '{{get-case.description}}'
      - name: notify-quality-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_quality_channel_id
          text: 'Device complaint triaged: Case {{case_id}} | Product: {{get-product.material_description}} | Veeva event: {{create-quality-event.event_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Product('{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-material
        method: GET
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: quality-events
      path: /objects/quality_events__v
      operations:
      - name: create-quality-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → medical-device-complaint-case-triage.yml

Tracks KOL engagement activities by pulling data from Salesforce, summarizing in Snowflake, and reporting to medical affairs for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Salesforce Key Opinion Leader Engagement Tracker
  description: Tracks KOL engagement activities by pulling data from Salesforce, summarizing in Snowflake, and reporting to medical affairs for Johnson & Johnson.
  tags:
  - medical-affairs
  - salesforce
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: medical-affairs-analytics
    port: 8080
    tools:
    - name: track-kol-engagement
      description: Given a therapeutic area, pull KOL engagement data, aggregate in Snowflake, and post a summary.
      inputParameters:
      - name: therapeutic_area
        in: body
        type: string
        description: The therapeutic area (e.g., oncology, immunology).
      - name: period
        in: body
        type: string
        description: Reporting period (e.g., Q1-2026).
      steps:
      - name: pull-kol-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Name, Total_Engagements__c FROM Contact WHERE Therapeutic_Area__c = '{{therapeutic_area}}' AND KOL_Flag__c = true
      - name: aggregate-data
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kol_engagement_summary SELECT * FROM staged_kol_data WHERE period = '{{period}}'
          warehouse: ANALYTICS_WH
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.med_affairs_channel
          text: 'KOL Engagement Summary for {{therapeutic_area}} ({{period}}): {{pull-kol-data.totalSize}} KOLs tracked.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://jnj.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-key-opinion-leader-engagement-tracker.yml

Triggers a Power BI dataset refresh for the pharmaceutical sales performance dashboard and posts refresh status to the commercial excellence Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Power BI Pharma Sales Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the pharmaceutical sales performance dashboard and posts refresh status to the commercial excellence Microsoft Teams channel.
  tags:
  - data
  - analytics
  - power-bi
  - microsoft-teams
  - reporting
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-sales-dashboard
      description: Given a Power BI workspace ID and dataset ID, trigger a dataset refresh for the pharmaceutical sales dashboard and notify the commercial excellence Teams channel.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID containing the pharma sales dataset.
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: post-status
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_commercial_channel_id
          text: 'Power BI refresh triggered: dataset {{dataset_id}} in workspace {{workspace_id}}. Results available shortly.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-pharma-sales-dashboard-refresh.yml

Before an Azure DevOps production release deployment, checks ServiceNow for an approved change request, validates the deployment window, and gates the release accordingly.

naftiko: '0.5'
info:
  label: Azure DevOps Release Deployment Gate
  description: Before an Azure DevOps production release deployment, checks ServiceNow for an approved change request, validates the deployment window, and gates the release accordingly.
  tags:
  - devops
  - change-management
  - azure-devops
  - servicenow
  - microsoft-teams
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: release-management
    port: 8080
    tools:
    - name: gate-production-release
      description: Given an Azure DevOps release ID and a ServiceNow change request number, verify the change is approved and within the deployment window before allowing the release to proceed.
      inputParameters:
      - name: release_id
        in: body
        type: string
        description: The Azure DevOps release definition and run ID.
      - name: change_request_number
        in: body
        type: string
        description: The ServiceNow change request number (e.g., CHG0045678).
      - name: deployment_environment
        in: body
        type: string
        description: 'Target deployment environment: staging or production.'
      steps:
      - name: get-change-request
        type: call
        call: servicenow.get-change-request
        with:
          change_number: '{{change_request_number}}'
      - name: notify-release-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_release_channel_id
          text: 'Release gate check: Release {{release_id}} | Change {{change_request_number}} state: {{get-change-request.state}} | Environment: {{deployment_environment}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: get-change-request
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-devops-release-deployment-gate.yml

When a new digital health project is created in ServiceNow, provisions a GitHub repository with standard branch protection, assigns the project team, and notifies the engineering lead via Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Repository Provisioning for New Project
  description: When a new digital health project is created in ServiceNow, provisions a GitHub repository with standard branch protection, assigns the project team, and notifies the engineering lead via Microsoft Teams.
  tags:
  - devops
  - github
  - servicenow
  - microsoft-teams
  - developer-experience
capability:
  exposes:
  - type: mcp
    namespace: dev-provisioning
    port: 8080
    tools:
    - name: provision-project-repository
      description: Given a project name and GitHub organization, create a new GitHub repository with standard branch protection rules and notify the engineering lead via Microsoft Teams.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The project name used as the repository name.
      - name: github_org
        in: body
        type: string
        description: The GitHub organization to create the repository in.
      - name: team_lead_upn
        in: body
        type: string
        description: Microsoft Teams UPN of the engineering team lead.
      steps:
      - name: create-repo
        type: call
        call: github.create-repository
        with:
          org: '{{github_org}}'
          name: '{{project_name}}'
          private: 'true'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{team_lead_upn}}'
          text: 'Repository provisioned: {{github_org}}/{{project_name}} | URL: {{create-repo.html_url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repositories
      path: /orgs/{{org}}/repos
      inputParameters:
      - name: org
        in: path
      operations:
      - name: create-repository
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-repository-provisioning-for-new-project.yml

Reports cost center budget variances from SAP, creates finance review tasks, and notifies the finance team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Cost Center Budget Variance Reporter
  description: Reports cost center budget variances from SAP, creates finance review tasks, and notifies the finance team for Johnson & Johnson.
  tags:
  - finance
  - sap
  - budgeting
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: report-budget-variance
      description: Given a cost center and period, calculate budget variance, create a review task, and notify finance.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period (e.g., 2026-03).
      steps:
      - name: get-variance
        type: call
        call: sap.get-budget-variance
        with:
          cost_center: '{{cost_center}}'
          period: '{{fiscal_period}}'
      - name: create-review
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Budget Variance: CC {{cost_center}} — {{fiscal_period}}'
          category: finance
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.finance_channel
          text: 'Budget Variance: CC {{cost_center}} for {{fiscal_period}}. Variance: {{get-variance.variance}}. Review: {{create-review.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-cost-center-budget-variance-reporter.yml

Initiates periodic SOP review cycles by identifying documents due for review in Veeva Vault, creating Jira tasks, and notifying owners for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Document Control SOP Review Cycle Initiator
  description: Initiates periodic SOP review cycles by identifying documents due for review in Veeva Vault, creating Jira tasks, and notifying owners for Johnson & Johnson.
  tags:
  - quality
  - document-control
  - veeva-vault
  - jira
capability:
  exposes:
  - type: mcp
    namespace: doc-control
    port: 8080
    tools:
    - name: initiate-sop-review-cycle
      description: Given a document category and review period, find SOPs due for review, create tracking tasks, and notify owners.
      inputParameters:
      - name: document_category
        in: body
        type: string
        description: The SOP document category (manufacturing, QC, clinical).
      - name: review_due_days
        in: body
        type: integer
        description: Days until review due date to include.
      steps:
      - name: find-docs-due
        type: call
        call: veeva.query-submissions
        with:
          query: SELECT id, name__v FROM documents WHERE category__c = '{{document_category}}'
      - name: create-jira-tasks
        type: call
        call: jira.create-issue
        with:
          project: QMS
          summary: 'SOP Review Cycle: {{document_category}} — {{find-docs-due.totalCount}} documents'
          issuetype: Task
      - name: notify-owners
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.doc_control_channel
          text: 'SOP Review Cycle: {{find-docs-due.totalCount}} {{document_category}} documents due within {{review_due_days}} days. Jira: {{create-jira-tasks.key}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://jnj.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: object-records
      path: /vobjects/{{object_type}}
      inputParameters:
      - name: object_type
        in: path
      operations:
      - name: create-object-record
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → document-control-sop-review-cycle-initiator.yml

Retrieves configuration item details from ServiceNow CMDB by asset tag for Johnson & Johnson IT asset management.

naftiko: '0.5'
info:
  label: ServiceNow CMDB Asset Lookup
  description: Retrieves configuration item details from ServiceNow CMDB by asset tag for Johnson & Johnson IT asset management.
  tags:
  - it-operations
  - servicenow
  - cmdb
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: get-cmdb-asset
      description: Given an asset tag, return the CI name, class, operational status, and assigned support group.
      inputParameters:
      - name: asset_tag
        in: body
        type: string
        description: The ServiceNow asset tag identifier.
      call: servicenow.get-ci
      with:
        asset_tag: '{{asset_tag}}'
      outputParameters:
      - name: ci_name
        type: string
        mapping: $.result.name
      - name: ci_class
        type: string
        mapping: $.result.sys_class_name
      - name: operational_status
        type: string
        mapping: $.result.operational_status
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb-ci
      path: /table/cmdb_ci?sysparm_query=asset_tag={{asset_tag}}
      inputParameters:
      - name: asset_tag
        in: query
      operations:
      - name: get-ci
        method: GET
Open in Framework → View in Fleet → servicenow-cmdb-asset-lookup.yml

Refreshes the R&D pipeline dashboard by pulling compound status from Snowflake, updating Power BI, and notifying R&D leadership for Johnson & Johnson.

naftiko: '0.5'
info:
  label: R&D Compound Pipeline Dashboard Refresh
  description: Refreshes the R&D pipeline dashboard by pulling compound status from Snowflake, updating Power BI, and notifying R&D leadership for Johnson & Johnson.
  tags:
  - r-and-d
  - snowflake
  - power-bi
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: rd-analytics
    port: 8080
    tools:
    - name: refresh-pipeline-dashboard
      description: Trigger a pipeline data extract from Snowflake, refresh the Power BI dataset, and notify leadership.
      inputParameters:
      - name: dashboard_id
        in: body
        type: string
        description: The Power BI dashboard dataset ID.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel for R&D leadership.
      steps:
      - name: extract-pipeline-data
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL refresh_rd_pipeline_snapshot()
          warehouse: RD_WH
      - name: refresh-powerbi
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dashboard_id}}'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: R&D Pipeline Dashboard refreshed. Data as of {{extract-pipeline-data.timestamp}}.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → r-d-compound-pipeline-dashboard-refresh.yml

Queries Workday for mandatory compliance training completion rates by department and flags departments below the required threshold via a ServiceNow task and Microsoft Teams alert.

naftiko: '0.5'
info:
  label: Workday Learning Compliance Tracker
  description: Queries Workday for mandatory compliance training completion rates by department and flags departments below the required threshold via a ServiceNow task and Microsoft Teams alert.
  tags:
  - hr
  - compliance
  - workday
  - servicenow
  - microsoft-teams
  - learning-development
capability:
  exposes:
  - type: mcp
    namespace: compliance-learning
    port: 8080
    tools:
    - name: check-training-compliance
      description: Given a compliance course ID and required completion percentage threshold, check Workday training completion rates by department and alert HR leaders of non-compliant departments via Teams.
      inputParameters:
      - name: course_id
        in: body
        type: string
        description: The Workday Learning course ID for the mandatory compliance training.
      - name: completion_threshold_pct
        in: body
        type: number
        description: The required completion percentage (e.g., 95 for 95%).
      steps:
      - name: get-completion-rates
        type: call
        call: workday.get-course-completion-rates
        with:
          course_id: '{{course_id}}'
      - name: create-compliance-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Compliance training gap: course {{course_id}} below {{completion_threshold_pct}}% threshold'
          category: hr_compliance
          assigned_group: HR_Compliance
      - name: alert-hr
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: $secrets.teams_hr_channel_id
          text: 'Compliance Alert: Course {{course_id}} — departments below {{completion_threshold_pct}}% threshold | ServiceNow task: {{create-compliance-task.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: course-completions
      path: /learningCourseCompletions
      operations:
      - name: get-course-completion-rates
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-learning-compliance-tracker.yml

Creates planned maintenance orders in SAP for manufacturing equipment, schedules in ServiceNow, and notifies the maintenance team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: SAP Planned Maintenance Order Creator
  description: Creates planned maintenance orders in SAP for manufacturing equipment, schedules in ServiceNow, and notifies the maintenance team for Johnson & Johnson.
  tags:
  - manufacturing
  - sap
  - maintenance
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-maintenance
    port: 8080
    tools:
    - name: create-maintenance-order
      description: Given equipment details, create a SAP maintenance order, a ServiceNow work order, and notify maintenance.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The SAP equipment ID.
      - name: maintenance_type
        in: body
        type: string
        description: Type of maintenance (preventive, calibration, qualification).
      - name: plant
        in: body
        type: string
        description: The plant code.
      - name: scheduled_date
        in: body
        type: string
        description: Scheduled maintenance date.
      steps:
      - name: create-sap-order
        type: call
        call: sap.create-maintenance-order
        with:
          equipment: '{{equipment_id}}'
          order_type: '{{maintenance_type}}'
          plant: '{{plant}}'
      - name: create-snow-work-order
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Maintenance: {{maintenance_type}} — Equipment {{equipment_id}}'
          category: manufacturing_maintenance
      - name: notify-maintenance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.maintenance_channel
          text: 'Maintenance Scheduled: {{maintenance_type}} for Equipment {{equipment_id}} at Plant {{plant}} on {{scheduled_date}}. SAP: {{create-sap-order.order_number}}. SNOW: {{create-snow-work-order.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://jnj-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-planned-maintenance-order-creator.yml

Manages infrastructure provisioning by creating ServiceNow change requests, triggering Terraform plans, and notifying the cloud team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Provisioning with Approval
  description: Manages infrastructure provisioning by creating ServiceNow change requests, triggering Terraform plans, and notifying the cloud team for Johnson & Johnson.
  tags:
  - devops
  - terraform
  - servicenow
  - cloud
capability:
  exposes:
  - type: mcp
    namespace: cloud-ops
    port: 8080
    tools:
    - name: provision-infrastructure
      description: Given infrastructure requirements, create a change request, generate a Terraform plan, and notify cloud engineering.
      inputParameters:
      - name: environment
        in: body
        type: string
        description: Target environment (dev, staging, production).
      - name: resource_type
        in: body
        type: string
        description: Type of resource to provision.
      - name: requestor
        in: body
        type: string
        description: Name of the requestor.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Infra Provisioning: {{resource_type}} in {{environment}}'
          category: cloud_infrastructure
      - name: trigger-plan
        type: call
        call: github.trigger-workflow
        with:
          repo: infrastructure
          workflow: terraform-plan.yml
      - name: notify-cloud-team
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.cloud_eng_channel
          text: 'Infra Request: {{resource_type}} in {{environment}} by {{requestor}}. Change: {{create-change.number}}. Terraform plan triggered.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-provisioning-with-approval.yml

Tracks vulnerability remediation by pulling scan results, creating ServiceNow tickets, and reporting to the CISO dashboard for Johnson & Johnson.

naftiko: '0.5'
info:
  label: IT Security Vulnerability Remediation Tracker
  description: Tracks vulnerability remediation by pulling scan results, creating ServiceNow tickets, and reporting to the CISO dashboard for Johnson & Johnson.
  tags:
  - security
  - servicenow
  - compliance
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: track-vulnerability-remediation
      description: Given a scan ID and severity threshold, pull results, create remediation tickets, and update the dashboard.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The vulnerability scan identifier.
      - name: severity_threshold
        in: body
        type: string
        description: Minimum severity to track (critical, high, medium).
      steps:
      - name: get-findings
        type: call
        call: servicenow.get-vulnerabilities
        with:
          scan_id: '{{scan_id}}'
          severity: '{{severity_threshold}}'
      - name: create-tickets
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Vulnerability Remediation: Scan {{scan_id}}'
          category: security
      - name: notify-security
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.security_ops_channel
          text: 'Vulnerability Scan {{scan_id}}: {{get-findings.count}} findings at {{severity_threshold}}+ severity. Ticket: {{create-tickets.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-security-vulnerability-remediation-tracker.yml

Launches periodic access certification campaigns by pulling user data from Okta, creating review tasks, and notifying managers for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Okta Access Certification Campaign Launcher
  description: Launches periodic access certification campaigns by pulling user data from Okta, creating review tasks, and notifying managers for Johnson & Johnson.
  tags:
  - security
  - okta
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: identity-governance
    port: 8080
    tools:
    - name: launch-access-certification
      description: Given a certification scope, pull active users from Okta, create review tasks, and notify owners.
      inputParameters:
      - name: application_name
        in: body
        type: string
        description: The Okta application name to certify.
      - name: campaign_name
        in: body
        type: string
        description: The certification campaign name.
      steps:
      - name: get-users
        type: call
        call: okta.get-app-users
        with:
          application_name: '{{application_name}}'
      - name: create-campaign
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Access Certification: {{campaign_name}} — {{application_name}}'
          category: identity_governance
      - name: notify-owners
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.iam_channel
          text: 'Access Certification: {{campaign_name}} for {{application_name}}. {{get-users.count}} users to review. SNOW: {{create-campaign.number}}.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://jnj.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: app-users
      path: /apps/{{application_name}}/users
      inputParameters:
      - name: application_name
        in: path
      operations:
      - name: get-app-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-access-certification-campaign-launcher.yml

Checks the last extract refresh status for a Tableau workbook for Johnson & Johnson analytics operations.

naftiko: '0.5'
info:
  label: Tableau Workbook Refresh Status
  description: Checks the last extract refresh status for a Tableau workbook for Johnson & Johnson analytics operations.
  tags:
  - analytics
  - tableau
  - reporting
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: analytics-tableau
    port: 8080
    tools:
    - name: get-workbook-refresh
      description: Given a Tableau workbook ID, return the last refresh status and extract time.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID.
      call: tableau.get-extract-refresh
      with:
        workbook_id: '{{workbook_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.extractRefreshes[0].status
      - name: completed_at
        type: string
        mapping: $.extractRefreshes[0].completedAt
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://jnj.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}/refreshes
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: get-extract-refresh
        method: GET
Open in Framework → View in Fleet → tableau-workbook-refresh-status.yml

Runs pharmacovigilance signal detection queries in Snowflake, generates summary reports, and alerts the safety review board for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Pharmacovigilance Signal Detection Reporter
  description: Runs pharmacovigilance signal detection queries in Snowflake, generates summary reports, and alerts the safety review board for Johnson & Johnson.
  tags:
  - drug-safety
  - pharmacovigilance
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: pv-analytics
    port: 8080
    tools:
    - name: run-signal-detection
      description: Given a product and time period, run signal detection queries, create a Jira tracking issue, and alert the safety board.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The drug product name.
      - name: period_start
        in: body
        type: string
        description: Analysis period start date.
      - name: period_end
        in: body
        type: string
        description: Analysis period end date.
      steps:
      - name: run-detection
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL pv_signal_detection('{{product_name}}', '{{period_start}}', '{{period_end}}')
          warehouse: PV_WH
      - name: create-review-ticket
        type: call
        call: jira.create-issue
        with:
          project: PV
          summary: 'Signal Detection: {{product_name}} ({{period_start}} to {{period_end}})'
          issuetype: Task
      - name: alert-safety-board
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.safety_board_channel
          text: 'PV Signal Detection: {{product_name}} ({{period_start}} to {{period_end}}). Signals: {{run-detection.signal_count}}. Jira: {{create-review-ticket.key}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://jnj.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://jnj.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-signal-detection-reporter.yml

Retrieves employee absence and leave balance from Workday for Johnson & Johnson HR operations.

naftiko: '0.5'
info:
  label: Workday Absence Balance Lookup
  description: Retrieves employee absence and leave balance from Workday for Johnson & Johnson HR operations.
  tags:
  - hr
  - workday
  - absence
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: hr-absence
    port: 8080
    tools:
    - name: get-absence-balance
      description: Given an employee ID, return the PTO balance, sick leave balance, and next scheduled absence.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-absence-balance
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: pto_balance
        type: string
        mapping: $.TimeOff.PTO_Balance
      - name: sick_balance
        type: string
        mapping: $.TimeOff.Sick_Balance
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/service/jnj/Absence_Management/v42.0
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absences
      path: /workers/{{employee_id}}/absenceBalances
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-absence-balance
        method: GET
Open in Framework → View in Fleet → workday-absence-balance-lookup.yml

Retrieves the current status and profile of an Okta user by login email for Johnson & Johnson identity management.

naftiko: '0.5'
info:
  label: Okta User Status Lookup
  description: Retrieves the current status and profile of an Okta user by login email for Johnson & Johnson identity management.
  tags:
  - security
  - okta
  - identity
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: get-user-status
      description: Given a user email, return the Okta user status, last login, and MFA enrollment status.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user login email address.
      call: okta.get-user
      with:
        user_email: '{{user_email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: last_login
        type: string
        mapping: $.lastLogin
      - name: mfa_enrolled
        type: boolean
        mapping: $.credentials.provider.type
  consumes:
  - type: http
    namespace: okta
    baseUri: https://jnj.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users/{{user_email}}
      inputParameters:
      - name: user_email
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-status-lookup.yml

Detects shipment delays in SAP, creates a ServiceNow case, and alerts the logistics team for Johnson & Johnson.

naftiko: '0.5'
info:
  label: Supply Chain Shipment Delay Escalation
  description: Detects shipment delays in SAP, creates a ServiceNow case, and alerts the logistics team for Johnson & Johnson.
  tags:
  - supply-chain
  - sap
  - servicenow
  - logistics
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: escalate-shipment-delay
      description: Given a delivery number and delay reason, create a ServiceNow case and notify supply chain leadership.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery number.
      - name: delay_reason
        in: body
        type: string
        description: Reason for the shipment delay.
      - name: expected_date
        in: body
        type: string
        description: Originally expected delivery date.
      - name: new_date
        in: body
        type: string
        description: Revised delivery date.
      steps:
      - name: create-sc-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Shipment Delay: Delivery {{delivery_number}}'
          category: supply_chain
          description: 'Delivery: {{delivery_number}} | Reason: {{delay_reason}} | Original: {{expected_date}} | Revised: {{new_date}}'
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.supply_chain_channel
          text: 'Supply Chain Alert: Delivery {{delivery_number}} delayed from {{expected_date}} to {{new_date}}. Reason: {{delay_reason}}. Case: {{create-sc-case.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://jnj.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-shipment-delay-escalation.yml

Queries patient census data from Azure Databricks, calculates staffing needs, updates shift assignments in Workday, and notifies nurse managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Nurse Staffing Optimization Pipeline
  description: Queries patient census data from Azure Databricks, calculates staffing needs, updates shift assignments in Workday, and notifies nurse managers via Microsoft Teams.
  tags:
  - staffing
  - workforce-management
  - azure-databricks
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: nurse-staffing
    port: 8080
    tools:
    - name: optimize-staffing
      description: Given a facility and date, calculate optimal nurse staffing based on census data and update Workday schedules.
      inputParameters:
      - name: facility_code
        in: body
        type: string
        description: The facility location code.
      - name: target_date
        in: body
        type: string
        description: The target staffing date in YYYY-MM-DD format.
      steps:
      - name: get-census
        type: call
        call: databricks.run-query
        with:
          query: SELECT unit, patient_count, acuity_score FROM census WHERE facility = '{{facility_code}}' AND date = '{{target_date}}'
      - name: update-schedules
        type: call
        call: workday.update-shifts
        with:
          facility: '{{facility_code}}'
          date: '{{target_date}}'
          staffing_plan: '{{get-census.results}}'
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: nurse-staffing
          text: Staffing plan updated for {{facility_code}} on {{target_date}}. Census data processed for {{get-census.row_count}} units.
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: shifts
      path: /scheduling/shifts
      operations:
      - name: update-shifts
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → nurse-staffing-optimization-pipeline.yml

Retrieves a Zendesk support ticket by ID, returning subject, status, priority, and assigned agent.

naftiko: '0.5'
info:
  label: Zendesk Patient Support Ticket Lookup
  description: Retrieves a Zendesk support ticket by ID, returning subject, status, priority, and assigned agent.
  tags:
  - patient-support
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: patient-support
    port: 8080
    tools:
    - name: get-support-ticket
      description: Look up a Zendesk support ticket by ticket ID.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticket_id: '{{ticket_id}}'
      outputParameters:
      - name: subject
        type: string
        mapping: $.ticket.subject
      - name: status
        type: string
        mapping: $.ticket.status
      - name: priority
        type: string
        mapping: $.ticket.priority
      - name: assignee
        type: string
        mapping: $.ticket.assignee_id
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://kaiserpermanente.zendesk.com/api/v2
    authentication:
      type: basic
      username: $secrets.zendesk_user
      password: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{ticket_id}}
      inputParameters:
      - name: ticket_id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-patient-support-ticket-lookup.yml

Monitors clinical pathway adherence by querying treatment data from Databricks, comparing against protocols in Confluence, and generating variance reports in Power BI.

naftiko: '0.5'
info:
  label: Clinical Pathway Adherence Monitor
  description: Monitors clinical pathway adherence by querying treatment data from Databricks, comparing against protocols in Confluence, and generating variance reports in Power BI.
  tags:
  - clinical-quality
  - pathways
  - azure-databricks
  - confluence
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: pathway-adherence
    port: 8080
    tools:
    - name: monitor-pathway-adherence
      description: Monitor adherence to clinical pathways and generate variance reports.
      inputParameters:
      - name: pathway_id
        in: body
        type: string
        description: The clinical pathway identifier.
      - name: department_code
        in: body
        type: string
        description: The department code.
      steps:
      - name: get-treatment-data
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM treatment_adherence WHERE pathway_id = '{{pathway_id}}' AND department = '{{department_code}}'
      - name: get-protocol
        type: call
        call: confluence.get-page
        with:
          space_key: CLINICAL
          title: Protocol-{{pathway_id}}
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: pathway-adherence-{{department_code}}
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://kaiserpermanente.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → clinical-pathway-adherence-monitor.yml

Generates community benefit reports by pulling program data from Salesforce, calculating impact metrics in Databricks, creating report documents in SharePoint, and distributing via MailChimp.

naftiko: '0.5'
info:
  label: Community Benefit Program Reporting Pipeline
  description: Generates community benefit reports by pulling program data from Salesforce, calculating impact metrics in Databricks, creating report documents in SharePoint, and distributing via MailChimp.
  tags:
  - community-health
  - reporting
  - salesforce
  - azure-databricks
  - sharepoint
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: community-benefit
    port: 8080
    tools:
    - name: generate-community-benefit-report
      description: Generate and distribute community benefit program reports.
      inputParameters:
      - name: program_id
        in: body
        type: string
        description: The community benefit program ID.
      - name: reporting_period
        in: body
        type: string
        description: Reporting period (e.g., Q1-2026).
      steps:
      - name: get-program-data
        type: call
        call: salesforce.get-program-metrics
        with:
          program_id: '{{program_id}}'
          period: '{{reporting_period}}'
      - name: calculate-impact
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM community_impact WHERE program_id = '{{program_id}}' AND period = '{{reporting_period}}'
      - name: create-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: community-health
          folder_path: Reports/{{program_id}}/{{reporting_period}}
          template: community_benefit_report
      - name: distribute-report
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: community-stakeholders
          template: community_benefit_summary
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: programs
      path: /sobjects/CommunityBenefitProgram__c/{{program_id}}
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: get-program-metrics
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → community-benefit-program-reporting-pipeline.yml

Monitors real-time patient vitals from the EHR, scores sepsis risk via the ML model in Azure Machine Learning, creates alerts in ServiceNow, and pages the rapid response team via Teams.

naftiko: '0.5'
info:
  label: Sepsis Early Warning Pipeline
  description: Monitors real-time patient vitals from the EHR, scores sepsis risk via the ML model in Azure Machine Learning, creates alerts in ServiceNow, and pages the rapid response team via Teams.
  tags:
  - clinical-decision-support
  - sepsis
  - azure-machine-learning
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sepsis-warning
    port: 8080
    tools:
    - name: evaluate-sepsis-risk
      description: Evaluate sepsis risk and trigger rapid response if indicated.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: rapid_response_email
        in: body
        type: string
        description: Rapid response team email.
      steps:
      - name: get-vitals
        type: call
        call: epic.get-vitals
        with:
          patient_id: '{{patient_id}}'
      - name: score-sepsis-risk
        type: call
        call: azureml.score
        with:
          model_name: sepsis-risk-model
          features: '{{get-vitals.vital_signs}}'
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: Sepsis risk alert - Patient {{patient_id}}
          urgency: '1'
          description: 'Sepsis risk score: {{score-sepsis-risk.risk_score}}. Patient vitals: HR={{get-vitals.heart_rate}}, Temp={{get-vitals.temperature}}, WBC={{get-vitals.wbc}}.'
      - name: page-rrt
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{rapid_response_email}}'
          text: 'SEPSIS ALERT: Patient {{patient_id}}, risk score {{score-sepsis-risk.risk_score}}. Incident: {{create-alert.number}}. Immediate assessment required.'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: vitals
      path: /Observation?patient={{patient_id}}&category=vital-signs&_sort=-date&_count=1
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-vitals
        method: GET
  - type: http
    namespace: azureml
    baseUri: https://kp-ml.westus2.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: models
      path: /score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sepsis-early-warning-pipeline.yml

Coordinates home health visits by pulling the patient care plan from Salesforce, optimizing visit routes via Google Maps, scheduling visits, and sending the care team their daily assignment via Teams.

naftiko: '0.5'
info:
  label: Home Health Visit Coordination Pipeline
  description: Coordinates home health visits by pulling the patient care plan from Salesforce, optimizing visit routes via Google Maps, scheduling visits, and sending the care team their daily assignment via Teams.
  tags:
  - home-health
  - care-coordination
  - salesforce
  - google-maps
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: home-health
    port: 8080
    tools:
    - name: coordinate-home-visits
      description: Coordinate home health visit assignments and routing.
      inputParameters:
      - name: care_team_id
        in: body
        type: string
        description: The home health care team ID.
      - name: visit_date
        in: body
        type: string
        description: The visit date in YYYY-MM-DD format.
      - name: team_lead_email
        in: body
        type: string
        description: Team lead email for notifications.
      steps:
      - name: get-patient-list
        type: call
        call: salesforce.get-home-health-patients
        with:
          care_team_id: '{{care_team_id}}'
          visit_date: '{{visit_date}}'
      - name: optimize-routes
        type: call
        call: googlemaps.optimize-route
        with:
          addresses: '{{get-patient-list.addresses}}'
          start_location: '{{get-patient-list.office_address}}'
      - name: create-assignments
        type: call
        call: salesforce.create-visit-assignments
        with:
          care_team_id: '{{care_team_id}}'
          visit_date: '{{visit_date}}'
          route_order: '{{optimize-routes.optimized_order}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{team_lead_email}}'
          text: 'Home health assignments for {{visit_date}}: {{get-patient-list.patient_count}} patients. Optimized route: {{optimize-routes.total_distance}} miles. Assignments created: {{create-assignments.assignment_count}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: home-health
      path: /sobjects/HomeHealthVisit__c
      operations:
      - name: get-home-health-patients
        method: GET
      - name: create-visit-assignments
        method: POST
  - type: http
    namespace: googlemaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: apiKey
      header: key
      key: $secrets.google_maps_key
    resources:
    - name: directions
      path: /directions/json
      operations:
      - name: optimize-route
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → home-health-visit-coordination-pipeline.yml

Identifies patients due for immunizations from Azure Databricks, sends reminders via MailChimp, and logs the outreach in Salesforce.

naftiko: '0.5'
info:
  label: Immunization Outreach Campaign
  description: Identifies patients due for immunizations from Azure Databricks, sends reminders via MailChimp, and logs the outreach in Salesforce.
  tags:
  - population-health
  - immunizations
  - azure-databricks
  - mailchimp
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: immunization-outreach
    port: 8080
    tools:
    - name: trigger-immunization-campaign
      description: Given a vaccine type, identify eligible patients, send email reminders, and log the campaign.
      inputParameters:
      - name: vaccine_type
        in: body
        type: string
        description: The vaccine type (e.g., flu, COVID-19, shingles).
      - name: campaign_name
        in: body
        type: string
        description: The outreach campaign name.
      steps:
      - name: find-eligible
        type: call
        call: databricks.run-query
        with:
          query: SELECT patient_id, email, name FROM immunization_due WHERE vaccine_type = '{{vaccine_type}}' AND last_dose_date < DATEADD(year, -1, CURRENT_DATE)
      - name: send-emails
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: immunization-reminders
          template: '{{vaccine_type}}-reminder'
          recipients: '{{find-eligible.emails}}'
      - name: log-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{campaign_name}}'
          type: immunization
          vaccine: '{{vaccine_type}}'
          recipients_count: '{{find-eligible.row_count}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: 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://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → immunization-outreach-campaign.yml

Retrieves employer outreach contact details from HubSpot CRM for the employer partnerships team.

naftiko: '0.5'
info:
  label: HubSpot Employer Outreach Tracking
  description: Retrieves employer outreach contact details from HubSpot CRM for the employer partnerships team.
  tags:
  - partnerships
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: employer-partnerships
    port: 8080
    tools:
    - name: get-employer-contact
      description: Look up an employer contact in HubSpot by company name.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The employer company name.
      call: hubspot.search-contacts
      with:
        query: '{{company_name}}'
      outputParameters:
      - name: contact_name
        type: string
        mapping: $.results[0].properties.firstname
      - name: email
        type: string
        mapping: $.results[0].properties.email
      - name: company
        type: string
        mapping: $.results[0].properties.company
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts/search
      operations:
      - name: search-contacts
        method: POST
Open in Framework → View in Fleet → hubspot-employer-outreach-tracking.yml

Fetches a clinical document from SharePoint by document ID and returns the file URL, last modified date, and author.

naftiko: '0.5'
info:
  label: SharePoint Clinical Document Retrieval
  description: Fetches a clinical document from SharePoint by document ID and returns the file URL, last modified date, and author.
  tags:
  - clinical
  - documents
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: clinical-docs
    port: 8080
    tools:
    - name: get-clinical-document
      description: Retrieve a clinical document from SharePoint by document ID.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The SharePoint document ID.
      call: sharepoint.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: file_url
        type: string
        mapping: $.webUrl
      - name: last_modified
        type: string
        mapping: $.lastModifiedDateTime
      - name: author
        type: string
        mapping: $.createdBy.user.displayName
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /kp-clinical/drive/items/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → sharepoint-clinical-document-retrieval.yml

Tracks clinical staff competency certifications by pulling records from Workday, identifying expiring credentials, creating renewal tasks in Jira, and notifying managers via Teams.

naftiko: '0.5'
info:
  label: Clinical Staff Competency Tracker Pipeline
  description: Tracks clinical staff competency certifications by pulling records from Workday, identifying expiring credentials, creating renewal tasks in Jira, and notifying managers via Teams.
  tags:
  - credentialing
  - competency
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: staff-competency
    port: 8080
    tools:
    - name: check-competency-status
      description: Check staff competency certifications and flag expirations.
      inputParameters:
      - name: department_code
        in: body
        type: string
        description: The department code.
      - name: manager_email
        in: body
        type: string
        description: Department manager email.
      steps:
      - name: get-certifications
        type: call
        call: workday.get-certifications
        with:
          department_code: '{{department_code}}'
      - name: create-renewal-tasks
        type: call
        call: jira.create-issues-bulk
        with:
          project: CRED
          issues: '{{get-certifications.expiring_certifications}}'
          issue_type: Task
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_email}}'
          text: 'Competency alert for {{department_code}}: {{get-certifications.expiring_count}} certifications expiring within 90 days. {{create-renewal-tasks.created_count}} renewal tasks created in Jira.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kaiserpermanente
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: certifications
      path: /workers/certifications
      operations:
      - name: get-certifications
        method: GET
  - type: http
    namespace: jira
    baseUri: https://kaiserpermanente.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/bulk
      operations:
      - name: create-issues-bulk
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-staff-competency-tracker-pipeline.yml

Coordinates organ transplant waitlist management by pulling patient status from the EHR, updating the transplant registry, notifying the transplant team, and creating follow-up tasks in Salesforce.

naftiko: '0.5'
info:
  label: Organ Transplant Waitlist Coordinator
  description: Coordinates organ transplant waitlist management by pulling patient status from the EHR, updating the transplant registry, notifying the transplant team, and creating follow-up tasks in Salesforce.
  tags:
  - transplant
  - waitlist
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: transplant-waitlist
    port: 8080
    tools:
    - name: update-waitlist-status
      description: Update a patient's transplant waitlist status across systems.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: organ_type
        in: body
        type: string
        description: The organ type (kidney, liver, heart, etc.).
      - name: new_status
        in: body
        type: string
        description: The new waitlist status.
      - name: transplant_team_email
        in: body
        type: string
        description: Transplant team email.
      steps:
      - name: get-patient-data
        type: call
        call: epic.get-patient
        with:
          mrn: '{{patient_id}}'
      - name: update-registry
        type: call
        call: transplant-registry.update-status
        with:
          patient_id: '{{patient_id}}'
          organ_type: '{{organ_type}}'
          status: '{{new_status}}'
      - name: create-followup
        type: call
        call: salesforce.create-task
        with:
          subject: 'Transplant waitlist update: {{patient_id}} - {{organ_type}}'
          description: 'Status changed to {{new_status}}. Patient: {{get-patient-data.name}}.'
          assigned_to: '{{transplant_team_email}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{transplant_team_email}}'
          text: 'Transplant waitlist update: Patient {{patient_id}} ({{organ_type}}) status changed to {{new_status}}. Task: {{create-followup.task_id}}.'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: patients
      path: /Patient/{{mrn}}
      inputParameters:
      - name: mrn
        in: path
      operations:
      - name: get-patient
        method: GET
  - type: http
    namespace: transplant-registry
    baseUri: https://kp-transplant.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.transplant_token
    resources:
    - name: waitlist
      path: /waitlist/{{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: update-status
        method: PUT
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → organ-transplant-waitlist-coordinator.yml

Assesses fall risk for inpatients by scoring risk factors from the EHR, creating care plan interventions in Salesforce, updating room signage orders in ServiceNow, and alerting nursing staff via Teams.

naftiko: '0.5'
info:
  label: Fall Prevention Risk Assessment Pipeline
  description: Assesses fall risk for inpatients by scoring risk factors from the EHR, creating care plan interventions in Salesforce, updating room signage orders in ServiceNow, and alerting nursing staff via Teams.
  tags:
  - patient-safety
  - fall-prevention
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fall-prevention
    port: 8080
    tools:
    - name: assess-fall-risk
      description: Assess inpatient fall risk and implement prevention measures.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: unit_email
        in: body
        type: string
        description: The nursing unit email.
      steps:
      - name: get-risk-factors
        type: call
        call: epic.get-patient-assessment
        with:
          patient_id: '{{patient_id}}'
          assessment_type: fall_risk
      - name: create-interventions
        type: call
        call: salesforce.create-care-plan-items
        with:
          patient_id: '{{patient_id}}'
          interventions: '{{get-risk-factors.recommended_interventions}}'
          risk_score: '{{get-risk-factors.morse_score}}'
      - name: order-signage
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Fall risk signage: Room {{get-risk-factors.room_number}}'
          category: patient_safety
          risk_level: '{{get-risk-factors.risk_level}}'
      - name: alert-nursing
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{unit_email}}'
          text: 'Fall risk alert: Patient {{patient_id}}, Room {{get-risk-factors.room_number}}. Morse score: {{get-risk-factors.morse_score}} ({{get-risk-factors.risk_level}}). Interventions created: {{create-interventions.count}}.'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: assessments
      path: /RiskAssessment?patient={{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-patient-assessment
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: care-plan-items
      path: /sobjects/CarePlanItem__c
      operations:
      - name: create-care-plan-items
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fall-prevention-risk-assessment-pipeline.yml

Fetches a patient's most recent lab results from Oracle Cloud, including test name, value, reference range, and collection date.

naftiko: '0.5'
info:
  label: Clinical Lab Results Retrieval
  description: Fetches a patient's most recent lab results from Oracle Cloud, including test name, value, reference range, and collection date.
  tags:
  - clinical
  - lab-results
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: clinical-data
    port: 8080
    tools:
    - name: get-lab-results
      description: Retrieve the most recent lab results for a patient by medical record number.
      inputParameters:
      - name: mrn
        in: body
        type: string
        description: The patient medical record number.
      call: oracle.get-lab-results
      with:
        mrn: '{{mrn}}'
      outputParameters:
      - name: test_name
        type: string
        mapping: $.items[0].TestName
      - name: value
        type: string
        mapping: $.items[0].ResultValue
      - name: reference_range
        type: string
        mapping: $.items[0].ReferenceRange
      - name: collection_date
        type: string
        mapping: $.items[0].CollectionDate
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://kp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: lab-results
      path: /labResults?q=MRN={{mrn}}&orderBy=CollectionDate:desc&limit=10
      inputParameters:
      - name: mrn
        in: query
      operations:
      - name: get-lab-results
        method: GET
Open in Framework → View in Fleet → clinical-lab-results-retrieval.yml

Retrieves an employee's current benefits enrollment from Workday, including medical plan, dental plan, and enrollment status.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Lookup
  description: Retrieves an employee's current benefits enrollment from Workday, including medical plan, dental plan, and enrollment status.
  tags:
  - hr
  - benefits
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-benefits
    port: 8080
    tools:
    - name: get-benefits-enrollment
      description: Look up an employee's benefits enrollment in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-benefits
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: medical_plan
        type: string
        mapping: $.benefits.medicalPlan
      - name: dental_plan
        type: string
        mapping: $.benefits.dentalPlan
      - name: enrollment_status
        type: string
        mapping: $.benefits.enrollmentStatus
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: benefits
      path: /workers/{{worker_id}}/benefits
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-benefits
        method: GET
Open in Framework → View in Fleet → workday-benefits-enrollment-lookup.yml

When a telehealth visit is scheduled, creates a Zoom meeting, sends the link to the patient via Microsoft Teams, and logs the visit in Salesforce.

naftiko: '0.5'
info:
  label: Telehealth Visit Orchestrator
  description: When a telehealth visit is scheduled, creates a Zoom meeting, sends the link to the patient via Microsoft Teams, and logs the visit in Salesforce.
  tags:
  - telehealth
  - patient-care
  - zoom
  - microsoft-teams
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: telehealth
    port: 8080
    tools:
    - name: setup-telehealth-visit
      description: Given patient and provider details, create a Zoom meeting, notify the patient, and log the visit.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: patient_email
        in: body
        type: string
        description: The patient email address.
      - name: provider_name
        in: body
        type: string
        description: The provider name.
      - name: visit_time
        in: body
        type: string
        description: The scheduled visit time in ISO 8601 format.
      steps:
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: Telehealth Visit - {{provider_name}}
          start_time: '{{visit_time}}'
          duration: 30
      - name: notify-patient
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{patient_email}}'
          text: 'Your telehealth visit with {{provider_name}} is scheduled for {{visit_time}}. Join here: {{create-meeting.join_url}}'
      - name: log-visit
        type: call
        call: salesforce.create-visit-record
        with:
          patient_id: '{{patient_id}}'
          provider_name: '{{provider_name}}'
          visit_time: '{{visit_time}}'
          zoom_link: '{{create-meeting.join_url}}'
          visit_type: telehealth
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: 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
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: visit-records
      path: /sobjects/Visit__c
      operations:
      - name: create-visit-record
        method: POST
Open in Framework → View in Fleet → telehealth-visit-orchestrator.yml

Coordinates flu season preparedness by verifying vaccine inventory in Oracle, scheduling vaccination clinics, and launching member outreach via MailChimp.

naftiko: '0.5'
info:
  label: Flu Season Preparedness Orchestrator
  description: Coordinates flu season preparedness by verifying vaccine inventory in Oracle, scheduling vaccination clinics, and launching member outreach via MailChimp.
  tags:
  - immunization
  - flu-season
  - oracle
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: flu-preparedness
    port: 8080
    tools:
    - name: prepare-flu-season
      description: Coordinate flu season preparedness activities.
      inputParameters:
      - name: facility_code
        in: body
        type: string
        description: The facility code.
      - name: target_date
        in: body
        type: string
        description: Target start date for flu clinics.
      steps:
      - name: check-vaccine-inventory
        type: call
        call: oracle.get-inventory
        with:
          item_number: FLU-VAX-2026
          organization_code: '{{facility_code}}'
      - name: schedule-clinics
        type: call
        call: scheduling.create-clinic-sessions
        with:
          facility_code: '{{facility_code}}'
          start_date: '{{target_date}}'
          vaccine_available: '{{check-vaccine-inventory.quantity_on_hand}}'
      - name: launch-outreach
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: flu-season-{{facility_code}}
          template: flu_vaccine_reminder
          schedule_date: '{{target_date}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://kp-oracle.kaiserpermanente.org/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: inventory
      path: /inventoryBalances
      operations:
      - name: get-inventory
        method: GET
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: clinics
      path: /clinic-sessions
      operations:
      - name: create-clinic-sessions
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → flu-season-preparedness-orchestrator.yml

When a new provider application is received in Salesforce, verifies license with an external registry, creates a credentialing case in ServiceNow, and updates the provider record.

naftiko: '0.5'
info:
  label: Provider Credentialing Workflow
  description: When a new provider application is received in Salesforce, verifies license with an external registry, creates a credentialing case in ServiceNow, and updates the provider record.
  tags:
  - credentialing
  - provider-management
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: provider-credentialing
    port: 8080
    tools:
    - name: process-credentialing
      description: Given a provider application ID, verify license, create credentialing case, and update provider record.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Salesforce provider application record ID.
      - name: license_number
        in: body
        type: string
        description: The provider's medical license number.
      - name: state
        in: body
        type: string
        description: The state of licensure.
      steps:
      - name: get-application
        type: call
        call: salesforce.get-application
        with:
          application_id: '{{application_id}}'
      - name: create-case
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Credentialing: {{get-application.provider_name}}'
          category: credentialing
          license_number: '{{license_number}}'
          state: '{{state}}'
      - name: update-provider
        type: call
        call: salesforce.update-provider
        with:
          provider_id: '{{get-application.provider_id}}'
          credentialing_case: '{{create-case.number}}'
          status: in_review
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: applications
      path: /sobjects/ProviderApplication__c/{{application_id}}
      inputParameters:
      - name: application_id
        in: path
      operations:
      - name: get-application
        method: GET
    - name: providers
      path: /sobjects/Provider__c/{{provider_id}}
      inputParameters:
      - name: provider_id
        in: path
      operations:
      - name: update-provider
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → provider-credentialing-workflow.yml

Retrieves clinical or financial data from Oracle Cloud and generates a formatted Microsoft Excel report stored in SharePoint.

naftiko: '0.5'
info:
  label: Microsoft Excel Report Generator
  description: Retrieves clinical or financial data from Oracle Cloud and generates a formatted Microsoft Excel report stored in SharePoint.
  tags:
  - reporting
  - microsoft-excel
  - oracle-cloud
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: report-generation
    port: 8080
    tools:
    - name: generate-excel-report
      description: Given a report type and date range, pull data from Oracle Cloud and create an Excel report in SharePoint.
      inputParameters:
      - name: report_type
        in: body
        type: string
        description: The report type (e.g., claims-summary, utilization, financial).
      - name: start_date
        in: body
        type: string
        description: Report start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Report end date in YYYY-MM-DD format.
      steps:
      - name: extract-data
        type: call
        call: oracle.get-report-data
        with:
          report_type: '{{report_type}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: create-workbook
        type: call
        call: sharepoint.upload-file
        with:
          site_id: kp-reports
          folder_path: Reports/{{report_type}}
          file_name: '{{report_type}}_{{start_date}}_{{end_date}}.xlsx'
          content: '{{extract-data.results}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://kp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: reports
      path: /reports/{{report_type}}?startDate={{start_date}}&endDate={{end_date}}
      inputParameters:
      - name: report_type
        in: path
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-report-data
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → microsoft-excel-report-generator.yml

Performs medication reconciliation at transitions of care by pulling current meds from the EHR, cross-referencing the pharmacy system, flagging interactions, and creating reconciliation tasks in Salesforce.

naftiko: '0.5'
info:
  label: Medication Reconciliation Orchestrator
  description: Performs medication reconciliation at transitions of care by pulling current meds from the EHR, cross-referencing the pharmacy system, flagging interactions, and creating reconciliation tasks in Salesforce.
  tags:
  - pharmacy
  - medication-safety
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: med-reconciliation
    port: 8080
    tools:
    - name: reconcile-medications
      description: Reconcile a patient's medications across EHR and pharmacy systems.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: pharmacist_email
        in: body
        type: string
        description: The assigned pharmacist email.
      steps:
      - name: get-ehr-meds
        type: call
        call: epic.get-medications
        with:
          patient_id: '{{patient_id}}'
      - name: get-pharmacy-meds
        type: call
        call: pharmacy.get-dispensed
        with:
          patient_id: '{{patient_id}}'
      - name: check-interactions
        type: call
        call: druginteraction.check
        with:
          medications: '{{get-ehr-meds.medication_list}}'
      - name: create-reconciliation-task
        type: call
        call: salesforce.create-task
        with:
          subject: Medication reconciliation required for {{patient_id}}
          description: 'EHR meds: {{get-ehr-meds.count}}, Pharmacy records: {{get-pharmacy-meds.count}}, Interactions found: {{check-interactions.interaction_count}}'
          assigned_to: '{{pharmacist_email}}'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: medications
      path: /MedicationRequest?patient={{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-medications
        method: GET
  - type: http
    namespace: pharmacy
    baseUri: https://kp-pharmacy.kaiserpermanente.org/api/v1
    authentication:
      type: apiKey
      header: X-API-Key
      key: $secrets.pharmacy_api_key
    resources:
    - name: dispensed
      path: /patients/{{patient_id}}/dispensed
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-dispensed
        method: GET
  - type: http
    namespace: druginteraction
    baseUri: https://kp-clinical.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.clinical_api_token
    resources:
    - name: interactions
      path: /drug-interactions/check
      operations:
      - name: check
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.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
Open in Framework → View in Fleet → medication-reconciliation-orchestrator.yml

Tracks prenatal care milestones by pulling pregnancy data from the EHR, scheduling overdue appointments, and sending reminder notifications via WhatsApp.

naftiko: '0.5'
info:
  label: Maternal Health Prenatal Tracker
  description: Tracks prenatal care milestones by pulling pregnancy data from the EHR, scheduling overdue appointments, and sending reminder notifications via WhatsApp.
  tags:
  - maternal-health
  - prenatal
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: prenatal-care
    port: 8080
    tools:
    - name: track-prenatal-milestones
      description: Check prenatal milestones for a patient and schedule overdue visits.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: phone_number
        in: body
        type: string
        description: The patient phone number for notifications.
      steps:
      - name: get-pregnancy-record
        type: call
        call: epic.get-pregnancy
        with:
          patient_id: '{{patient_id}}'
      - name: schedule-overdue
        type: call
        call: scheduling.create-appointment
        with:
          patient_id: '{{patient_id}}'
          visit_type: '{{get-pregnancy-record.next_milestone}}'
          provider_npi: '{{get-pregnancy-record.ob_provider_npi}}'
      - name: send-reminder
        type: call
        call: whatsapp.send-message
        with:
          to: '{{phone_number}}'
          message: 'Your next prenatal visit ({{get-pregnancy-record.next_milestone}}) has been scheduled. Appointment ID: {{schedule-overdue.appointment_id}}.'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: pregnancy
      path: /Condition?patient={{patient_id}}&category=pregnancy
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-pregnancy
        method: GET
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: appointments
      path: /appointments
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → maternal-health-prenatal-tracker.yml

Retrieves a travel expense report from SAP Concur by report ID, returning total amount, approval status, and expense line items.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Lookup
  description: Retrieves a travel expense report from SAP Concur by report ID, returning total amount, approval status, and expense line items.
  tags:
  - finance
  - travel
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: travel-expenses
    port: 8080
    tools:
    - name: get-expense-report
      description: Look up a SAP Concur expense report by report ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      call: concur.get-report
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: total_amount
        type: string
        mapping: $.Total
      - name: approval_status
        type: string
        mapping: $.ApprovalStatusName
      - name: submit_date
        type: string
        mapping: $.SubmitDate
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-travel-expense-lookup.yml

Triggers a data extract refresh for operational metrics dashboards in Tableau Server.

naftiko: '0.5'
info:
  label: Tableau Operational Metrics Refresh
  description: Triggers a data extract refresh for operational metrics dashboards in Tableau Server.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: tableau-ops
    port: 8080
    tools:
    - name: refresh-ops-dashboard
      description: Trigger a Tableau data extract refresh for an operational dashboard.
      inputParameters:
      - name: datasource_id
        in: body
        type: string
        description: The Tableau datasource ID.
      call: tableau.refresh-extract
      with:
        datasource_id: '{{datasource_id}}'
      outputParameters:
      - name: job_id
        type: string
        mapping: $.job.id
      - name: status
        type: string
        mapping: $.job.status
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://kp-tableau.kaiserpermanente.org/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/kp-site/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-extract
        method: POST
Open in Framework → View in Fleet → tableau-operational-metrics-refresh.yml

Monitors ED census from the real-time dashboard, triggers surge protocols in ServiceNow, reassigns staff in the scheduling system, and alerts leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Emergency Department Surge Orchestrator
  description: Monitors ED census from the real-time dashboard, triggers surge protocols in ServiceNow, reassigns staff in the scheduling system, and alerts leadership via Microsoft Teams.
  tags:
  - emergency
  - surge
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ed-surge
    port: 8080
    tools:
    - name: activate-surge-protocol
      description: Activate ED surge protocol based on census thresholds.
      inputParameters:
      - name: facility_code
        in: body
        type: string
        description: The facility code.
      - name: surge_level
        in: body
        type: string
        description: The surge level (1-3).
      - name: leadership_email
        in: body
        type: string
        description: Leadership group email.
      steps:
      - name: get-census
        type: call
        call: dashboard.get-ed-census
        with:
          facility_code: '{{facility_code}}'
      - name: create-surge-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: ED Surge Level {{surge_level}} - {{facility_code}}
          urgency: '1'
          description: 'ED census: {{get-census.current_count}}/{{get-census.capacity}}. Surge level {{surge_level}} activated.'
      - name: reassign-staff
        type: call
        call: scheduling.activate-surge-staff
        with:
          facility_code: '{{facility_code}}'
          surge_level: '{{surge_level}}'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{leadership_email}}'
          text: 'ED SURGE ALERT: Level {{surge_level}} at {{facility_code}}. Census: {{get-census.current_count}}/{{get-census.capacity}}. Incident: {{create-surge-incident.number}}. Additional staff deployed: {{reassign-staff.staff_count}}.'
  consumes:
  - type: http
    namespace: dashboard
    baseUri: https://kp-rtdashboard.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.dashboard_token
    resources:
    - name: census
      path: /ed/census/{{facility_code}}
      inputParameters:
      - name: facility_code
        in: path
      operations:
      - name: get-ed-census
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/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: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: surge
      path: /surge/activate
      operations:
      - name: activate-surge-staff
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → emergency-department-surge-orchestrator.yml

When a claim is submitted, validates member eligibility in SAP, applies clinical edits from Oracle Cloud, adjudicates in SAP, and notifies the billing team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Claims Adjudication Pipeline
  description: When a claim is submitted, validates member eligibility in SAP, applies clinical edits from Oracle Cloud, adjudicates in SAP, and notifies the billing team via Microsoft Teams.
  tags:
  - claims
  - adjudication
  - sap
  - oracle-cloud
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: claims-adjudication
    port: 8080
    tools:
    - name: adjudicate-claim
      description: Given a claim submission, run eligibility, clinical edits, and adjudication, then notify billing.
      inputParameters:
      - name: claim_id
        in: body
        type: string
        description: The claim identifier.
      - name: member_id
        in: body
        type: string
        description: The member ID.
      - name: service_date
        in: body
        type: string
        description: The date of service.
      - name: procedure_codes
        in: body
        type: string
        description: Comma-separated CPT procedure codes.
      steps:
      - name: check-eligibility
        type: call
        call: sap.check-eligibility
        with:
          member_id: '{{member_id}}'
          date: '{{service_date}}'
      - name: apply-edits
        type: call
        call: oracle.run-clinical-edits
        with:
          claim_id: '{{claim_id}}'
          procedure_codes: '{{procedure_codes}}'
      - name: process-adjudication
        type: call
        call: sap.adjudicate-claim
        with:
          claim_id: '{{claim_id}}'
          eligibility_status: '{{check-eligibility.IsEligible}}'
          edit_results: '{{apply-edits.results}}'
      - name: notify-billing
        type: call
        call: msteams.send-message
        with:
          channel_id: claims-billing
          text: 'Claim {{claim_id}} adjudicated. Status: {{process-adjudication.status}}. Amount: {{process-adjudication.paid_amount}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kp-claims.sap.com/sap/opu/odata/sap/CLAIMS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: eligibility
      path: /Eligibility(MemberId='{{member_id}}',Date='{{date}}')
      inputParameters:
      - name: member_id
        in: path
      - name: date
        in: path
      operations:
      - name: check-eligibility
        method: GET
    - name: adjudication
      path: /Claims('{{claim_id}}')/Adjudicate
      inputParameters:
      - name: claim_id
        in: path
      operations:
      - name: adjudicate-claim
        method: POST
  - type: http
    namespace: oracle
    baseUri: https://kp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: clinical-edits
      path: /clinicalEdits
      operations:
      - name: run-clinical-edits
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → claims-adjudication-pipeline.yml

When a primary care provider creates a referral in Salesforce, validates insurance eligibility in SAP, finds an available specialist in Workday, and notifies the patient via Microsoft Teams.

naftiko: '0.5'
info:
  label: Referral Processing Pipeline
  description: When a primary care provider creates a referral in Salesforce, validates insurance eligibility in SAP, finds an available specialist in Workday, and notifies the patient via Microsoft Teams.
  tags:
  - patient-care
  - referrals
  - salesforce
  - sap
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: referral-management
    port: 8080
    tools:
    - name: process-referral
      description: Given a referral ID, validate insurance coverage, find a specialist, and notify the patient.
      inputParameters:
      - name: referral_id
        in: body
        type: string
        description: The Salesforce referral record ID.
      - name: patient_email
        in: body
        type: string
        description: The patient email for notification.
      - name: specialty
        in: body
        type: string
        description: The medical specialty required.
      steps:
      - name: get-referral
        type: call
        call: salesforce.get-referral
        with:
          referral_id: '{{referral_id}}'
      - name: check-eligibility
        type: call
        call: sap.check-eligibility
        with:
          member_id: '{{get-referral.member_id}}'
          service_type: '{{specialty}}'
      - name: find-specialist
        type: call
        call: workday.search-providers
        with:
          specialty: '{{specialty}}'
          region: '{{get-referral.region}}'
      - name: notify-patient
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{patient_email}}'
          text: 'Your referral to {{specialty}} has been approved. Specialist: {{find-specialist.provider_name}}. Please call {{find-specialist.phone}} to schedule.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: referrals
      path: /sobjects/Referral__c/{{referral_id}}
      inputParameters:
      - name: referral_id
        in: path
      operations:
      - name: get-referral
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kp-claims.sap.com/sap/opu/odata/sap/ELIGIBILITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: eligibility
      path: /Eligibility(MemberId='{{member_id}}',ServiceType='{{service_type}}')
      inputParameters:
      - name: member_id
        in: path
      - name: service_type
        in: path
      operations:
      - name: check-eligibility
        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: providers
      path: /workers?specialty={{specialty}}&region={{region}}
      inputParameters:
      - name: specialty
        in: query
      - name: region
        in: query
      operations:
      - name: search-providers
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → referral-processing-pipeline.yml

Manages claim denials by pulling denial data from SAP, categorizing by denial reason in Databricks, creating appeal tasks in Salesforce, and reporting trends in Power BI.

naftiko: '0.5'
info:
  label: Revenue Cycle Denials Management Pipeline
  description: Manages claim denials by pulling denial data from SAP, categorizing by denial reason in Databricks, creating appeal tasks in Salesforce, and reporting trends in Power BI.
  tags:
  - revenue-cycle
  - denials
  - sap
  - azure-databricks
  - salesforce
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: denials-management
    port: 8080
    tools:
    - name: process-denial-batch
      description: Process a batch of claim denials and create appeal workflows.
      inputParameters:
      - name: batch_date
        in: body
        type: string
        description: The denial batch date in YYYY-MM-DD format.
      - name: payer_code
        in: body
        type: string
        description: The payer code to filter denials.
      steps:
      - name: get-denials
        type: call
        call: sap.get-denials
        with:
          batch_date: '{{batch_date}}'
          payer_code: '{{payer_code}}'
      - name: categorize-denials
        type: call
        call: databricks.run-query
        with:
          query: SELECT denial_reason, COUNT(*) as count, SUM(amount) as total FROM denials WHERE batch_date = '{{batch_date}}' GROUP BY denial_reason
      - name: create-appeal-tasks
        type: call
        call: salesforce.bulk-create
        with:
          object: DenialAppeal__c
          records: '{{get-denials.appealable_claims}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: denial-trends
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kp-sap.kaiserpermanente.org/sap/opu/odata/sap/CLAIMS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: denials
      path: /ClaimDenials
      operations:
      - name: get-denials
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: bulk
      path: /composite/sobjects
      operations:
      - name: bulk-create
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → revenue-cycle-denials-management-pipeline.yml

Retrieves a patient case from Salesforce by case number, returning status, subject, priority, and assigned owner.

naftiko: '0.5'
info:
  label: Salesforce Patient Case Lookup
  description: Retrieves a patient case from Salesforce by case number, returning status, subject, priority, and assigned owner.
  tags:
  - patient-care
  - case-management
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: patient-cases
    port: 8080
    tools:
    - name: get-patient-case
      description: Look up a patient case in Salesforce by case number.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: The Salesforce case number.
      call: salesforce.get-case
      with:
        case_number: '{{case_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: subject
        type: string
        mapping: $.Subject
      - name: priority
        type: string
        mapping: $.Priority
      - name: owner
        type: string
        mapping: $.Owner.Name
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /query/?q=SELECT+Id,Status,Subject,Priority,Owner.Name+FROM+Case+WHERE+CaseNumber='{{case_number}}'
      inputParameters:
      - name: case_number
        in: query
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → salesforce-patient-case-lookup.yml

Checks employee training completion status in Pluralsight, flags overdue trainings in ServiceNow, and notifies managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Compliance Training Tracker Pipeline
  description: Checks employee training completion status in Pluralsight, flags overdue trainings in ServiceNow, and notifies managers via Microsoft Teams.
  tags:
  - compliance
  - training
  - pluralsight
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: check-training-compliance
      description: Given a department, check training completion, flag overdue employees, and notify managers.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to check training compliance for.
      - name: training_course
        in: body
        type: string
        description: The required training course name.
      - name: manager_email
        in: body
        type: string
        description: The department manager email.
      steps:
      - name: check-completion
        type: call
        call: pluralsight.get-team-progress
        with:
          team: '{{department}}'
          course: '{{training_course}}'
      - name: flag-overdue
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Overdue training: {{training_course}} in {{department}}'
          category: compliance
          description: '{{check-completion.overdue_count}} employees overdue for {{training_course}} in {{department}}.'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_email}}'
          text: 'Training compliance alert for {{department}}: {{check-completion.overdue_count}} employees overdue for {{training_course}}. ServiceNow ticket: {{flag-overdue.number}}.'
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: team-progress
      path: /teams/{{team}}/courses/{{course}}/progress
      inputParameters:
      - name: team
        in: path
      - name: course
        in: path
      operations:
      - name: get-team-progress
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-training-tracker-pipeline.yml

Identifies diabetic patients with poor glycemic control from Databricks, enrolls them in education programs via Salesforce, and sends personalized tips via MailChimp.

naftiko: '0.5'
info:
  label: Diabetes Management Outreach Pipeline
  description: Identifies diabetic patients with poor glycemic control from Databricks, enrolls them in education programs via Salesforce, and sends personalized tips via MailChimp.
  tags:
  - diabetes
  - chronic-disease
  - azure-databricks
  - salesforce
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: diabetes-outreach
    port: 8080
    tools:
    - name: launch-diabetes-outreach
      description: Launch targeted outreach for diabetic patients with elevated A1C.
      inputParameters:
      - name: a1c_threshold
        in: body
        type: number
        description: A1C threshold for intervention (e.g., 9.0).
      - name: region_code
        in: body
        type: string
        description: The Kaiser region code.
      steps:
      - name: identify-patients
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM diabetic_patients WHERE latest_a1c >= {{a1c_threshold}} AND region = '{{region_code}}'
      - name: enroll-in-program
        type: call
        call: salesforce.bulk-create
        with:
          object: ProgramEnrollment__c
          records: '{{identify-patients.patient_ids}}'
          program: diabetes_self_management
      - name: send-education-campaign
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: diabetes-management
          segment: '{{identify-patients.email_list}}'
          template: diabetes_tips
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: bulk
      path: /composite/sobjects
      operations:
      - name: bulk-create
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → diabetes-management-outreach-pipeline.yml

Checks a member's insurance eligibility and benefit details in SAP for a given service type and date of service.

naftiko: '0.5'
info:
  label: Member Eligibility Verification
  description: Checks a member's insurance eligibility and benefit details in SAP for a given service type and date of service.
  tags:
  - claims
  - eligibility
  - sap
capability:
  exposes:
  - type: mcp
    namespace: eligibility
    port: 8080
    tools:
    - name: verify-eligibility
      description: Verify a member's insurance eligibility for a specific service type and date.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The health plan member ID.
      - name: service_type
        in: body
        type: string
        description: The type of service to verify (e.g., inpatient, outpatient, lab).
      - name: date_of_service
        in: body
        type: string
        description: The date of service in YYYY-MM-DD format.
      call: sap.check-eligibility
      with:
        member_id: '{{member_id}}'
        service_type: '{{service_type}}'
        date: '{{date_of_service}}'
      outputParameters:
      - name: eligible
        type: string
        mapping: $.d.IsEligible
      - name: copay
        type: string
        mapping: $.d.CopayAmount
      - name: deductible_remaining
        type: string
        mapping: $.d.DeductibleRemaining
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kp-claims.sap.com/sap/opu/odata/sap/ELIGIBILITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: eligibility
      path: /Eligibility(MemberId='{{member_id}}',ServiceType='{{service_type}}',Date='{{date}}')
      inputParameters:
      - name: member_id
        in: path
      - name: service_type
        in: path
      - name: date
        in: path
      operations:
      - name: check-eligibility
        method: GET
Open in Framework → View in Fleet → member-eligibility-verification.yml

Manages transitions to post-acute care facilities by verifying SNF availability, creating referral packages in SharePoint, transferring records via the health information exchange, and tracking in Salesforce.

naftiko: '0.5'
info:
  label: Post-Acute Care Transition Pipeline
  description: Manages transitions to post-acute care facilities by verifying SNF availability, creating referral packages in SharePoint, transferring records via the health information exchange, and tracking in Salesforce.
  tags:
  - care-transitions
  - post-acute
  - sharepoint
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: post-acute-transition
    port: 8080
    tools:
    - name: coordinate-post-acute-transition
      description: Coordinate patient transition to post-acute care facility.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: facility_type
        in: body
        type: string
        description: Post-acute care facility type (SNF, rehab, LTACH).
      - name: target_facility
        in: body
        type: string
        description: Target facility name.
      steps:
      - name: check-availability
        type: call
        call: hie.check-facility-beds
        with:
          facility_name: '{{target_facility}}'
          facility_type: '{{facility_type}}'
      - name: create-referral-package
        type: call
        call: sharepoint.create-document
        with:
          site_id: care-transitions
          folder_path: Referrals/{{patient_id}}/{{target_facility}}
          template: post_acute_referral
      - name: transfer-records
        type: call
        call: hie.send-ccd
        with:
          patient_id: '{{patient_id}}'
          destination: '{{target_facility}}'
      - name: track-transition
        type: call
        call: salesforce.create-transition-record
        with:
          patient_id: '{{patient_id}}'
          destination: '{{target_facility}}'
          facility_type: '{{facility_type}}'
          referral_url: '{{create-referral-package.url}}'
  consumes:
  - type: http
    namespace: hie
    baseUri: https://kp-hie.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.hie_token
    resources:
    - name: facilities
      path: /facilities/availability
      operations:
      - name: check-facility-beds
        method: GET
    - name: records
      path: /ccd/send
      operations:
      - name: send-ccd
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: transitions
      path: /sobjects/CareTransition__c
      operations:
      - name: create-transition-record
        method: POST
Open in Framework → View in Fleet → post-acute-care-transition-pipeline.yml

Triggers a refresh of the clinical outcomes Power BI dataset to ensure dashboards reflect the latest patient data.

naftiko: '0.5'
info:
  label: Power BI Clinical Dashboard Refresh
  description: Triggers a refresh of the clinical outcomes Power BI dataset to ensure dashboards reflect the latest patient data.
  tags:
  - analytics
  - clinical
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: clinical-analytics
    port: 8080
    tools:
    - name: refresh-clinical-dashboard
      description: Trigger a Power BI dataset refresh for the clinical outcomes dashboard.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset identifier.
      call: powerbi.refresh-dataset
      with:
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-clinical-dashboard-refresh.yml

Retrieves a payroll summary from ADP for a given pay period, including gross pay, deductions, and net pay.

naftiko: '0.5'
info:
  label: ADP Payroll Summary Lookup
  description: Retrieves a payroll summary from ADP for a given pay period, including gross pay, deductions, and net pay.
  tags:
  - hr
  - payroll
  - adp
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Look up payroll summary from ADP for a given employee and pay period.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The ADP employee ID.
      - name: pay_period
        in: body
        type: string
        description: The pay period identifier (e.g., 2025-PP24).
      call: adp.get-payroll
      with:
        employee_id: '{{employee_id}}'
        pay_period: '{{pay_period}}'
      outputParameters:
      - name: gross_pay
        type: string
        mapping: $.payStatement.grossPayAmount
      - name: deductions
        type: string
        mapping: $.payStatement.totalDeductions
      - name: net_pay
        type: string
        mapping: $.payStatement.netPayAmount
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: pay-statements
      path: /workers/{{employee_id}}/pay-statements?payPeriod={{pay_period}}
      inputParameters:
      - name: employee_id
        in: path
      - name: pay_period
        in: query
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → adp-payroll-summary-lookup.yml

Retrieves a medical supply purchase order from SAP by PO number, returning vendor, total value, delivery status, and expected arrival date.

naftiko: '0.5'
info:
  label: Supply Chain Purchase Order Status
  description: Retrieves a medical supply purchase order from SAP by PO number, returning vendor, total value, delivery status, and expected arrival date.
  tags:
  - supply-chain
  - procurement
  - sap
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: get-supply-po
      description: Look up a medical supply purchase order in SAP by PO number.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      call: sap.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: vendor
        type: string
        mapping: $.d.Supplier.CompanyName
      - name: total_value
        type: string
        mapping: $.d.TotalAmount
      - name: delivery_status
        type: string
        mapping: $.d.DeliveryStatus
      - name: expected_date
        type: string
        mapping: $.d.ExpectedDeliveryDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kp-supply.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → supply-chain-purchase-order-status.yml

When a patient requests a prescription refill, validates the prescription in Oracle Cloud, checks pharmacy inventory in SAP, and sends a ready notification via Microsoft Teams.

naftiko: '0.5'
info:
  label: Prescription Refill Orchestrator
  description: When a patient requests a prescription refill, validates the prescription in Oracle Cloud, checks pharmacy inventory in SAP, and sends a ready notification via Microsoft Teams.
  tags:
  - pharmacy
  - patient-care
  - oracle-cloud
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pharmacy
    port: 8080
    tools:
    - name: process-refill
      description: Given a prescription ID and patient ID, validate the prescription, check pharmacy stock, and notify the patient when ready.
      inputParameters:
      - name: prescription_id
        in: body
        type: string
        description: The prescription identifier.
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: pharmacy_location
        in: body
        type: string
        description: The preferred pharmacy location code.
      steps:
      - name: validate-rx
        type: call
        call: oracle.get-prescription
        with:
          prescription_id: '{{prescription_id}}'
      - name: check-stock
        type: call
        call: sap.check-inventory
        with:
          medication_code: '{{validate-rx.medication_code}}'
          location: '{{pharmacy_location}}'
      - name: notify-patient
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{validate-rx.patient_email}}'
          text: 'Your prescription for {{validate-rx.medication_name}} is ready for pickup at {{pharmacy_location}}. Stock status: {{check-stock.availability}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://kp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: prescriptions
      path: /prescriptions/{{prescription_id}}
      inputParameters:
      - name: prescription_id
        in: path
      operations:
      - name: get-prescription
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kp-pharmacy.sap.com/sap/opu/odata/sap/INVENTORY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /Inventory(MedicationCode='{{medication_code}}',Location='{{location}}')
      inputParameters:
      - name: medication_code
        in: path
      - name: location
        in: path
      operations:
      - name: check-inventory
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → prescription-refill-orchestrator.yml

Creates a job posting on LinkedIn for physician recruitment, tracking the post in Salesforce.

naftiko: '0.5'
info:
  label: LinkedIn Provider Recruitment Post
  description: Creates a job posting on LinkedIn for physician recruitment, tracking the post in Salesforce.
  tags:
  - recruitment
  - linkedin
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: provider-recruitment
    port: 8080
    tools:
    - name: post-physician-job
      description: Given job details, create a LinkedIn job post and log it in Salesforce.
      inputParameters:
      - name: job_title
        in: body
        type: string
        description: The physician job title.
      - name: specialty
        in: body
        type: string
        description: The medical specialty.
      - name: location
        in: body
        type: string
        description: The job location.
      - name: description
        in: body
        type: string
        description: The job description.
      steps:
      - name: create-post
        type: call
        call: linkedin.create-job-post
        with:
          title: '{{job_title}}'
          description: '{{description}}'
          location: '{{location}}'
      - name: log-posting
        type: call
        call: salesforce.create-job-record
        with:
          title: '{{job_title}}'
          specialty: '{{specialty}}'
          location: '{{location}}'
          linkedin_post_id: '{{create-post.post_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-posts
      path: /simpleJobPostings
      operations:
      - name: create-job-post
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: job-records
      path: /sobjects/JobPosting__c
      operations:
      - name: create-job-record
        method: POST
Open in Framework → View in Fleet → linkedin-provider-recruitment-post.yml

Reads staffing data from a Google Sheets spreadsheet used for department-level nurse and physician staffing ratios.

naftiko: '0.5'
info:
  label: Google Sheets Staffing Report
  description: Reads staffing data from a Google Sheets spreadsheet used for department-level nurse and physician staffing ratios.
  tags:
  - staffing
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: staffing
    port: 8080
    tools:
    - name: get-staffing-data
      description: Retrieve staffing data from a Google Sheet by spreadsheet ID and range.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      - name: range
        in: body
        type: string
        description: The cell range to read (e.g., Sheet1!A1:F50).
      call: gsheets.get-range
      with:
        spreadsheet_id: '{{spreadsheet_id}}'
        range: '{{range}}'
      outputParameters:
      - name: values
        type: array
        mapping: $.values
  consumes:
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: get-range
        method: GET
Open in Framework → View in Fleet → google-sheets-staffing-report.yml

Manages provider peer review by pulling case data from the EHR, assigning reviewers in Salesforce, creating review documents in SharePoint, and tracking completion in Jira.

naftiko: '0.5'
info:
  label: Provider Peer Review Orchestrator
  description: Manages provider peer review by pulling case data from the EHR, assigning reviewers in Salesforce, creating review documents in SharePoint, and tracking completion in Jira.
  tags:
  - quality
  - peer-review
  - salesforce
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: peer-review
    port: 8080
    tools:
    - name: initiate-peer-review
      description: Initiate a provider peer review workflow.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The clinical case identifier.
      - name: provider_npi
        in: body
        type: string
        description: The provider NPI under review.
      - name: reviewer_email
        in: body
        type: string
        description: The assigned reviewer email.
      steps:
      - name: get-case-data
        type: call
        call: epic.get-encounter
        with:
          case_id: '{{case_id}}'
      - name: assign-reviewer
        type: call
        call: salesforce.create-review-assignment
        with:
          case_id: '{{case_id}}'
          provider_npi: '{{provider_npi}}'
          reviewer_email: '{{reviewer_email}}'
      - name: create-review-doc
        type: call
        call: sharepoint.create-document
        with:
          site_id: quality-management
          folder_path: PeerReviews/{{provider_npi}}/{{case_id}}
          template: peer_review_form
      - name: create-tracking-issue
        type: call
        call: jira.create-issue
        with:
          project: QUALITY
          summary: 'Peer review: {{provider_npi}} - Case {{case_id}}'
          assignee: '{{reviewer_email}}'
          description: 'Case summary: {{get-case-data.summary}}. Review document: {{create-review-doc.url}}'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: encounters
      path: /Encounter/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-encounter
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: reviews
      path: /sobjects/PeerReview__c
      operations:
      - name: create-review-assignment
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: jira
    baseUri: https://kaiserpermanente.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → provider-peer-review-orchestrator.yml

Prepares for scheduled surgeries by verifying pre-op labs in the EHR, confirming equipment availability in Oracle, notifying the surgical team via Teams, and creating the pre-op checklist in SharePoint.

naftiko: '0.5'
info:
  label: Surgical Scheduling Prep Orchestrator
  description: Prepares for scheduled surgeries by verifying pre-op labs in the EHR, confirming equipment availability in Oracle, notifying the surgical team via Teams, and creating the pre-op checklist in SharePoint.
  tags:
  - surgery
  - scheduling
  - oracle
  - microsoft-teams
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: surgical-prep
    port: 8080
    tools:
    - name: prepare-surgery
      description: Orchestrate pre-surgical preparation across multiple systems.
      inputParameters:
      - name: surgery_id
        in: body
        type: string
        description: The scheduled surgery identifier.
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: surgical_team_email
        in: body
        type: string
        description: Surgical team distribution list email.
      steps:
      - name: verify-preop-labs
        type: call
        call: epic.get-lab-results
        with:
          patient_id: '{{patient_id}}'
          category: pre-operative
      - name: check-equipment
        type: call
        call: oracle.check-equipment
        with:
          surgery_id: '{{surgery_id}}'
      - name: create-checklist
        type: call
        call: sharepoint.create-document
        with:
          site_id: surgical-services
          folder_path: PreOpChecklists/{{surgery_id}}
          template: preop_checklist
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{surgical_team_email}}'
          text: 'Surgery {{surgery_id}} prep complete. Pre-op labs: {{verify-preop-labs.status}}. Equipment: {{check-equipment.status}}. Checklist: {{create-checklist.url}}.'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: labs
      path: /DiagnosticReport?patient={{patient_id}}&category={{category}}
      inputParameters:
      - name: patient_id
        in: path
      - name: category
        in: path
      operations:
      - name: get-lab-results
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://kp-oracle.kaiserpermanente.org/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: equipment
      path: /surgicalEquipment/{{surgery_id}}
      inputParameters:
      - name: surgery_id
        in: path
      operations:
      - name: check-equipment
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → surgical-scheduling-prep-orchestrator.yml

Retrieves a Tableau dashboard embed URL for a specific clinical workbook, used to embed dashboards in internal portals.

naftiko: '0.5'
info:
  label: Tableau Clinical Dashboard Link
  description: Retrieves a Tableau dashboard embed URL for a specific clinical workbook, used to embed dashboards in internal portals.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: tableau-dashboards
    port: 8080
    tools:
    - name: get-dashboard-url
      description: Retrieve the embed URL for a Tableau clinical dashboard by workbook name.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: The Tableau workbook name.
      call: tableau.get-workbook
      with:
        workbook_name: '{{workbook_name}}'
      outputParameters:
      - name: embed_url
        type: string
        mapping: $.workbook.contentUrl
      - name: updated_at
        type: string
        mapping: $.workbook.updatedAt
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://kp-tableau.kaiserpermanente.org/api/3.14
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}
      inputParameters:
      - name: workbook_name
        in: query
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-clinical-dashboard-link.yml

Retrieves a Jira issue by key from the clinical IT project, returning summary, status, assignee, and priority.

naftiko: '0.5'
info:
  label: Jira Clinical IT Task Lookup
  description: Retrieves a Jira issue by key from the clinical IT project, returning summary, status, assignee, and priority.
  tags:
  - it-operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: clinical-it
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key from the clinical IT project.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g., CLINIT-1234).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://kaiserpermanente.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-clinical-it-task-lookup.yml

Retrieves an employee's current time-off balance from Workday, including PTO, sick leave, and floating holidays.

naftiko: '0.5'
info:
  label: Workday Time Off Balance Lookup
  description: Retrieves an employee's current time-off balance from Workday, including PTO, sick leave, and floating holidays.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: time-off
    port: 8080
    tools:
    - name: get-time-off-balance
      description: Look up time-off balances by employee ID. Returns PTO, sick, and holiday balances.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-balance
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: pto_balance
        type: number
        mapping: $.timeOffBalances[?(@.type=='PTO')].balance
      - name: sick_balance
        type: number
        mapping: $.timeOffBalances[?(@.type=='Sick')].balance
      - name: holiday_balance
        type: number
        mapping: $.timeOffBalances[?(@.type=='FloatingHoliday')].balance
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kaiserpermanente
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-off
      path: /workers/{{employee_id}}/timeOffBalance
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → workday-time-off-balance-lookup.yml

Coordinates patient transfers between facilities by verifying bed availability, creating transfer orders in the EHR, notifying the receiving care team via Teams, and updating the bed management system.

naftiko: '0.5'
info:
  label: Patient Transfer Coordination Pipeline
  description: Coordinates patient transfers between facilities by verifying bed availability, creating transfer orders in the EHR, notifying the receiving care team via Teams, and updating the bed management system.
  tags:
  - patient-care
  - transfers
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: patient-transfers
    port: 8080
    tools:
    - name: coordinate-transfer
      description: Orchestrate a patient transfer between Kaiser facilities.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: destination_facility
        in: body
        type: string
        description: The destination facility code.
      - name: transfer_reason
        in: body
        type: string
        description: The clinical reason for transfer.
      - name: receiving_team_email
        in: body
        type: string
        description: The receiving care team email.
      steps:
      - name: check-beds
        type: call
        call: bedmgmt.check-availability
        with:
          facility_code: '{{destination_facility}}'
          unit_type: '{{transfer_reason}}'
      - name: create-transfer-order
        type: call
        call: epic.create-transfer
        with:
          patient_id: '{{patient_id}}'
          destination: '{{destination_facility}}'
          reason: '{{transfer_reason}}'
          bed_assignment: '{{check-beds.bed_id}}'
      - name: notify-receiving-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{receiving_team_email}}'
          text: 'Incoming transfer: Patient {{patient_id}} to {{destination_facility}}. Bed {{check-beds.bed_id}}. Transfer order: {{create-transfer-order.order_id}}.'
      - name: update-bed-status
        type: call
        call: bedmgmt.assign-bed
        with:
          bed_id: '{{check-beds.bed_id}}'
          patient_id: '{{patient_id}}'
          status: pending_arrival
  consumes:
  - type: http
    namespace: bedmgmt
    baseUri: https://kp-bedmgmt.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.bedmgmt_token
    resources:
    - name: beds
      path: /beds
      operations:
      - name: check-availability
        method: GET
      - name: assign-bed
        method: PUT
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: transfers
      path: /ServiceRequest
      operations:
      - name: create-transfer
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-transfer-coordination-pipeline.yml

Processes palliative care referrals by verifying patient eligibility from the EHR, creating referral records in Salesforce, scheduling initial consults, and notifying the palliative care team.

naftiko: '0.5'
info:
  label: Palliative Care Referral Orchestrator
  description: Processes palliative care referrals by verifying patient eligibility from the EHR, creating referral records in Salesforce, scheduling initial consults, and notifying the palliative care team.
  tags:
  - palliative-care
  - referrals
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: palliative-referral
    port: 8080
    tools:
    - name: process-palliative-referral
      description: Process a palliative care referral across clinical systems.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: referring_provider_npi
        in: body
        type: string
        description: Referring provider NPI.
      - name: reason
        in: body
        type: string
        description: Reason for referral.
      steps:
      - name: verify-eligibility
        type: call
        call: epic.get-patient
        with:
          mrn: '{{patient_id}}'
      - name: create-referral
        type: call
        call: salesforce.create-referral
        with:
          patient_id: '{{patient_id}}'
          referring_provider: '{{referring_provider_npi}}'
          reason: '{{reason}}'
          type: palliative_care
      - name: schedule-consult
        type: call
        call: scheduling.create-appointment
        with:
          patient_id: '{{patient_id}}'
          visit_type: palliative_care_consult
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: palliative-care@kaiserpermanente.org
          text: 'New palliative care referral: Patient {{patient_id}}. Reason: {{reason}}. Consult scheduled: {{schedule-consult.appointment_id}}. Referral: {{create-referral.referral_id}}.'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: patients
      path: /Patient/{{mrn}}
      inputParameters:
      - name: mrn
        in: path
      operations:
      - name: get-patient
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: referrals
      path: /sobjects/Referral__c
      operations:
      - name: create-referral
        method: POST
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: appointments
      path: /appointments
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → palliative-care-referral-orchestrator.yml

When a provider requests prior authorization, retrieves clinical criteria from Oracle Cloud, checks benefit limits in SAP, creates the auth request in Salesforce, and notifies the utilization review team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Prior Authorization Workflow
  description: When a provider requests prior authorization, retrieves clinical criteria from Oracle Cloud, checks benefit limits in SAP, creates the auth request in Salesforce, and notifies the utilization review team via Microsoft Teams.
  tags:
  - claims
  - prior-authorization
  - oracle-cloud
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: prior-auth
    port: 8080
    tools:
    - name: submit-prior-auth
      description: Given a member ID, procedure code, and provider ID, process a prior authorization request across clinical and financial systems.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The health plan member ID.
      - name: procedure_code
        in: body
        type: string
        description: The CPT or HCPCS procedure code.
      - name: provider_id
        in: body
        type: string
        description: The requesting provider ID.
      - name: clinical_notes
        in: body
        type: string
        description: Supporting clinical documentation.
      steps:
      - name: get-criteria
        type: call
        call: oracle.get-auth-criteria
        with:
          procedure_code: '{{procedure_code}}'
      - name: check-benefits
        type: call
        call: sap.check-benefit-limits
        with:
          member_id: '{{member_id}}'
          procedure_code: '{{procedure_code}}'
      - name: create-auth
        type: call
        call: salesforce.create-auth-request
        with:
          member_id: '{{member_id}}'
          procedure_code: '{{procedure_code}}'
          provider_id: '{{provider_id}}'
          clinical_notes: '{{clinical_notes}}'
          criteria_met: '{{get-criteria.criteria_status}}'
          benefit_available: '{{check-benefits.available}}'
      - name: notify-ur-team
        type: call
        call: msteams.send-message
        with:
          channel_id: utilization-review
          text: 'New prior auth request {{create-auth.auth_number}} for member {{member_id}}, procedure {{procedure_code}}. Criteria met: {{get-criteria.criteria_status}}. Benefit available: {{check-benefits.available}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://kp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: auth-criteria
      path: /authorizationCriteria/{{procedure_code}}
      inputParameters:
      - name: procedure_code
        in: path
      operations:
      - name: get-auth-criteria
        method: GET
  - type: http
    namespace: sap
    baseUri: https://kp-claims.sap.com/sap/opu/odata/sap/BENEFITS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: benefit-limits
      path: /BenefitLimits(MemberId='{{member_id}}',ProcedureCode='{{procedure_code}}')
      inputParameters:
      - name: member_id
        in: path
      - name: procedure_code
        in: path
      operations:
      - name: check-benefit-limits
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: auth-requests
      path: /sobjects/PriorAuthorization__c
      operations:
      - name: create-auth-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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → prior-authorization-workflow.yml

Searches Confluence for clinical protocols and guidelines by keyword, returning page titles, URLs, and last updated dates.

naftiko: '0.5'
info:
  label: Confluence Clinical Protocol Search
  description: Searches Confluence for clinical protocols and guidelines by keyword, returning page titles, URLs, and last updated dates.
  tags:
  - clinical
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: clinical-knowledge
    port: 8080
    tools:
    - name: search-protocols
      description: Search Confluence for clinical protocols matching a keyword.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: The search keyword for clinical protocols.
      call: confluence.search
      with:
        cql: type=page AND space=CLINICAL AND text~'{{keyword}}'
      outputParameters:
      - name: results
        type: string
        mapping: $.results
      - name: total_size
        type: string
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://kaiserpermanente.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search?cql={{cql}}
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-clinical-protocol-search.yml

Retrieves the latest build status from Azure DevOps for a given pipeline, including build result, duration, and source branch.

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

Scores patients for 30-day readmission risk using Azure Machine Learning, creates preventive care tasks in Salesforce, and alerts the care transition team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Readmission Risk Prediction Pipeline
  description: Scores patients for 30-day readmission risk using Azure Machine Learning, creates preventive care tasks in Salesforce, and alerts the care transition team via Microsoft Teams.
  tags:
  - population-health
  - readmission
  - azure-machine-learning
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: readmission-prevention
    port: 8080
    tools:
    - name: assess-readmission-risk
      description: Given a patient ID, score readmission risk, create preventive tasks, and alert the care team.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: discharge_date
        in: body
        type: string
        description: The discharge date in YYYY-MM-DD format.
      steps:
      - name: score-risk
        type: call
        call: azureml.score
        with:
          model: readmission-risk-v3
          patient_id: '{{patient_id}}'
          discharge_date: '{{discharge_date}}'
      - name: create-tasks
        type: call
        call: salesforce.create-task
        with:
          subject: 'Readmission prevention: {{patient_id}}'
          description: 'Risk score: {{score-risk.risk_score}}. Recommended interventions: {{score-risk.interventions}}.'
          priority: '{{score-risk.priority}}'
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: care-transitions
          text: 'Readmission risk alert for patient {{patient_id}} (discharged {{discharge_date}}). Risk score: {{score-risk.risk_score}}. Task created: {{create-tasks.task_id}}.'
  consumes:
  - type: http
    namespace: azureml
    baseUri: https://kp-ml.eastus.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → readmission-risk-prediction-pipeline.yml

Retrieves application performance metrics from Dynatrace for a given service, including response time, error rate, and throughput.

naftiko: '0.5'
info:
  label: Dynatrace Application Health Check
  description: Retrieves application performance metrics from Dynatrace for a given service, including response time, error rate, and throughput.
  tags:
  - monitoring
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: app-monitoring
    port: 8080
    tools:
    - name: get-app-health
      description: Retrieve application health metrics from Dynatrace for a given service.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Dynatrace service name.
      call: dynatrace.get-service-metrics
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: response_time
        type: string
        mapping: $.result[0].data[0].values[0]
      - name: error_rate
        type: string
        mapping: $.result[1].data[0].values[0]
      - name: throughput
        type: string
        mapping: $.result[2].data[0].values[0]
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://kp.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query?metricSelector=builtin:service.response.time,builtin:service.errors.total.rate,builtin:service.requestCount.total&entitySelector=type(SERVICE),entityName({{service_name}})
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-service-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-application-health-check.yml

Extracts HEDIS quality measure data from Azure Databricks, generates a summary in Google Sheets, and distributes via Microsoft Teams to quality improvement teams.

naftiko: '0.5'
info:
  label: Quality Measure Reporting Pipeline
  description: Extracts HEDIS quality measure data from Azure Databricks, generates a summary in Google Sheets, and distributes via Microsoft Teams to quality improvement teams.
  tags:
  - quality
  - hedis
  - azure-databricks
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-reporting
    port: 8080
    tools:
    - name: generate-hedis-report
      description: Given a reporting period, extract HEDIS measures, generate a summary spreadsheet, and notify the quality team.
      inputParameters:
      - name: reporting_period
        in: body
        type: string
        description: The HEDIS reporting period (e.g., 2025-Q4).
      - name: measure_set
        in: body
        type: string
        description: The measure set to report (e.g., diabetes-care, preventive).
      steps:
      - name: extract-measures
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM hedis_measures WHERE period = '{{reporting_period}}' AND measure_set = '{{measure_set}}'
      - name: create-sheet
        type: call
        call: google-sheets.create-spreadsheet
        with:
          title: HEDIS Report - {{measure_set}} - {{reporting_period}}
          data: '{{extract-measures.results}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-improvement
          text: 'HEDIS report for {{measure_set}} ({{reporting_period}}) is ready: {{create-sheet.spreadsheet_url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets
      operations:
      - name: create-spreadsheet
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-measure-reporting-pipeline.yml

Monitors opioid prescribing patterns by querying prescription data from Databricks, flagging high-risk patterns, creating alerts in the EHR, and notifying the pain management team via Teams.

naftiko: '0.5'
info:
  label: Opioid Stewardship Monitoring Pipeline
  description: Monitors opioid prescribing patterns by querying prescription data from Databricks, flagging high-risk patterns, creating alerts in the EHR, and notifying the pain management team via Teams.
  tags:
  - opioid-stewardship
  - prescribing
  - azure-databricks
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: opioid-stewardship
    port: 8080
    tools:
    - name: monitor-opioid-prescribing
      description: Monitor opioid prescribing patterns and flag high-risk cases.
      inputParameters:
      - name: facility_code
        in: body
        type: string
        description: The facility code.
      - name: pain_mgmt_email
        in: body
        type: string
        description: Pain management team email.
      steps:
      - name: analyze-patterns
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM opioid_prescribing WHERE facility = '{{facility_code}}' AND risk_score >= 7 ORDER BY risk_score DESC
      - name: create-ehr-alerts
        type: call
        call: epic.create-clinical-alerts
        with:
          patient_ids: '{{analyze-patterns.high_risk_patients}}'
          alert_type: opioid_stewardship
      - name: notify-pain-management
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{pain_mgmt_email}}'
          text: 'Opioid stewardship alert for {{facility_code}}: {{analyze-patterns.high_risk_count}} high-risk prescribing patterns identified. EHR alerts created for {{create-ehr-alerts.alert_count}} patients.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: alerts
      path: /Flag
      operations:
      - name: create-clinical-alerts
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → opioid-stewardship-monitoring-pipeline.yml

Runs social determinants of health screenings by querying patient demographics from Databricks, identifying gaps, creating referrals in Salesforce, and logging screening results in the EHR.

naftiko: '0.5'
info:
  label: Health Equity Screening Pipeline
  description: Runs social determinants of health screenings by querying patient demographics from Databricks, identifying gaps, creating referrals in Salesforce, and logging screening results in the EHR.
  tags:
  - health-equity
  - sdoh
  - azure-databricks
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: health-equity
    port: 8080
    tools:
    - name: run-sdoh-screening
      description: Run social determinants of health screening and create referrals.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: screening_type
        in: body
        type: string
        description: Type of SDOH screening (food, housing, transportation).
      steps:
      - name: get-demographics
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM sdoh_screening_data WHERE patient_id = '{{patient_id}}'
      - name: create-referral
        type: call
        call: salesforce.create-referral
        with:
          patient_id: '{{patient_id}}'
          referral_type: '{{screening_type}}'
          risk_factors: '{{get-demographics.risk_factors}}'
      - name: log-screening
        type: call
        call: epic.create-observation
        with:
          patient_id: '{{patient_id}}'
          code: sdoh-screening
          value: '{{screening_type}}: {{get-demographics.risk_score}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: referrals
      path: /sobjects/Referral__c
      operations:
      - name: create-referral
        method: POST
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: observations
      path: /Observation
      operations:
      - name: create-observation
        method: POST
Open in Framework → View in Fleet → health-equity-screening-pipeline.yml

Reviews clinical documentation for completeness by querying encounter data from Databricks, identifying documentation gaps, creating CDI queries in Salesforce, and notifying providers via Teams.

naftiko: '0.5'
info:
  label: Clinical Documentation Integrity Pipeline
  description: Reviews clinical documentation for completeness by querying encounter data from Databricks, identifying documentation gaps, creating CDI queries in Salesforce, and notifying providers via Teams.
  tags:
  - documentation
  - cdi
  - azure-databricks
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cdi
    port: 8080
    tools:
    - name: review-clinical-documentation
      description: Review clinical documentation integrity and create CDI queries.
      inputParameters:
      - name: encounter_id
        in: body
        type: string
        description: The clinical encounter ID.
      - name: provider_email
        in: body
        type: string
        description: The attending provider email.
      steps:
      - name: get-encounter-docs
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM encounter_documentation WHERE encounter_id = '{{encounter_id}}'
      - name: create-cdi-query
        type: call
        call: salesforce.create-cdi-query
        with:
          encounter_id: '{{encounter_id}}'
          gaps: '{{get-encounter-docs.documentation_gaps}}'
          severity: '{{get-encounter-docs.gap_severity}}'
      - name: notify-provider
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{provider_email}}'
          text: 'CDI query for encounter {{encounter_id}}: {{get-encounter-docs.gap_count}} documentation gaps identified. Please review query {{create-cdi-query.query_id}} in Salesforce.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cdi-queries
      path: /sobjects/CDI_Query__c
      operations:
      - name: create-cdi-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-documentation-integrity-pipeline.yml

Reviews chronic disease care plans by querying patient metrics from Databricks, updating care plan status in Salesforce, and generating review summaries in Confluence.

naftiko: '0.5'
info:
  label: Chronic Care Plan Review Pipeline
  description: Reviews chronic disease care plans by querying patient metrics from Databricks, updating care plan status in Salesforce, and generating review summaries in Confluence.
  tags:
  - chronic-care
  - care-plans
  - azure-databricks
  - salesforce
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: chronic-care
    port: 8080
    tools:
    - name: review-care-plan
      description: Review and update a chronic care plan based on latest patient metrics.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: care_plan_id
        in: body
        type: string
        description: The care plan identifier.
      steps:
      - name: get-metrics
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM patient_health_metrics WHERE patient_id = '{{patient_id}}' ORDER BY date DESC LIMIT 10
      - name: update-care-plan
        type: call
        call: salesforce.update-care-plan
        with:
          care_plan_id: '{{care_plan_id}}'
          latest_a1c: '{{get-metrics.latest_a1c}}'
          latest_bp: '{{get-metrics.latest_bp}}'
          status: reviewed
      - name: create-review-summary
        type: call
        call: confluence.create-page
        with:
          space_key: CARE
          title: Care Plan Review - {{patient_id}} - {{care_plan_id}}
          content: 'Latest metrics: A1C {{get-metrics.latest_a1c}}, BP {{get-metrics.latest_bp}}. Care plan updated: {{update-care-plan.status}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: care-plans
      path: /sobjects/CarePlan__c/{{care_plan_id}}
      inputParameters:
      - name: care_plan_id
        in: path
      operations:
      - name: update-care-plan
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://kaiserpermanente.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → chronic-care-plan-review-pipeline.yml

Checks the status of a laboratory order in the LIS, returning collection status, processing state, and estimated result availability.

naftiko: '0.5'
info:
  label: Lab Order Status Check
  description: Checks the status of a laboratory order in the LIS, returning collection status, processing state, and estimated result availability.
  tags:
  - laboratory
  - orders
capability:
  exposes:
  - type: mcp
    namespace: lab-orders
    port: 8080
    tools:
    - name: get-lab-order-status
      description: Look up a lab order by order ID. Returns collection and processing status.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The lab order identifier.
      call: lis.get-order
      with:
        order_id: '{{order_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.order.status
      - name: collection_date
        type: string
        mapping: $.order.collectionDate
      - name: estimated_result_date
        type: string
        mapping: $.order.estimatedResultDate
  consumes:
  - type: http
    namespace: lis
    baseUri: https://kp-lis.kaiserpermanente.org/api/v2
    authentication:
      type: bearer
      token: $secrets.lis_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → lab-order-status-check.yml

Upon patient discharge, creates a follow-up appointment in Salesforce, generates a care plan document in SharePoint, assigns a case manager in ServiceNow, and sends discharge instructions via Microsoft Teams.

naftiko: '0.5'
info:
  label: Discharge Planning Orchestrator
  description: Upon patient discharge, creates a follow-up appointment in Salesforce, generates a care plan document in SharePoint, assigns a case manager in ServiceNow, and sends discharge instructions via Microsoft Teams.
  tags:
  - patient-care
  - discharge
  - salesforce
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: discharge-planning
    port: 8080
    tools:
    - name: process-discharge
      description: Given a patient ID and discharge details, orchestrate post-discharge care across multiple systems.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: discharge_date
        in: body
        type: string
        description: The discharge date in YYYY-MM-DD format.
      - name: diagnosis
        in: body
        type: string
        description: The primary discharge diagnosis.
      - name: patient_email
        in: body
        type: string
        description: The patient email for notifications.
      steps:
      - name: create-followup
        type: call
        call: salesforce.create-appointment
        with:
          patient_id: '{{patient_id}}'
          type: post-discharge-followup
          diagnosis: '{{diagnosis}}'
      - name: create-care-plan
        type: call
        call: sharepoint.create-document
        with:
          site_id: care-plans
          folder_path: DischargeCarePlans/{{patient_id}}_{{discharge_date}}
          diagnosis: '{{diagnosis}}'
      - name: assign-case-manager
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Post-discharge care: {{patient_id}}'
          category: care_management
          description: 'Post-discharge care coordination for patient {{patient_id}}, diagnosis: {{diagnosis}}, discharged {{discharge_date}}.'
      - name: send-instructions
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{patient_email}}'
          text: 'Discharge summary for {{patient_id}}: Follow-up appointment scheduled ({{create-followup.confirmation_number}}). Care plan: {{create-care-plan.url}}. Case manager assigned: {{assign-case-manager.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: appointments
      path: /sobjects/Appointment__c
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → discharge-planning-orchestrator.yml

Retrieves application performance metrics for the patient portal from New Relic, including response times, error rates, and throughput.

naftiko: '0.5'
info:
  label: New Relic Patient Portal Performance
  description: Retrieves application performance metrics for the patient portal from New Relic, including response times, error rates, and throughput.
  tags:
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: portal-performance
    port: 8080
    tools:
    - name: get-portal-metrics
      description: Fetch patient portal performance metrics from New Relic.
      inputParameters:
      - name: time_period
        in: body
        type: string
        description: Time period for metrics (e.g., last_hour, last_day).
      call: newrelic.get-app-metrics
      with:
        app_name: KP-Patient-Portal
        period: '{{time_period}}'
      outputParameters:
      - name: avg_response_time
        type: number
        mapping: $.metric_data.metrics[0].timeslices[0].values.average_response_time
      - name: error_rate
        type: number
        mapping: $.metric_data.metrics[0].timeslices[0].values.error_percentage
      - name: throughput
        type: number
        mapping: $.metric_data.metrics[0].timeslices[0].values.requests_per_minute
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      header: X-Api-Key
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/metrics/data.json
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-patient-portal-performance.yml

Orchestrates HIPAA breach response by creating an incident in ServiceNow, triggering an audit log search in Splunk, notifying the privacy officer via Teams, and generating a breach report in SharePoint.

naftiko: '0.5'
info:
  label: HIPAA Breach Response Orchestrator
  description: Orchestrates HIPAA breach response by creating an incident in ServiceNow, triggering an audit log search in Splunk, notifying the privacy officer via Teams, and generating a breach report in SharePoint.
  tags:
  - compliance
  - hipaa
  - servicenow
  - splunk
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hipaa-breach
    port: 8080
    tools:
    - name: initiate-breach-response
      description: Initiate HIPAA breach response workflow.
      inputParameters:
      - name: breach_description
        in: body
        type: string
        description: Description of the potential breach.
      - name: affected_records
        in: body
        type: string
        description: Estimated number of affected records.
      - name: privacy_officer_email
        in: body
        type: string
        description: Privacy officer email.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: HIPAA Breach Investigation
          urgency: '1'
          description: '{{breach_description}}. Estimated affected records: {{affected_records}}.'
          category: privacy
      - name: search-audit-logs
        type: call
        call: splunk.run-search
        with:
          search: index=hipaa_audit {{breach_description}} | stats count by user, action
          earliest_time: -7d
      - name: notify-privacy-officer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{privacy_officer_email}}'
          text: 'HIPAA BREACH ALERT: {{breach_description}}. Incident: {{create-incident.number}}. Audit log matches: {{search-audit-logs.event_count}}. Estimated affected records: {{affected_records}}.'
      - name: generate-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: compliance
          folder_path: BreachReports/{{create-incident.number}}
          template: hipaa_breach_report
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/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: splunk
    baseUri: https://kp-splunk.kaiserpermanente.org:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: searches
      path: /search/jobs
      operations:
      - name: run-search
        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
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
Open in Framework → View in Fleet → hipaa-breach-response-orchestrator.yml

Retrieves the current status of a health insurance claim from SAP, including adjudication state, paid amount, and denial reason if applicable.

naftiko: '0.5'
info:
  label: Claims Status Lookup
  description: Retrieves the current status of a health insurance claim from SAP, including adjudication state, paid amount, and denial reason if applicable.
  tags:
  - claims
  - finance
  - sap
capability:
  exposes:
  - type: mcp
    namespace: claims-management
    port: 8080
    tools:
    - name: get-claim-status
      description: Look up a health insurance claim by claim number. Returns adjudication status, paid amount, and denial reason.
      inputParameters:
      - name: claim_number
        in: body
        type: string
        description: The claim identifier.
      call: sap.get-claim
      with:
        claim_number: '{{claim_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.AdjudicationStatus
      - name: paid_amount
        type: string
        mapping: $.d.PaidAmount
      - name: denial_reason
        type: string
        mapping: $.d.DenialReason
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kp-claims.sap.com/sap/opu/odata/sap/CLAIMS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: claims
      path: /Claims('{{claim_number}}')
      inputParameters:
      - name: claim_number
        in: path
      operations:
      - name: get-claim
        method: GET
Open in Framework → View in Fleet → claims-status-lookup.yml

Retrieves unread patient portal messages from Salesforce for a given provider, used by clinical support staff.

naftiko: '0.5'
info:
  label: Patient Portal Message Lookup
  description: Retrieves unread patient portal messages from Salesforce for a given provider, used by clinical support staff.
  tags:
  - patient-care
  - messaging
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: patient-messaging
    port: 8080
    tools:
    - name: get-unread-messages
      description: Retrieve unread patient portal messages for a provider from Salesforce.
      inputParameters:
      - name: provider_id
        in: body
        type: string
        description: The provider Salesforce record ID.
      call: salesforce.query-messages
      with:
        provider_id: '{{provider_id}}'
      outputParameters:
      - name: message_count
        type: string
        mapping: $.totalSize
      - name: messages
        type: string
        mapping: $.records
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: messages
      path: /query/?q=SELECT+Id,Subject,Body+FROM+PatientMessage__c+WHERE+ProviderId__c='{{provider_id}}'+AND+IsRead__c=false
      inputParameters:
      - name: provider_id
        in: query
      operations:
      - name: query-messages
        method: GET
Open in Framework → View in Fleet → patient-portal-message-lookup.yml

Identifies patient no-shows from the scheduling system, updates the patient record in Salesforce, sends a rescheduling message via WhatsApp, and logs the outreach in the care coordination platform.

naftiko: '0.5'
info:
  label: Patient No-Show Follow-Up Pipeline
  description: Identifies patient no-shows from the scheduling system, updates the patient record in Salesforce, sends a rescheduling message via WhatsApp, and logs the outreach in the care coordination platform.
  tags:
  - scheduling
  - patient-engagement
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: no-show-followup
    port: 8080
    tools:
    - name: process-no-show
      description: Process a patient no-show and trigger follow-up workflows.
      inputParameters:
      - name: appointment_id
        in: body
        type: string
        description: The missed appointment ID.
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: phone_number
        in: body
        type: string
        description: The patient phone number.
      steps:
      - name: get-appointment-details
        type: call
        call: scheduling.get-appointment
        with:
          appointment_id: '{{appointment_id}}'
      - name: update-patient-record
        type: call
        call: salesforce.update-contact
        with:
          patient_id: '{{patient_id}}'
          last_no_show_date: '{{get-appointment-details.date}}'
          no_show_count_increment: '1'
      - name: send-reschedule-message
        type: call
        call: whatsapp.send-message
        with:
          to: '{{phone_number}}'
          message: We missed you at your {{get-appointment-details.visit_type}} appointment. Please call us to reschedule or reply RESCHEDULE.
      - name: log-outreach
        type: call
        call: salesforce.create-activity
        with:
          patient_id: '{{patient_id}}'
          type: no_show_followup
          notes: No-show for {{get-appointment-details.visit_type}} on {{get-appointment-details.date}}. Rescheduling message sent via WhatsApp.
  consumes:
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: appointments
      path: /appointments/{{appointment_id}}
      inputParameters:
      - name: appointment_id
        in: path
      operations:
      - name: get-appointment
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: update-contact
        method: PATCH
    - name: activities
      path: /sobjects/Activity__c
      operations:
      - name: create-activity
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-no-show-follow-up-pipeline.yml

Retrieves clinical IT change request details from Jira, including approval status, implementation timeline, and risk assessment.

naftiko: '0.5'
info:
  label: Jira Clinical Change Request Lookup
  description: Retrieves clinical IT change request details from Jira, including approval status, implementation timeline, and risk assessment.
  tags:
  - change-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: change-requests
    port: 8080
    tools:
    - name: get-change-request
      description: Look up a clinical change request in Jira by issue key.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: risk_level
        type: string
        mapping: $.fields.customfield_10100
  consumes:
  - type: http
    namespace: jira
    baseUri: https://kaiserpermanente.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-clinical-change-request-lookup.yml

Looks up ICD-10 diagnosis codes and returns descriptions, related codes, and HCC risk categories.

naftiko: '0.5'
info:
  label: Medical Coding ICD Lookup
  description: Looks up ICD-10 diagnosis codes and returns descriptions, related codes, and HCC risk categories.
  tags:
  - coding
  - icd
capability:
  exposes:
  - type: mcp
    namespace: medical-coding
    port: 8080
    tools:
    - name: lookup-icd-code
      description: Look up an ICD-10 code. Returns description and HCC category.
      inputParameters:
      - name: icd_code
        in: body
        type: string
        description: The ICD-10 diagnosis code.
      call: coding.get-icd
      with:
        code: '{{icd_code}}'
      outputParameters:
      - name: description
        type: string
        mapping: $.code.description
      - name: hcc_category
        type: string
        mapping: $.code.hccCategory
      - name: related_codes
        type: array
        mapping: $.code.relatedCodes
  consumes:
  - type: http
    namespace: coding
    baseUri: https://kp-coding.kaiserpermanente.org/api/v1
    authentication:
      type: apiKey
      header: X-API-Key
      key: $secrets.coding_api_key
    resources:
    - name: codes
      path: /icd10/{{code}}
      inputParameters:
      - name: code
        in: path
      operations:
      - name: get-icd
        method: GET
Open in Framework → View in Fleet → medical-coding-icd-lookup.yml

Retrieves patient portal engagement metrics from Google Analytics, including page views, session duration, and top pages.

naftiko: '0.5'
info:
  label: Google Analytics Patient Portal Metrics
  description: Retrieves patient portal engagement metrics from Google Analytics, including page views, session duration, and top pages.
  tags:
  - analytics
  - patient-portal
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: portal-analytics
    port: 8080
    tools:
    - name: get-portal-metrics
      description: Retrieve patient portal engagement metrics from Google Analytics for a given date range.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: google-analytics.get-report
      with:
        property_id: kp-patient-portal
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: page_views
        type: string
        mapping: $.rows[0].metricValues[0].value
      - name: avg_session_duration
        type: string
        mapping: $.rows[0].metricValues[1].value
  consumes:
  - type: http
    namespace: google-analytics
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-patient-portal-metrics.yml

Identifies care gaps from Azure Databricks analytics, creates follow-up tasks in Salesforce for care managers, and sends reminder notifications via Microsoft Teams.

naftiko: '0.5'
info:
  label: Care Gap Alert Pipeline
  description: Identifies care gaps from Azure Databricks analytics, creates follow-up tasks in Salesforce for care managers, and sends reminder notifications via Microsoft Teams.
  tags:
  - population-health
  - care-gaps
  - azure-databricks
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: care-gaps
    port: 8080
    tools:
    - name: process-care-gaps
      description: Given a patient cohort, identify care gaps, create follow-up tasks, and notify care managers.
      inputParameters:
      - name: cohort_id
        in: body
        type: string
        description: The patient cohort identifier.
      - name: care_manager_email
        in: body
        type: string
        description: The care manager email for notifications.
      steps:
      - name: get-gaps
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM care_gaps WHERE cohort_id = '{{cohort_id}}' AND status = 'open'
      - name: create-tasks
        type: call
        call: salesforce.create-task
        with:
          subject: Care gap follow-up for cohort {{cohort_id}}
          description: '{{get-gaps.summary}}'
          assigned_to: '{{care_manager_email}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{care_manager_email}}'
          text: 'Care gap alert: {{get-gaps.gap_count}} open gaps identified for cohort {{cohort_id}}. Task created: {{create-tasks.task_id}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → care-gap-alert-pipeline.yml

Schedules interpreter services by checking patient language preferences in Salesforce, finding available interpreters, booking sessions, and confirming with the care team via Teams.

naftiko: '0.5'
info:
  label: Interpreter Services Scheduling Pipeline
  description: Schedules interpreter services by checking patient language preferences in Salesforce, finding available interpreters, booking sessions, and confirming with the care team via Teams.
  tags:
  - interpreter-services
  - language-access
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: interpreter-services
    port: 8080
    tools:
    - name: schedule-interpreter
      description: Schedule interpreter services for a patient appointment.
      inputParameters:
      - name: appointment_id
        in: body
        type: string
        description: The appointment ID requiring interpretation.
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: provider_email
        in: body
        type: string
        description: The provider email.
      steps:
      - name: get-language-pref
        type: call
        call: salesforce.get-patient
        with:
          patient_id: '{{patient_id}}'
      - name: find-interpreter
        type: call
        call: scheduling.find-interpreter
        with:
          language: '{{get-language-pref.preferred_language}}'
          appointment_id: '{{appointment_id}}'
      - name: book-interpreter
        type: call
        call: scheduling.book-interpreter
        with:
          interpreter_id: '{{find-interpreter.interpreter_id}}'
          appointment_id: '{{appointment_id}}'
      - name: confirm-with-provider
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{provider_email}}'
          text: 'Interpreter scheduled for appointment {{appointment_id}}: {{get-language-pref.preferred_language}} interpreter ({{find-interpreter.interpreter_name}}). Booking ID: {{book-interpreter.booking_id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: patients
      path: /sobjects/Contact/{{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-patient
        method: GET
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: interpreters
      path: /interpreters/available
      operations:
      - name: find-interpreter
        method: GET
    - name: bookings
      path: /interpreters/book
      operations:
      - name: book-interpreter
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → interpreter-services-scheduling-pipeline.yml

Triggers a crisis intervention workflow by creating an urgent case in ServiceNow, notifying the behavioral health team via Teams, scheduling an emergency session, and documenting the intervention in the EHR.

naftiko: '0.5'
info:
  label: Mental Health Crisis Intervention Pipeline
  description: Triggers a crisis intervention workflow by creating an urgent case in ServiceNow, notifying the behavioral health team via Teams, scheduling an emergency session, and documenting the intervention in the EHR.
  tags:
  - behavioral-health
  - crisis
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: crisis-intervention
    port: 8080
    tools:
    - name: initiate-crisis-intervention
      description: Initiate mental health crisis intervention across clinical systems.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: crisis_level
        in: body
        type: string
        description: Crisis severity level (acute, urgent, emergent).
      - name: bh_team_email
        in: body
        type: string
        description: Behavioral health team email.
      steps:
      - name: create-urgent-case
        type: call
        call: servicenow.create-case
        with:
          short_description: Mental health crisis - {{crisis_level}} - Patient {{patient_id}}
          urgency: '1'
          category: behavioral_health
      - name: notify-bh-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{bh_team_email}}'
          text: 'CRISIS ALERT: Patient {{patient_id}}, level {{crisis_level}}. Case: {{create-urgent-case.number}}. Immediate intervention required.'
      - name: schedule-emergency-session
        type: call
        call: scheduling.create-urgent-appointment
        with:
          patient_id: '{{patient_id}}'
          visit_type: crisis_intervention
          priority: emergency
      - name: document-in-ehr
        type: call
        call: epic.create-note
        with:
          patient_id: '{{patient_id}}'
          note_type: crisis_intervention
          content: 'Crisis intervention initiated. Level: {{crisis_level}}. Case: {{create-urgent-case.number}}. Emergency session: {{schedule-emergency-session.appointment_id}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: urgent-appointments
      path: /appointments/urgent
      operations:
      - name: create-urgent-appointment
        method: POST
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: notes
      path: /DocumentReference
      operations:
      - name: create-note
        method: POST
Open in Framework → View in Fleet → mental-health-crisis-intervention-pipeline.yml

Retrieves a population health risk score for a patient cohort from Azure Databricks, used by care management teams to prioritize outreach.

naftiko: '0.5'
info:
  label: Population Health Risk Score
  description: Retrieves a population health risk score for a patient cohort from Azure Databricks, used by care management teams to prioritize outreach.
  tags:
  - population-health
  - analytics
  - azure-databricks
capability:
  exposes:
  - type: mcp
    namespace: population-health
    port: 8080
    tools:
    - name: get-risk-score
      description: Retrieve population health risk scores for a specified patient cohort.
      inputParameters:
      - name: cohort_id
        in: body
        type: string
        description: The identifier for the patient cohort.
      call: databricks.run-query
      with:
        query: SELECT * FROM risk_scores WHERE cohort_id = '{{cohort_id}}'
      outputParameters:
      - name: average_risk
        type: string
        mapping: $.result[0].avg_risk_score
      - name: high_risk_count
        type: string
        mapping: $.result[0].high_risk_count
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → population-health-risk-score.yml

Queries Azure Active Directory for provider group memberships and access assignments within clinical systems.

naftiko: '0.5'
info:
  label: Azure AD Provider Group Lookup
  description: Queries Azure Active Directory for provider group memberships and access assignments within clinical systems.
  tags:
  - identity
  - azure-ad
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-provider-groups
      description: Look up Azure AD group memberships for a provider by UPN.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: The user principal name.
      call: azuread.get-member-groups
      with:
        upn: '{{user_upn}}'
      outputParameters:
      - name: groups
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}/memberOf
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-member-groups
        method: GET
Open in Framework → View in Fleet → azure-ad-provider-group-lookup.yml

Checks the Kaiser Permanente drug formulary to determine coverage status, tier, and prior authorization requirements for a given medication.

naftiko: '0.5'
info:
  label: Pharmacy Drug Formulary Lookup
  description: Checks the Kaiser Permanente drug formulary to determine coverage status, tier, and prior authorization requirements for a given medication.
  tags:
  - pharmacy
  - formulary
capability:
  exposes:
  - type: mcp
    namespace: pharmacy
    port: 8080
    tools:
    - name: check-formulary
      description: Look up a drug by NDC code in the formulary. Returns coverage tier and PA requirements.
      inputParameters:
      - name: ndc_code
        in: body
        type: string
        description: The National Drug Code.
      call: formulary.get-drug
      with:
        ndc_code: '{{ndc_code}}'
      outputParameters:
      - name: covered
        type: boolean
        mapping: $.drug.isCovered
      - name: tier
        type: string
        mapping: $.drug.formularyTier
      - name: requires_pa
        type: boolean
        mapping: $.drug.requiresPriorAuth
  consumes:
  - type: http
    namespace: formulary
    baseUri: https://kp-pharmacy.kaiserpermanente.org/api/v1
    authentication:
      type: apiKey
      header: X-API-Key
      key: $secrets.formulary_api_key
    resources:
    - name: drugs
      path: /formulary/drugs/{{ndc_code}}
      inputParameters:
      - name: ndc_code
        in: path
      operations:
      - name: get-drug
        method: GET
Open in Framework → View in Fleet → pharmacy-drug-formulary-lookup.yml

When a department requests medical equipment, creates a requisition in SAP, gets budget approval from Workday, and notifies the procurement team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Medical Equipment Procurement Pipeline
  description: When a department requests medical equipment, creates a requisition in SAP, gets budget approval from Workday, and notifies the procurement team via Microsoft Teams.
  tags:
  - procurement
  - medical-equipment
  - sap
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: equipment-procurement
    port: 8080
    tools:
    - name: request-equipment
      description: Given equipment details and requester info, create a requisition, check budget, and notify procurement.
      inputParameters:
      - name: equipment_name
        in: body
        type: string
        description: The name of the medical equipment.
      - name: quantity
        in: body
        type: string
        description: The quantity requested.
      - name: estimated_cost
        in: body
        type: string
        description: The estimated total cost.
      - name: requester_id
        in: body
        type: string
        description: The Workday ID of the requester.
      - name: department
        in: body
        type: string
        description: The requesting department.
      steps:
      - name: create-requisition
        type: call
        call: sap.create-requisition
        with:
          description: '{{equipment_name}} x{{quantity}}'
          amount: '{{estimated_cost}}'
          requester: '{{requester_id}}'
      - name: check-budget
        type: call
        call: workday.check-budget
        with:
          department: '{{department}}'
          amount: '{{estimated_cost}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement
          text: 'New equipment request: {{equipment_name}} x{{quantity}} (${{estimated_cost}}) from {{department}}. Requisition: {{create-requisition.req_number}}. Budget available: {{check-budget.available}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kp-supply.sap.com/sap/opu/odata/sap/MM_PUR_REQ_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: requisitions
      path: /A_PurchaseRequisition
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: budgets
      path: /financialManagement/budgets?department={{department}}
      inputParameters:
      - name: department
        in: query
      operations:
      - name: check-budget
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-equipment-procurement-pipeline.yml

Queries Azure Databricks for eligible patients matching clinical trial criteria, creates candidate records in Salesforce, and notifies the research coordinator via Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Patient Matching
  description: Queries Azure Databricks for eligible patients matching clinical trial criteria, creates candidate records in Salesforce, and notifies the research coordinator via Microsoft Teams.
  tags:
  - research
  - clinical-trials
  - azure-databricks
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-research
    port: 8080
    tools:
    - name: match-trial-patients
      description: Given trial criteria, identify eligible patients and create candidate records.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: The clinical trial identifier.
      - name: inclusion_criteria
        in: body
        type: string
        description: SQL-compatible inclusion criteria for patient matching.
      - name: coordinator_email
        in: body
        type: string
        description: The research coordinator email.
      steps:
      - name: find-candidates
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM patient_cohort WHERE {{inclusion_criteria}} LIMIT 100
      - name: create-candidates
        type: call
        call: salesforce.create-trial-candidates
        with:
          trial_id: '{{trial_id}}'
          candidates: '{{find-candidates.results}}'
      - name: notify-coordinator
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{coordinator_email}}'
          text: 'Clinical trial {{trial_id}}: {{find-candidates.row_count}} eligible patients identified. Candidate records created in Salesforce.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: trial-candidates
      path: /sobjects/TrialCandidate__c
      operations:
      - name: create-trial-candidates
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-patient-matching.yml

Processes adverse drug event reports by documenting in the EHR, filing a safety report in ServiceNow, and notifying the pharmacy team via Teams.

naftiko: '0.5'
info:
  label: Adverse Drug Event Reporting Pipeline
  description: Processes adverse drug event reports by documenting in the EHR, filing a safety report in ServiceNow, and notifying the pharmacy team via Teams.
  tags:
  - patient-safety
  - pharmacovigilance
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ade-reporting
    port: 8080
    tools:
    - name: report-adverse-drug-event
      description: Report and process an adverse drug event across safety systems.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: drug_name
        in: body
        type: string
        description: The drug that caused the adverse event.
      - name: event_description
        in: body
        type: string
        description: Description of the adverse event.
      - name: severity
        in: body
        type: string
        description: Event severity (mild, moderate, severe).
      steps:
      - name: document-in-ehr
        type: call
        call: epic.create-allergy-intolerance
        with:
          patient_id: '{{patient_id}}'
          substance: '{{drug_name}}'
          reaction: '{{event_description}}'
          severity: '{{severity}}'
      - name: create-safety-report
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'ADE Report: {{drug_name}} - {{severity}}'
          category: drug_safety
          description: 'Patient {{patient_id}}: {{event_description}}. Drug: {{drug_name}}. Severity: {{severity}}.'
      - name: notify-pharmacy
        type: call
        call: msteams.send-message
        with:
          recipient_upn: pharmacy-safety@kaiserpermanente.org
          text: 'ADE ALERT: {{drug_name}} ({{severity}}). Patient {{patient_id}}. {{event_description}}. Incident: {{create-safety-report.number}}.'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: allergies
      path: /AllergyIntolerance
      operations:
      - name: create-allergy-intolerance
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adverse-drug-event-reporting-pipeline.yml

Orchestrates room cleaning workflows upon patient discharge by triggering cleaning tasks in ServiceNow, notifying EVS staff via Teams, and updating bed availability in the bed management system.

naftiko: '0.5'
info:
  label: Environmental Services Cleaning Orchestrator
  description: Orchestrates room cleaning workflows upon patient discharge by triggering cleaning tasks in ServiceNow, notifying EVS staff via Teams, and updating bed availability in the bed management system.
  tags:
  - environmental-services
  - bed-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: evs-cleaning
    port: 8080
    tools:
    - name: trigger-room-cleaning
      description: Trigger room cleaning workflow after patient discharge.
      inputParameters:
      - name: room_number
        in: body
        type: string
        description: The room number to be cleaned.
      - name: facility_code
        in: body
        type: string
        description: The facility code.
      - name: cleaning_type
        in: body
        type: string
        description: Type of cleaning (standard, terminal, isolation).
      steps:
      - name: create-cleaning-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Room cleaning: {{room_number}} - {{cleaning_type}}'
          assignment_group: EVS-{{facility_code}}
          priority: '2'
      - name: notify-evs
        type: call
        call: msteams.send-message
        with:
          recipient_upn: evs-{{facility_code}}@kaiserpermanente.org
          text: 'Cleaning required: Room {{room_number}}, type: {{cleaning_type}}. Task: {{create-cleaning-task.number}}.'
      - name: update-bed-status
        type: call
        call: bedmgmt.update-bed
        with:
          room_number: '{{room_number}}'
          facility_code: '{{facility_code}}'
          status: cleaning_in_progress
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.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
  - type: http
    namespace: bedmgmt
    baseUri: https://kp-bedmgmt.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.bedmgmt_token
    resources:
    - name: beds
      path: /beds/{{room_number}}
      inputParameters:
      - name: room_number
        in: path
      operations:
      - name: update-bed
        method: PUT
Open in Framework → View in Fleet → environmental-services-cleaning-orchestrator.yml

When a facility issue is reported, creates a ServiceNow work order, notifies the facilities team via Microsoft Teams, and updates the asset record in SAP.

naftiko: '0.5'
info:
  label: Facility Maintenance Request Pipeline
  description: When a facility issue is reported, creates a ServiceNow work order, notifies the facilities team via Microsoft Teams, and updates the asset record in SAP.
  tags:
  - facilities
  - servicenow
  - microsoft-teams
  - sap
capability:
  exposes:
  - type: mcp
    namespace: facilities
    port: 8080
    tools:
    - name: submit-maintenance-request
      description: Given facility details, create a work order, notify the team, and update the asset record.
      inputParameters:
      - name: facility_code
        in: body
        type: string
        description: The facility location code.
      - name: issue_description
        in: body
        type: string
        description: Description of the maintenance issue.
      - name: priority
        in: body
        type: string
        description: Priority level (critical, high, medium, low).
      - name: asset_id
        in: body
        type: string
        description: The SAP asset identifier if applicable.
      steps:
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          short_description: 'Maintenance: {{facility_code}} - {{issue_description}}'
          priority: '{{priority}}'
          location: '{{facility_code}}'
      - name: notify-facilities
        type: call
        call: msteams.send-message
        with:
          channel_id: facilities-ops
          text: 'New maintenance request at {{facility_code}}: {{issue_description}}. Priority: {{priority}}. Work order: {{create-work-order.number}}.'
      - name: update-asset
        type: call
        call: sap.update-asset
        with:
          asset_id: '{{asset_id}}'
          maintenance_ticket: '{{create-work-order.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: sap
    baseUri: https://kp-facilities.sap.com/sap/opu/odata/sap/ASSET_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: assets
      path: /Assets('{{asset_id}}')
      inputParameters:
      - name: asset_id
        in: path
      operations:
      - name: update-asset
        method: PATCH
Open in Framework → View in Fleet → facility-maintenance-request-pipeline.yml

Monitors physician workload indicators from Workday and scheduling data, generates burnout risk scores, and alerts department leads via Teams when thresholds are exceeded.

naftiko: '0.5'
info:
  label: Physician Burnout Monitoring Pipeline
  description: Monitors physician workload indicators from Workday and scheduling data, generates burnout risk scores, and alerts department leads via Teams when thresholds are exceeded.
  tags:
  - physician-wellness
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: burnout-monitoring
    port: 8080
    tools:
    - name: assess-burnout-risk
      description: Assess physician burnout risk based on workload indicators.
      inputParameters:
      - name: department_code
        in: body
        type: string
        description: The department code.
      - name: department_lead_email
        in: body
        type: string
        description: Department lead email.
      steps:
      - name: get-workload-data
        type: call
        call: workday.get-department-hours
        with:
          department_code: '{{department_code}}'
      - name: get-scheduling-data
        type: call
        call: scheduling.get-department-coverage
        with:
          department_code: '{{department_code}}'
      - name: alert-leadership
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{department_lead_email}}'
          text: 'Burnout risk report for {{department_code}}: Avg hours/week: {{get-workload-data.avg_hours}}. Overtime providers: {{get-workload-data.overtime_count}}. Unfilled shifts: {{get-scheduling-data.unfilled_count}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl.workday.com/ccx/api/v1/kaiserpermanente
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: hours
      path: /workers/hours
      operations:
      - name: get-department-hours
        method: GET
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: coverage
      path: /departments/{{department_code}}/coverage
      inputParameters:
      - name: department_code
        in: path
      operations:
      - name: get-department-coverage
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → physician-burnout-monitoring-pipeline.yml

Checks the payment status of a vendor invoice in SAP, returning payment date, amount, and clearing document number.

naftiko: '0.5'
info:
  label: SAP Vendor Payment Status
  description: Checks the payment status of a vendor invoice in SAP, returning payment date, amount, and clearing document number.
  tags:
  - finance
  - sap
capability:
  exposes:
  - type: mcp
    namespace: vendor-payments
    port: 8080
    tools:
    - name: get-payment-status
      description: Look up vendor invoice payment status in SAP by invoice number.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP invoice document number.
      call: sap.get-invoice-payment
      with:
        invoice_number: '{{invoice_number}}'
      outputParameters:
      - name: payment_status
        type: string
        mapping: $.d.PaymentStatus
      - name: payment_date
        type: string
        mapping: $.d.PaymentDate
      - name: clearing_doc
        type: string
        mapping: $.d.ClearingDocument
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kp-sap.kaiserpermanente.org/sap/opu/odata/sap/FI_VENDOR_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /VendorInvoices('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice-payment
        method: GET
Open in Framework → View in Fleet → sap-vendor-payment-status.yml

Retrieves patient screening questionnaire results from Salesforce, scores them using Azure Machine Learning, and creates a care plan in ServiceNow if the score indicates risk.

naftiko: '0.5'
info:
  label: Behavioral Health Screening Pipeline
  description: Retrieves patient screening questionnaire results from Salesforce, scores them using Azure Machine Learning, and creates a care plan in ServiceNow if the score indicates risk.
  tags:
  - behavioral-health
  - screening
  - salesforce
  - azure-machine-learning
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: behavioral-health
    port: 8080
    tools:
    - name: process-screening
      description: Given a patient screening ID, score the questionnaire and create a care plan if needed.
      inputParameters:
      - name: screening_id
        in: body
        type: string
        description: The Salesforce screening record ID.
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      steps:
      - name: get-screening
        type: call
        call: salesforce.get-screening
        with:
          screening_id: '{{screening_id}}'
      - name: score-screening
        type: call
        call: azureml.score
        with:
          model: phq9-risk-model
          input_data: '{{get-screening.responses}}'
      - name: create-care-plan
        type: call
        call: servicenow.create-case
        with:
          short_description: 'Behavioral health follow-up: {{patient_id}}'
          category: behavioral_health
          priority: '{{score-screening.risk_level}}'
          description: 'PHQ-9 score: {{score-screening.score}}. Risk level: {{score-screening.risk_level}}. Patient: {{patient_id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: screenings
      path: /sobjects/Screening__c/{{screening_id}}
      inputParameters:
      - name: screening_id
        in: path
      operations:
      - name: get-screening
        method: GET
  - type: http
    namespace: azureml
    baseUri: https://kp-ml.eastus.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cases
      path: /table/sn_customerservice_case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → behavioral-health-screening-pipeline.yml

Creates a calendar event in Microsoft Outlook for a care team meeting, including attendees and meeting details.

naftiko: '0.5'
info:
  label: Microsoft Outlook Calendar Event Creation
  description: Creates a calendar event in Microsoft Outlook for a care team meeting, including attendees and meeting details.
  tags:
  - scheduling
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: calendar
    port: 8080
    tools:
    - name: create-care-meeting
      description: Create a calendar event in Microsoft Outlook for a care team meeting.
      inputParameters:
      - name: subject
        in: body
        type: string
        description: The meeting subject.
      - name: start_time
        in: body
        type: string
        description: The meeting start time in ISO 8601 format.
      - name: duration_minutes
        in: body
        type: string
        description: The meeting duration in minutes.
      - name: attendees
        in: body
        type: string
        description: Comma-separated list of attendee email addresses.
      call: outlook.create-event
      with:
        subject: '{{subject}}'
        start_time: '{{start_time}}'
        duration: '{{duration_minutes}}'
        attendees: '{{attendees}}'
  consumes:
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /me/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → microsoft-outlook-calendar-event-creation.yml

Identifies eligible patients from Databricks analytics, creates enrollment records in the clinical trials management system, generates consent documents in SharePoint, and notifies the research coordinator.

naftiko: '0.5'
info:
  label: Clinical Research Enrollment Pipeline
  description: Identifies eligible patients from Databricks analytics, creates enrollment records in the clinical trials management system, generates consent documents in SharePoint, and notifies the research coordinator.
  tags:
  - research
  - clinical-trials
  - azure-databricks
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: research-enrollment
    port: 8080
    tools:
    - name: enroll-patient-in-trial
      description: Enroll an eligible patient in a clinical trial across multiple systems.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: trial_id
        in: body
        type: string
        description: The clinical trial identifier.
      - name: coordinator_email
        in: body
        type: string
        description: Research coordinator email.
      steps:
      - name: verify-eligibility
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM trial_eligibility WHERE patient_id = '{{patient_id}}' AND trial_id = '{{trial_id}}'
      - name: create-enrollment
        type: call
        call: ctms.create-enrollment
        with:
          patient_id: '{{patient_id}}'
          trial_id: '{{trial_id}}'
          eligibility_status: '{{verify-eligibility.status}}'
      - name: generate-consent
        type: call
        call: sharepoint.create-document
        with:
          site_id: clinical-research
          folder_path: Consents/{{trial_id}}/{{patient_id}}
          template: informed_consent
      - name: notify-coordinator
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{coordinator_email}}'
          text: 'New enrollment: Patient {{patient_id}} enrolled in trial {{trial_id}}. Enrollment ID: {{create-enrollment.enrollment_id}}. Consent document: {{generate-consent.url}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: ctms
    baseUri: https://kp-ctms.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.ctms_token
    resources:
    - name: enrollments
      path: /enrollments
      operations:
      - name: create-enrollment
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-research-enrollment-pipeline.yml

Retrieves a patient's chart summary from the Epic EHR system, including demographics, active problems, and current medications.

naftiko: '0.5'
info:
  label: Epic Patient Chart Lookup
  description: Retrieves a patient's chart summary from the Epic EHR system, including demographics, active problems, and current medications.
  tags:
  - patient-care
  - epic
capability:
  exposes:
  - type: mcp
    namespace: patient-charts
    port: 8080
    tools:
    - name: get-patient-chart
      description: Look up a patient chart by MRN. Returns demographics, active problems, and medication list.
      inputParameters:
      - name: mrn
        in: body
        type: string
        description: The patient medical record number.
      call: epic.get-patient
      with:
        mrn: '{{mrn}}'
      outputParameters:
      - name: demographics
        type: object
        mapping: $.entry[0].resource
      - name: problems
        type: array
        mapping: $.entry[0].resource.condition
      - name: medications
        type: array
        mapping: $.entry[0].resource.medicationRequest
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: patients
      path: /Patient/{{mrn}}
      inputParameters:
      - name: mrn
        in: path
      operations:
      - name: get-patient
        method: GET
Open in Framework → View in Fleet → epic-patient-chart-lookup.yml

Queries provider scheduling system to return available appointment slots for a given provider and date range.

naftiko: '0.5'
info:
  label: Provider Schedule Availability
  description: Queries provider scheduling system to return available appointment slots for a given provider and date range.
  tags:
  - scheduling
  - provider
capability:
  exposes:
  - type: mcp
    namespace: provider-scheduling
    port: 8080
    tools:
    - name: get-provider-availability
      description: Retrieve available slots for a provider within a date range.
      inputParameters:
      - name: provider_npi
        in: body
        type: string
        description: The provider NPI number.
      - 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: scheduling.get-slots
      with:
        provider_npi: '{{provider_npi}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: available_slots
        type: array
        mapping: $.slots
  consumes:
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: slots
      path: /providers/{{provider_npi}}/slots
      inputParameters:
      - name: provider_npi
        in: path
      operations:
      - name: get-slots
        method: GET
Open in Framework → View in Fleet → provider-schedule-availability.yml

Fetches a radiology report from the PACS system by accession number, returning the radiologist's findings and impressions.

naftiko: '0.5'
info:
  label: Radiology Report Retrieval
  description: Fetches a radiology report from the PACS system by accession number, returning the radiologist's findings and impressions.
  tags:
  - radiology
  - imaging
capability:
  exposes:
  - type: mcp
    namespace: radiology
    port: 8080
    tools:
    - name: get-radiology-report
      description: Retrieve a radiology report by accession number. Returns findings and impression text.
      inputParameters:
      - name: accession_number
        in: body
        type: string
        description: The radiology accession number.
      call: pacs.get-report
      with:
        accession_number: '{{accession_number}}'
      outputParameters:
      - name: findings
        type: string
        mapping: $.report.findings
      - name: impression
        type: string
        mapping: $.report.impression
      - name: modality
        type: string
        mapping: $.report.modality
  consumes:
  - type: http
    namespace: pacs
    baseUri: https://kp-pacs.kaiserpermanente.org/api/v2
    authentication:
      type: bearer
      token: $secrets.pacs_token
    resources:
    - name: reports
      path: /reports/{{accession_number}}
      inputParameters:
      - name: accession_number
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → radiology-report-retrieval.yml

Monitors infection control data from Azure Databricks, creates alerts in ServiceNow for infection prevention teams, updates the clinical dashboard in Power BI, and notifies leadership via Microsoft Teams.

naftiko: '0.5'
info:
  label: Infection Control Alert Pipeline
  description: Monitors infection control data from Azure Databricks, creates alerts in ServiceNow for infection prevention teams, updates the clinical dashboard in Power BI, and notifies leadership via Microsoft Teams.
  tags:
  - infection-control
  - patient-safety
  - azure-databricks
  - servicenow
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infection-control
    port: 8080
    tools:
    - name: trigger-infection-alert
      description: Given a facility and infection type, check thresholds, create alerts, refresh dashboards, and notify leadership.
      inputParameters:
      - name: facility_code
        in: body
        type: string
        description: The facility location code.
      - name: infection_type
        in: body
        type: string
        description: The infection type to monitor (e.g., MRSA, CLABSI, CAUTI).
      steps:
      - name: check-data
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM infection_surveillance WHERE facility = '{{facility_code}}' AND infection_type = '{{infection_type}}' AND report_date = CURRENT_DATE
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Infection alert: {{infection_type}} at {{facility_code}}'
          category: infection_control
          priority: high
          description: 'Infection surveillance alert for {{infection_type}} at {{facility_code}}. Cases: {{check-data.case_count}}.'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: infection-control-dashboard
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          channel_id: infection-prevention
          text: 'Infection control alert at {{facility_code}}: {{infection_type}} - {{check-data.case_count}} cases detected. ServiceNow: {{create-alert.number}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/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: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → infection-control-alert-pipeline.yml

Monitors telemedicine visit quality by collecting Zoom meeting metrics, correlating with patient satisfaction from Salesforce, and generating quality reports in Google Sheets.

naftiko: '0.5'
info:
  label: Telemedicine Visit Quality Pipeline
  description: Monitors telemedicine visit quality by collecting Zoom meeting metrics, correlating with patient satisfaction from Salesforce, and generating quality reports in Google Sheets.
  tags:
  - telehealth
  - quality
  - zoom
  - salesforce
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: telehealth-quality
    port: 8080
    tools:
    - name: assess-visit-quality
      description: Assess telemedicine visit quality across technical and patient satisfaction metrics.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting ID.
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: report_spreadsheet_id
        in: body
        type: string
        description: The Google Sheets report spreadsheet ID.
      steps:
      - name: get-meeting-quality
        type: call
        call: zoom.get-meeting-quality
        with:
          meeting_id: '{{meeting_id}}'
      - name: get-satisfaction
        type: call
        call: salesforce.get-survey-response
        with:
          patient_id: '{{patient_id}}'
          meeting_id: '{{meeting_id}}'
      - name: append-report
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: '{{report_spreadsheet_id}}'
          range: QualityData!A:F
          values: '{{meeting_id}},{{get-meeting-quality.audio_quality}},{{get-meeting-quality.video_quality}},{{get-meeting-quality.connection_issues}},{{get-satisfaction.rating}},{{get-satisfaction.comments}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /metrics/meetings/{{meeting_id}}/participants
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-quality
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: surveys
      path: /sobjects/SurveyResponse__c
      operations:
      - name: get-survey-response
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → telemedicine-visit-quality-pipeline.yml

On patient request, checks provider availability in Workday, creates an appointment slot, and sends a confirmation via Microsoft Teams to the care coordinator.

naftiko: '0.5'
info:
  label: Patient Appointment Scheduler
  description: On patient request, checks provider availability in Workday, creates an appointment slot, and sends a confirmation via Microsoft Teams to the care coordinator.
  tags:
  - patient-care
  - scheduling
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: patient-scheduling
    port: 8080
    tools:
    - name: schedule-appointment
      description: Given a patient ID, provider ID, and preferred date, check provider availability in Workday, reserve the slot, and notify the care coordinator in Microsoft Teams.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: provider_id
        in: body
        type: string
        description: The Workday worker ID for the provider.
      - name: preferred_date
        in: body
        type: string
        description: Preferred appointment date in YYYY-MM-DD format.
      - name: appointment_type
        in: body
        type: string
        description: Type of appointment (e.g., primary-care, specialist, follow-up).
      steps:
      - name: check-availability
        type: call
        call: workday.get-worker-schedule
        with:
          worker_id: '{{provider_id}}'
          date: '{{preferred_date}}'
      - name: create-slot
        type: call
        call: salesforce.create-appointment
        with:
          patient_id: '{{patient_id}}'
          provider_id: '{{provider_id}}'
          date: '{{preferred_date}}'
          type: '{{appointment_type}}'
      - name: notify-coordinator
        type: call
        call: msteams.send-message
        with:
          channel_id: care-coordination
          text: 'Appointment scheduled for patient {{patient_id}} with provider {{provider_id}} on {{preferred_date}}. Confirmation: {{create-slot.confirmation_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: worker-schedules
      path: /workers/{{worker_id}}/schedule
      inputParameters:
      - name: worker_id
        in: path
      - name: date
        in: query
      operations:
      - name: get-worker-schedule
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: appointments
      path: /sobjects/Appointment__c
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-appointment-scheduler.yml

After a completed appointment, sends a patient satisfaction survey via Google Forms, collects responses in Google Sheets, and creates a follow-up task in Salesforce if the score is low.

naftiko: '0.5'
info:
  label: Patient Satisfaction Survey Pipeline
  description: After a completed appointment, sends a patient satisfaction survey via Google Forms, collects responses in Google Sheets, and creates a follow-up task in Salesforce if the score is low.
  tags:
  - patient-experience
  - google-forms
  - google-sheets
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: patient-satisfaction
    port: 8080
    tools:
    - name: trigger-survey
      description: Given an appointment ID, send a satisfaction survey, monitor responses, and escalate low scores.
      inputParameters:
      - name: appointment_id
        in: body
        type: string
        description: The completed appointment ID.
      - name: patient_email
        in: body
        type: string
        description: The patient email to receive the survey.
      - name: provider_name
        in: body
        type: string
        description: The provider name for the survey context.
      steps:
      - name: send-survey
        type: call
        call: google-forms.send-form
        with:
          form_id: patient-satisfaction-v2
          recipient_email: '{{patient_email}}'
          provider_name: '{{provider_name}}'
      - name: log-response
        type: call
        call: google-sheets.append-row
        with:
          spreadsheet_id: patient-satisfaction-tracker
          values: '{{appointment_id}},{{patient_email}},{{provider_name}},{{send-survey.response_id}}'
      - name: check-escalation
        type: call
        call: salesforce.create-task
        with:
          subject: 'Low satisfaction follow-up: {{appointment_id}}'
          description: Patient satisfaction survey sent for appointment {{appointment_id}} with {{provider_name}}.
          assigned_to: patient-experience-team
  consumes:
  - type: http
    namespace: google-forms
    baseUri: https://forms.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_forms_token
    resources:
    - name: forms
      path: /forms/{{form_id}}/responses
      inputParameters:
      - name: form_id
        in: path
      operations:
      - name: send-form
        method: POST
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.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
Open in Framework → View in Fleet → patient-satisfaction-survey-pipeline.yml

Pulls diagnosis-specific education materials from Confluence, personalizes content based on patient language preference from Salesforce, and sends via WhatsApp with read tracking.

naftiko: '0.5'
info:
  label: Patient Education Content Delivery Pipeline
  description: Pulls diagnosis-specific education materials from Confluence, personalizes content based on patient language preference from Salesforce, and sends via WhatsApp with read tracking.
  tags:
  - patient-education
  - confluence
  - salesforce
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: patient-education
    port: 8080
    tools:
    - name: deliver-education-content
      description: Deliver personalized patient education materials based on diagnosis.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The patient medical record number.
      - name: diagnosis_code
        in: body
        type: string
        description: The ICD-10 diagnosis code.
      - name: phone_number
        in: body
        type: string
        description: Patient phone number.
      steps:
      - name: get-patient-prefs
        type: call
        call: salesforce.get-patient
        with:
          patient_id: '{{patient_id}}'
      - name: get-content
        type: call
        call: confluence.search-content
        with:
          cql: label = '{{diagnosis_code}}' AND label = '{{get-patient-prefs.language}}'
      - name: send-content
        type: call
        call: whatsapp.send-message
        with:
          to: '{{phone_number}}'
          message: 'Health information for your condition: {{get-content.title}}. {{get-content.excerpt}} Read more: {{get-content.url}}'
      - name: log-delivery
        type: call
        call: salesforce.create-activity
        with:
          patient_id: '{{patient_id}}'
          type: education_delivery
          notes: Sent {{get-content.title}} in {{get-patient-prefs.language}} via WhatsApp.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: patients
      path: /sobjects/Contact/{{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-patient
        method: GET
    - name: activities
      path: /sobjects/Activity__c
      operations:
      - name: create-activity
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://kaiserpermanente.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /content/search
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-education-content-delivery-pipeline.yml

Archives a clinical document to Box by uploading it to the appropriate compliance folder.

naftiko: '0.5'
info:
  label: Box Clinical Document Archive
  description: Archives a clinical document to Box by uploading it to the appropriate compliance folder.
  tags:
  - compliance
  - document-management
  - box
capability:
  exposes:
  - type: mcp
    namespace: document-archive
    port: 8080
    tools:
    - name: archive-document
      description: Upload a clinical document to the Box compliance archive.
      inputParameters:
      - name: file_name
        in: body
        type: string
        description: The document file name.
      - name: folder_id
        in: body
        type: string
        description: The Box target folder ID.
      - name: content
        in: body
        type: string
        description: The document content or file reference.
      call: box.upload-file
      with:
        folder_id: '{{folder_id}}'
        file_name: '{{file_name}}'
        content: '{{content}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://upload.box.com/api/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/content
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → box-clinical-document-archive.yml

Identifies patients with chronic conditions due for outreach from Azure Databricks, creates outreach campaigns in Salesforce, sends SMS reminders via WhatsApp, and logs activity in ServiceNow.

naftiko: '0.5'
info:
  label: Chronic Disease Management Outreach
  description: Identifies patients with chronic conditions due for outreach from Azure Databricks, creates outreach campaigns in Salesforce, sends SMS reminders via WhatsApp, and logs activity in ServiceNow.
  tags:
  - population-health
  - chronic-disease
  - azure-databricks
  - salesforce
  - whatsapp
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: chronic-disease
    port: 8080
    tools:
    - name: trigger-outreach
      description: Given a condition code, identify patients due for outreach and execute a multi-channel campaign.
      inputParameters:
      - name: condition_code
        in: body
        type: string
        description: The ICD-10 condition code for the target population.
      - name: campaign_name
        in: body
        type: string
        description: The outreach campaign name.
      steps:
      - name: identify-patients
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM chronic_patients WHERE condition_code = '{{condition_code}}' AND last_outreach_date < DATEADD(month, -6, CURRENT_DATE)
      - name: create-campaign
        type: call
        call: salesforce.create-campaign
        with:
          name: '{{campaign_name}}'
          condition: '{{condition_code}}'
          patient_count: '{{identify-patients.row_count}}'
      - name: send-reminders
        type: call
        call: whatsapp.send-template
        with:
          template: chronic_care_reminder
          recipients: '{{identify-patients.phone_numbers}}'
      - name: log-activity
        type: call
        call: servicenow.create-record
        with:
          table: outreach_log
          campaign_id: '{{create-campaign.campaign_id}}'
          patients_contacted: '{{identify-patients.row_count}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.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: whatsapp
    baseUri: https://graph.facebook.com/v17.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: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → chronic-disease-management-outreach.yml

Searches Google Drive for clinical resources and training materials by keyword.

naftiko: '0.5'
info:
  label: Google Drive Clinical Resource Search
  description: Searches Google Drive for clinical resources and training materials by keyword.
  tags:
  - clinical
  - training
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: clinical-resources
    port: 8080
    tools:
    - name: search-resources
      description: Search Google Drive for clinical resources and training materials.
      inputParameters:
      - name: keyword
        in: body
        type: string
        description: The search keyword.
      call: google-drive.search-files
      with:
        query: name contains '{{keyword}}' and mimeType != 'application/vnd.google-apps.folder'
      outputParameters:
      - name: files
        type: string
        mapping: $.files
      - name: total
        type: string
        mapping: $.files.length
  consumes:
  - type: http
    namespace: google-drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files?q={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-files
        method: GET
Open in Framework → View in Fleet → google-drive-clinical-resource-search.yml

Identifies members overdue for annual wellness visits via Databricks, creates outreach campaigns in HubSpot, and tracks completion in Salesforce.

naftiko: '0.5'
info:
  label: Annual Wellness Visit Outreach Pipeline
  description: Identifies members overdue for annual wellness visits via Databricks, creates outreach campaigns in HubSpot, and tracks completion in Salesforce.
  tags:
  - population-health
  - wellness
  - azure-databricks
  - hubspot
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: wellness-outreach
    port: 8080
    tools:
    - name: launch-wellness-outreach
      description: Launch annual wellness visit outreach campaign for overdue members.
      inputParameters:
      - name: region_code
        in: body
        type: string
        description: The Kaiser region code.
      - name: campaign_name
        in: body
        type: string
        description: The outreach campaign name.
      steps:
      - name: identify-overdue
        type: call
        call: databricks.run-query
        with:
          query: SELECT * FROM member_wellness WHERE region = '{{region_code}}' AND last_awv_date < DATE_SUB(CURRENT_DATE, 365)
      - name: create-campaign
        type: call
        call: hubspot.create-campaign
        with:
          name: '{{campaign_name}}'
          type: wellness_outreach
          member_count: '{{identify-overdue.count}}'
      - name: update-member-records
        type: call
        call: salesforce.bulk-update
        with:
          object: HealthPlanMember__c
          records: '{{identify-overdue.member_ids}}'
          field: AWV_Outreach_Date__c
          value: today
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://kp-analytics.azuredatabricks.net/api/2.0
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: sql-queries
      path: /sql/statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kaiserpermanente.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: bulk
      path: /composite/sobjects
      operations:
      - name: bulk-update
        method: PATCH
Open in Framework → View in Fleet → annual-wellness-visit-outreach-pipeline.yml

Manages pediatric vaccination schedules by pulling immunization records from the EHR, identifying overdue vaccines, scheduling appointments, and notifying parents via WhatsApp.

naftiko: '0.5'
info:
  label: Pediatric Vaccination Schedule Pipeline
  description: Manages pediatric vaccination schedules by pulling immunization records from the EHR, identifying overdue vaccines, scheduling appointments, and notifying parents via WhatsApp.
  tags:
  - pediatrics
  - immunization
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: pediatric-vaccines
    port: 8080
    tools:
    - name: check-vaccination-schedule
      description: Check and manage a pediatric patient's vaccination schedule.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The pediatric patient MRN.
      - name: parent_phone
        in: body
        type: string
        description: Parent phone number for notifications.
      steps:
      - name: get-immunizations
        type: call
        call: epic.get-immunizations
        with:
          patient_id: '{{patient_id}}'
      - name: schedule-vaccines
        type: call
        call: scheduling.create-appointment
        with:
          patient_id: '{{patient_id}}'
          visit_type: immunization
          vaccines_due: '{{get-immunizations.overdue_vaccines}}'
      - name: notify-parent
        type: call
        call: whatsapp.send-message
        with:
          to: '{{parent_phone}}'
          message: 'Your child has {{get-immunizations.overdue_count}} overdue vaccinations. An appointment has been scheduled: {{schedule-vaccines.appointment_id}} on {{schedule-vaccines.date}}.'
  consumes:
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: immunizations
      path: /Immunization?patient={{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-immunizations
        method: GET
  - type: http
    namespace: scheduling
    baseUri: https://kp-scheduling.kaiserpermanente.org/api/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: appointments
      path: /appointments
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: whatsapp
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pediatric-vaccination-schedule-pipeline.yml

Responds to medical device recalls by querying affected devices in Oracle, identifying impacted patients from the EHR, creating recall cases in ServiceNow, and notifying clinical engineering via Teams.

naftiko: '0.5'
info:
  label: Medical Device Recall Response Orchestrator
  description: Responds to medical device recalls by querying affected devices in Oracle, identifying impacted patients from the EHR, creating recall cases in ServiceNow, and notifying clinical engineering via Teams.
  tags:
  - patient-safety
  - device-recall
  - oracle
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: device-recall
    port: 8080
    tools:
    - name: process-device-recall
      description: Process a medical device recall across clinical and supply systems.
      inputParameters:
      - name: device_model
        in: body
        type: string
        description: The recalled device model number.
      - name: recall_class
        in: body
        type: string
        description: FDA recall class (I, II, III).
      - name: engineering_email
        in: body
        type: string
        description: Clinical engineering team email.
      steps:
      - name: find-affected-devices
        type: call
        call: oracle.search-devices
        with:
          model: '{{device_model}}'
      - name: find-affected-patients
        type: call
        call: epic.search-device-patients
        with:
          device_model: '{{device_model}}'
      - name: create-recall-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Device Recall: {{device_model}} (Class {{recall_class}})'
          urgency: '1'
          description: 'Affected devices: {{find-affected-devices.count}}. Affected patients: {{find-affected-patients.count}}.'
      - name: notify-engineering
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{engineering_email}}'
          text: 'DEVICE RECALL: {{device_model}} (Class {{recall_class}}). Devices in inventory: {{find-affected-devices.count}}. Patients with device: {{find-affected-patients.count}}. Incident: {{create-recall-case.number}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://kp-oracle.kaiserpermanente.org/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: devices
      path: /medicalDevices
      operations:
      - name: search-devices
        method: GET
  - type: http
    namespace: epic
    baseUri: https://kp-epic.kaiserpermanente.org/FHIR/api/FHIR/R4
    authentication:
      type: bearer
      token: $secrets.epic_token
    resources:
    - name: device-patients
      path: /Device?model={{device_model}}
      inputParameters:
      - name: device_model
        in: path
      operations:
      - name: search-device-patients
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kaiserpermanente.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → medical-device-recall-response-orchestrator.yml

Queries Oracle E-Business Suite for current inventory levels of medical supplies at a specified facility location.

naftiko: '0.5'
info:
  label: Oracle Supply Chain Inventory Query
  description: Queries Oracle E-Business Suite for current inventory levels of medical supplies at a specified facility location.
  tags:
  - supply-chain
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: supply-inventory
    port: 8080
    tools:
    - name: get-inventory-level
      description: Check inventory levels for a supply item at a specific facility.
      inputParameters:
      - name: item_number
        in: body
        type: string
        description: The supply item number.
      - name: facility_code
        in: body
        type: string
        description: The facility location code.
      call: oracle.get-inventory
      with:
        item_number: '{{item_number}}'
        organization_code: '{{facility_code}}'
      outputParameters:
      - name: quantity_on_hand
        type: number
        mapping: $.items[0].onHandQuantity
      - name: reorder_point
        type: number
        mapping: $.items[0].reorderPoint
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://kp-oracle.kaiserpermanente.org/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: inventory
      path: /inventoryBalances
      operations:
      - name: get-inventory
        method: GET
Open in Framework → View in Fleet → oracle-supply-chain-inventory-query.yml

Manages food recall responses by identifying affected products in SAP, pulling store inventory data, creating pull lists in SharePoint, and notifying all affected stores via Teams.

naftiko: '0.5'
info:
  label: Food Recall Rapid Response Orchestrator
  description: Manages food recall responses by identifying affected products in SAP, pulling store inventory data, creating pull lists in SharePoint, and notifying all affected stores via Teams.
  tags:
  - food-safety
  - recall
  - sap
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: food-ops
    port: 8080
    tools:
    - name: food-recall-rapid-response
      description: Manages food recall responses.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Food Recall Rapid Response Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → food-recall-rapid-response-orchestrator.yml

Pulls promotional item list from Oracle Cloud, enriches with market pricing from Circana, generates ad layouts in Adobe Creative Cloud, publishes digital versions via the Kroger API, and tracks in Snowflake.

naftiko: '0.5'
info:
  label: Weekly Ad Promotion Builder
  description: Pulls promotional item list from Oracle Cloud, enriches with market pricing from Circana, generates ad layouts in Adobe Creative Cloud, publishes digital versions via the Kroger API, and tracks in Snowflake.
  tags:
  - marketing
  - promotions
  - oracle-cloud
  - circana
  - adobe-creative-cloud
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: weekly-ad
    port: 8080
    tools:
    - name: build-weekly-ad
      description: Given a division code and ad week, compile promotional items, check market pricing, build ad, and publish.
      inputParameters:
      - name: division_code
        in: body
        type: string
        description: The Kroger division code.
      - name: ad_week_start
        in: body
        type: string
        description: The Wednesday start date of the ad week (YYYY-MM-DD).
      steps:
      - name: get-promo-items
        type: call
        call: oracle-cloud.get-promotional-items
        with:
          division: '{{division_code}}'
          week_start: '{{ad_week_start}}'
      - name: get-market-pricing
        type: call
        call: circana.get-competitive-prices
        with:
          upcs: '{{get-promo-items.upc_list}}'
          market: '{{division_code}}'
      - name: generate-ad-assets
        type: call
        call: adobe-cc.generate-ad-layout
        with:
          template: weekly_ad_{{division_code}}
          items: '{{get-promo-items.items}}'
          pricing: '{{get-market-pricing.price_data}}'
      - name: publish-digital-ad
        type: call
        call: kroger-api.publish-weekly-ad
        with:
          division: '{{division_code}}'
          week_start: '{{ad_week_start}}'
          asset_url: '{{generate-ad-assets.output_url}}'
      - name: log-ad-build
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.marketing.weekly_ad_log (division, week_start, item_count, published_at) VALUES ('{{division_code}}', '{{ad_week_start}}', {{get-promo-items.item_count}}, CURRENT_TIMESTAMP())
          warehouse: KROGER_MARKETING_WH
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: promotions
      path: /promotionalItems?division={{division}}&weekStart={{week_start}}
      inputParameters:
      - name: division
        in: query
      - name: week_start
        in: query
      operations:
      - name: get-promotional-items
        method: GET
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_api_token
    resources:
    - name: competitive-prices
      path: /pricing/competitive
      operations:
      - name: get-competitive-prices
        method: POST
  - type: http
    namespace: adobe-cc
    baseUri: https://cc-api.adobe.io/v1
    authentication:
      type: bearer
      token: $secrets.adobe_cc_token
    resources:
    - name: ad-layouts
      path: /documents/generate
      operations:
      - name: generate-ad-layout
        method: POST
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: weekly-ads
      path: /weekly-ads
      operations:
      - name: publish-weekly-ad
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://kroger.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → weekly-ad-promotion-builder.yml

Compares physical cycle count results entered in Oracle EBS against book inventory, logs variances in Snowflake, creates ServiceNow tasks for high-variance items, and updates the store's Tableau dashboard.

naftiko: '0.5'
info:
  label: Inventory Cycle Count Reconciliation
  description: Compares physical cycle count results entered in Oracle EBS against book inventory, logs variances in Snowflake, creates ServiceNow tasks for high-variance items, and updates the store's Tableau dashboard.
  tags:
  - inventory
  - oracle-e-business-suite
  - snowflake
  - servicenow
  - tableau
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: cycle-count
    port: 8080
    tools:
    - name: reconcile-cycle-count
      description: Given a store ID and cycle count batch ID, reconcile physical vs. book counts, log variances, and trigger follow-ups.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Kroger store identifier.
      - name: batch_id
        in: body
        type: string
        description: The cycle count batch identifier.
      steps:
      - name: get-count-results
        type: call
        call: oracle-ebs.get-cycle-count
        with:
          store_id: '{{store_id}}'
          batch_id: '{{batch_id}}'
      - name: log-variances
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.inventory.cycle_count_variances SELECT * FROM TABLE(RESULT_SCAN('{{get-count-results.query_id}}')) WHERE abs_variance_pct > 5
          warehouse: KROGER_INVENTORY_WH
      - name: create-variance-tasks
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Cycle count variances: store {{store_id}}, batch {{batch_id}}'
          description: '{{get-count-results.high_variance_count}} items with >5% variance. Total variance value: ${{get-count-results.total_variance_value}}. Top items: {{get-count-results.top_variance_items}}.'
          assigned_group: Inventory_Control
          category: cycle_count
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          site_id: kroger-stores
          datasource_id: inventory-accuracy-{{store_id}}
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: cycle-counts
      path: /cycle-counts?store_id={{store_id}}&batch_id={{batch_id}}
      inputParameters:
      - name: store_id
        in: query
      - name: batch_id
        in: query
      operations:
      - name: get-cycle-count
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://kroger.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://kroger.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: tableau
    baseUri: https://kroger-tableau.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/{{site_id}}/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
      - name: datasource_id
        in: path
      operations:
      - name: refresh-extract
        method: POST
Open in Framework → View in Fleet → inventory-cycle-count-reconciliation.yml

Retrieves district-level store performance metrics from Tableau dashboards.

naftiko: '0.5'
info:
  label: Tableau District Performance Metrics
  description: Retrieves district-level store performance metrics from Tableau dashboards.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: district-analytics
    port: 8080
    tools:
    - name: get-district-metrics
      description: Retrieve district performance metrics.
      inputParameters:
      - name: view_id
        in: body
        type: string
        description: The view id.
      call: tableau.get-view-data
      with:
        view_id: '{{view_id}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://kroger-tableau.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /views
      operations:
      - name: get-view-data
        method: GET
Open in Framework → View in Fleet → tableau-district-performance-metrics.yml

Pulls pending delivery orders from the Kroger API, optimizes routes using Google Maps, updates driver assignments in PeopleSoft, and sends route details to drivers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Delivery Driver Route Optimization
  description: Pulls pending delivery orders from the Kroger API, optimizes routes using Google Maps, updates driver assignments in PeopleSoft, and sends route details to drivers via Microsoft Teams.
  tags:
  - logistics
  - delivery
  - google-maps
  - peoplesoft
  - microsoft-teams
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: delivery-routing
    port: 8080
    tools:
    - name: optimize-delivery-routes
      description: Given a store ID and delivery window, fetch orders, optimize routes, assign drivers, and notify.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store fulfilling deliveries.
      - name: delivery_window
        in: body
        type: string
        description: The delivery time window (e.g. 2PM-4PM).
      steps:
      - name: get-pending-deliveries
        type: call
        call: kroger-api.get-delivery-orders
        with:
          store_id: '{{store_id}}'
          window: '{{delivery_window}}'
      - name: optimize-routes
        type: call
        call: googlemaps.optimize-routes
        with:
          origin: '{{get-pending-deliveries.store_address}}'
          destinations: '{{get-pending-deliveries.delivery_addresses}}'
      - name: assign-drivers
        type: call
        call: peoplesoft.assign-delivery-shifts
        with:
          store_id: '{{store_id}}'
          routes: '{{optimize-routes.route_assignments}}'
          window: '{{delivery_window}}'
      - name: notify-drivers
        type: call
        call: msteams.send-channel-message
        with:
          team_id: store-{{store_id}}
          channel_id: delivery
          text: 'Routes posted for {{delivery_window}} window: {{optimize-routes.route_count}} routes, {{get-pending-deliveries.order_count}} orders. Estimated total distance: {{optimize-routes.total_distance_miles}} miles. Check your assigned route in the driver app.'
  consumes:
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: delivery-orders
      path: /stores/{{store_id}}/deliveries?window={{window}}&status=pending
      inputParameters:
      - name: store_id
        in: path
      - name: window
        in: query
      operations:
      - name: get-delivery-orders
        method: GET
  - type: http
    namespace: googlemaps
    baseUri: https://routes.googleapis.com/distanceMatrix/v2
    authentication:
      type: bearer
      token: $secrets.google_maps_key
    resources:
    - name: route-optimization
      path: /computeRoutes
      operations:
      - name: optimize-routes
        method: POST
  - type: http
    namespace: peoplesoft
    baseUri: https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: delivery-shifts
      path: /delivery-assignments
      operations:
      - name: assign-delivery-shifts
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → delivery-driver-route-optimization.yml

Checks associate food safety and compliance certifications in Workday for regulatory compliance.

naftiko: '0.5'
info:
  label: Workday Associate Certification Check
  description: Checks associate food safety and compliance certifications in Workday for regulatory compliance.
  tags:
  - compliance
  - workday
capability:
  exposes:
  - type: mcp
    namespace: certifications
    port: 8080
    tools:
    - name: check-certs
      description: Check associate certifications.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee id.
      call: workday.get-certs
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: workday
    baseUri: https://kroger-workday.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: certs
      path: /certs
      operations:
      - name: get-certs
        method: GET
Open in Framework → View in Fleet → workday-associate-certification-check.yml

Handles ClickList order exceptions by identifying substitution needs from the order management system, notifying personal shoppers via Teams, and updating customer preferences in Salesforce.

naftiko: '0.5'
info:
  label: Click List Order Exception Handler
  description: Handles ClickList order exceptions by identifying substitution needs from the order management system, notifying personal shoppers via Teams, and updating customer preferences in Salesforce.
  tags:
  - e-commerce
  - clicklist
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: click-ops
    port: 8080
    tools:
    - name: click-list-order-exception-handler
      description: Handles ClickList order exceptions.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Click List Order Exception Handler complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → click-list-order-exception-handler.yml

Personalizes e-commerce experience by pulling customer behavior from 84.51 insights, generating recommendations in Snowflake, updating product rankings, and A/B testing via Google Analytics.

naftiko: '0.5'
info:
  label: E-Commerce Personalization Pipeline
  description: Personalizes e-commerce experience by pulling customer behavior from 84.51 insights, generating recommendations in Snowflake, updating product rankings, and A/B testing via Google Analytics.
  tags:
  - e-commerce
  - personalization
  - 84-51
  - snowflake
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: e-ops
    port: 8080
    tools:
    - name: e-commerce-personalization
      description: Personalizes e-commerce experience.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'E-Commerce Personalization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → e-commerce-personalization-pipeline.yml

Queries the Kroger Teradata data warehouse for promotion performance metrics by campaign ID, returning lift percentage, redemption count, and incremental revenue.

naftiko: '0.5'
info:
  label: Teradata Promotion Performance Query
  description: Queries the Kroger Teradata data warehouse for promotion performance metrics by campaign ID, returning lift percentage, redemption count, and incremental revenue.
  tags:
  - analytics
  - teradata
  - promotions
  - pricing
capability:
  exposes:
  - type: mcp
    namespace: promo-analytics
    port: 8080
    tools:
    - name: get-promotion-performance
      description: Retrieve promotion performance metrics from Teradata by campaign ID.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The promotion campaign identifier.
      call: teradata.execute-query
      with:
        query: SELECT campaign_id, lift_pct, redemption_count, incremental_revenue FROM kroger_promo.campaign_results WHERE campaign_id = '{{campaign_id}}'
      outputParameters:
      - name: lift_pct
        type: number
        mapping: $.results[0].lift_pct
      - name: redemption_count
        type: number
        mapping: $.results[0].redemption_count
      - name: incremental_revenue
        type: number
        mapping: $.results[0].incremental_revenue
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://kroger-td.teradata.com/api/query/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /execute
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → teradata-promotion-performance-query.yml

Checks the goods receipt status of a purchase order in SAP for supply chain tracking.

naftiko: '0.5'
info:
  label: SAP Goods Receipt Status
  description: Checks the goods receipt status of a purchase order in SAP for supply chain tracking.
  tags:
  - supply-chain
  - sap
capability:
  exposes:
  - type: mcp
    namespace: goods-receipt
    port: 8080
    tools:
    - name: get-receipt-status
      description: Check goods receipt status for a PO.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The po number.
      call: sap.get-receipt
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: sap
    baseUri: https://kroger-sap.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: receipts
      path: /receipts
      operations:
      - name: get-receipt
        method: GET
Open in Framework → View in Fleet → sap-goods-receipt-status.yml

When a customer redeems Kroger Plus fuel points, validates the balance in Salesforce, processes the redemption via the Kroger API, logs the transaction in Snowflake, and sends a receipt via Salesforce Marketing Cloud.

naftiko: '0.5'
info:
  label: Loyalty Points Redemption Processor
  description: When a customer redeems Kroger Plus fuel points, validates the balance in Salesforce, processes the redemption via the Kroger API, logs the transaction in Snowflake, and sends a receipt via Salesforce Marketing Cloud.
  tags:
  - loyalty
  - salesforce
  - snowflake
  - salesforce-marketing-cloud
  - fuel-rewards
capability:
  exposes:
  - type: mcp
    namespace: loyalty-redemption
    port: 8080
    tools:
    - name: redeem-fuel-points
      description: Given a loyalty member ID and points to redeem, validate balance, process redemption, log it, and send receipt.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Kroger Plus loyalty member ID.
      - name: points_to_redeem
        in: body
        type: number
        description: Number of fuel points to redeem.
      - name: fuel_station_id
        in: body
        type: string
        description: The fuel station location ID.
      steps:
      - name: get-member
        type: call
        call: salesforce.get-loyalty-member
        with:
          member_id: '{{member_id}}'
      - name: process-redemption
        type: call
        call: kroger-api.redeem-points
        with:
          member_id: '{{member_id}}'
          points: '{{points_to_redeem}}'
          station_id: '{{fuel_station_id}}'
      - name: log-transaction
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.loyalty.redemptions (member_id, points_redeemed, fuel_discount, station_id, timestamp) VALUES ('{{member_id}}', {{points_to_redeem}}, '{{process-redemption.discount_per_gallon}}', '{{fuel_station_id}}', CURRENT_TIMESTAMP())
          warehouse: KROGER_LOYALTY_WH
      - name: send-receipt
        type: call
        call: sfmc.send-triggered-email
        with:
          email: '{{get-member.email}}'
          template: fuel_points_receipt
          data: '{memberId: ''{{member_id}}'', pointsRedeemed: {{points_to_redeem}}, discount: ''{{process-redemption.discount_per_gallon}}'', remainingBalance: ''{{process-redemption.remaining_points}}''}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: loyalty-members
      path: /query?q=SELECT+Id,Email__c,Points_Balance__c+FROM+Loyalty_Member__c+WHERE+Member_Id__c='{{member_id}}'
      inputParameters:
      - name: member_id
        in: query
      operations:
      - name: get-loyalty-member
        method: GET
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: fuel-redemptions
      path: /loyalty/redeem
      operations:
      - name: redeem-points
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://kroger.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: sfmc
    baseUri: https://kroger.rest.marketingcloudapis.com/messaging/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: triggered-sends
      path: /email/messages
      operations:
      - name: send-triggered-email
        method: POST
Open in Framework → View in Fleet → loyalty-points-redemption-processor.yml

Retrieves Kroger.com e-commerce funnel metrics from Google Analytics for a specified date range, including sessions, add-to-cart rate, and checkout conversion.

naftiko: '0.5'
info:
  label: Google Analytics E-Commerce Metrics
  description: Retrieves Kroger.com e-commerce funnel metrics from Google Analytics for a specified date range, including sessions, add-to-cart rate, and checkout conversion.
  tags:
  - analytics
  - google-analytics
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: ecommerce-analytics
    port: 8080
    tools:
    - name: get-ecommerce-funnel
      description: Fetch e-commerce funnel metrics from Google Analytics for kroger.com by date range.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: ga.run-report
      with:
        property: properties/kroger-ecommerce
        dateRanges: '[{startDate: ''{{start_date}}'', endDate: ''{{end_date}}''}]'
        metrics: sessions,addToCarts,checkouts,purchases
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /{{property}}:runReport
      inputParameters:
      - name: property
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-e-commerce-metrics.yml

Optimizes pickup locker capacity by analyzing usage patterns from IoT sensors, forecasting demand in Snowflake, adjusting time slots, and notifying store operations.

naftiko: '0.5'
info:
  label: Pickup Locker Capacity Optimization Pipeline
  description: Optimizes pickup locker capacity by analyzing usage patterns from IoT sensors, forecasting demand in Snowflake, adjusting time slots, and notifying store operations.
  tags:
  - pickup
  - locker
  - azure-iot
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pickup-ops
    port: 8080
    tools:
    - name: pickup-locker-capacity-optimization
      description: Optimizes pickup locker capacity.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Pickup Locker Capacity Optimization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pickup-locker-capacity-optimization-pipeline.yml

Monitors the status of Confluent Kafka event streams for real-time data pipeline health.

naftiko: '0.5'
info:
  label: Confluent Kafka Event Stream Status
  description: Monitors the status of Confluent Kafka event streams for real-time data pipeline health.
  tags:
  - streaming
  - kafka
capability:
  exposes:
  - type: mcp
    namespace: event-streams
    port: 8080
    tools:
    - name: get-stream-status
      description: Check Kafka event stream status.
      inputParameters:
      - name: topic_name
        in: body
        type: string
        description: The topic name.
      call: kafka.get-topic-status
      with:
        topic_name: '{{topic_name}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: kafka
    baseUri: https://kroger-kafka.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kafka_token
    resources:
    - name: topics
      path: /topics
      operations:
      - name: get-topic-status
        method: GET
Open in Framework → View in Fleet → confluent-kafka-event-stream-status.yml

Checks the delivery status of customer notification SMS messages sent via Twilio.

naftiko: '0.5'
info:
  label: Twilio Customer SMS Status
  description: Checks the delivery status of customer notification SMS messages sent via Twilio.
  tags:
  - messaging
  - twilio
capability:
  exposes:
  - type: mcp
    namespace: sms-notifications
    port: 8080
    tools:
    - name: get-sms-status
      description: Check SMS delivery status.
      inputParameters:
      - name: message_sid
        in: body
        type: string
        description: The message sid.
      call: twilio.get-message
      with:
        message_sid: '{{message_sid}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: twilio
    baseUri: https://kroger-twilio.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.twilio_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: get-message
        method: GET
Open in Framework → View in Fleet → twilio-customer-sms-status.yml

Retrieves the current planogram from SharePoint, compares against on-shelf data from the Kroger API, logs discrepancies in ServiceNow, and notifies the merchandising team in Teams.

naftiko: '0.5'
info:
  label: Planogram Compliance Audit
  description: Retrieves the current planogram from SharePoint, compares against on-shelf data from the Kroger API, logs discrepancies in ServiceNow, and notifies the merchandising team in Teams.
  tags:
  - merchandising
  - planogram
  - sharepoint
  - servicenow
  - microsoft-teams
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: planogram-audit
    port: 8080
    tools:
    - name: audit-planogram
      description: Given a store ID and aisle ID, compare the planogram against actual shelf data and report discrepancies.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Kroger store identifier.
      - name: aisle_id
        in: body
        type: string
        description: The aisle identifier to audit.
      steps:
      - name: get-planogram
        type: call
        call: sharepoint.get-file
        with:
          site_id: kroger-merchandising
          file_path: Planograms/{{store_id}}/{{aisle_id}}.json
      - name: get-shelf-data
        type: call
        call: kroger-api.get-aisle-inventory
        with:
          store_id: '{{store_id}}'
          aisle_id: '{{aisle_id}}'
      - name: log-discrepancies
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Planogram discrepancies: store {{store_id}}, aisle {{aisle_id}}'
          description: 'Planogram audit found mismatches. Expected facings: {{get-planogram.total_facings}}. Actual: {{get-shelf-data.total_facings}}. Missing items: {{get-shelf-data.missing_upcs}}.'
          assigned_group: Merchandising
          category: planogram_compliance
      - name: notify-merch-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: merchandising
          channel_id: planogram-audits
          text: 'Audit complete for store {{store_id}}, aisle {{aisle_id}}: {{get-shelf-data.compliance_pct}}% compliant. Task {{log-discrepancies.number}} created for {{get-shelf-data.discrepancy_count}} discrepancies.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: aisle-inventory
      path: /stores/{{store_id}}/aisles/{{aisle_id}}/inventory
      inputParameters:
      - name: store_id
        in: path
      - name: aisle_id
        in: path
      operations:
      - name: get-aisle-inventory
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → planogram-compliance-audit.yml

Reads cold chain temperature sensor data from Azure IoT Hub for perishable goods monitoring.

naftiko: '0.5'
info:
  label: Azure IoT Hub Cold Chain Sensor
  description: Reads cold chain temperature sensor data from Azure IoT Hub for perishable goods monitoring.
  tags:
  - cold-chain
  - azure-iot
capability:
  exposes:
  - type: mcp
    namespace: cold-chain
    port: 8080
    tools:
    - name: get-sensor-data
      description: Read cold chain sensor data from IoT Hub.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: The device id.
      call: iothub.get-telemetry
      with:
        device_id: '{{device_id}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: iothub
    baseUri: https://kroger-iothub.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.iothub_token
    resources:
    - name: telemetry
      path: /telemetry
      operations:
      - name: get-telemetry
        method: GET
Open in Framework → View in Fleet → azure-iot-hub-cold-chain-sensor.yml

Pulls top deals from Oracle Cloud, personalized recommendations from Salesforce, and builds a weekly newsletter in MailChimp targeted to loyalty members, then logs send metrics in Snowflake.

naftiko: '0.5'
info:
  label: MailChimp Weekly Newsletter Orchestrator
  description: Pulls top deals from Oracle Cloud, personalized recommendations from Salesforce, and builds a weekly newsletter in MailChimp targeted to loyalty members, then logs send metrics in Snowflake.
  tags:
  - marketing
  - mailchimp
  - oracle-cloud
  - salesforce
  - snowflake
  - loyalty
capability:
  exposes:
  - type: mcp
    namespace: newsletter
    port: 8080
    tools:
    - name: send-weekly-newsletter
      description: Given a campaign week and division, compile deals, build newsletter, send, and log metrics.
      inputParameters:
      - name: campaign_week
        in: body
        type: string
        description: The campaign week identifier (e.g. 2026-W13).
      - name: division_code
        in: body
        type: string
        description: The Kroger division code.
      steps:
      - name: get-top-deals
        type: call
        call: oracle-cloud.get-promotional-items
        with:
          division: '{{division_code}}'
          week_start: '{{campaign_week}}'
      - name: get-audience-segments
        type: call
        call: salesforce.get-loyalty-segments
        with:
          division: '{{division_code}}'
      - name: create-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: kroger-loyalty-{{division_code}}
          subject: Your Weekly Deals — {{campaign_week}}
          template_id: weekly_deals
          content: '{deals: ''{{get-top-deals.items}}'', segments: ''{{get-audience-segments.segment_ids}}''}'
      - name: send-campaign
        type: call
        call: mailchimp.send-campaign
        with:
          campaign_id: '{{create-campaign.campaign_id}}'
      - name: log-send
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.marketing.newsletter_sends (campaign_week, division, campaign_id, deal_count, audience_size, sent_at) VALUES ('{{campaign_week}}', '{{division_code}}', '{{create-campaign.campaign_id}}', {{get-top-deals.item_count}}, {{get-audience-segments.total_members}}, CURRENT_TIMESTAMP())
          warehouse: KROGER_MARKETING_WH
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: promotions
      path: /promotionalItems?division={{division}}&weekStart={{week_start}}
      inputParameters:
      - name: division
        in: query
      - name: week_start
        in: query
      operations:
      - name: get-promotional-items
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: loyalty-segments
      path: /query?q=SELECT+Id,Segment_Name__c,Member_Count__c+FROM+Loyalty_Segment__c+WHERE+Division__c='{{division}}'
      inputParameters:
      - name: division
        in: query
      operations:
      - name: get-loyalty-segments
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
    - name: campaign-actions
      path: /campaigns/{{campaign_id}}/actions/send
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: send-campaign
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://kroger.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → mailchimp-weekly-newsletter-orchestrator.yml

Conducts hazmat compliance audits by pulling chemical inventory from SAP, verifying SDS documentation in SharePoint, creating audit findings in ServiceNow, and notifying the safety team.

naftiko: '0.5'
info:
  label: Hazmat Compliance Audit Orchestrator
  description: Conducts hazmat compliance audits by pulling chemical inventory from SAP, verifying SDS documentation in SharePoint, creating audit findings in ServiceNow, and notifying the safety team.
  tags:
  - compliance
  - hazmat
  - sap
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hazmat-ops
    port: 8080
    tools:
    - name: hazmat-compliance-audit
      description: Conducts hazmat compliance audits.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Hazmat Compliance Audit Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hazmat-compliance-audit-orchestrator.yml

Pulls vendor delivery performance from Oracle Cloud, quality metrics from ServiceNow, and cost data from Snowflake, then posts a consolidated scorecard to SharePoint for procurement review.

naftiko: '0.5'
info:
  label: Vendor Scorecard Generator
  description: Pulls vendor delivery performance from Oracle Cloud, quality metrics from ServiceNow, and cost data from Snowflake, then posts a consolidated scorecard to SharePoint for procurement review.
  tags:
  - vendor-management
  - oracle-cloud
  - servicenow
  - snowflake
  - sharepoint
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: vendor-scorecard
    port: 8080
    tools:
    - name: generate-vendor-scorecard
      description: Given a vendor ID and review period, compile delivery, quality, and cost metrics into a scorecard and publish to SharePoint.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The Oracle Cloud vendor/supplier identifier.
      - name: period_start
        in: body
        type: string
        description: Review period start date (YYYY-MM-DD).
      - name: period_end
        in: body
        type: string
        description: Review period end date (YYYY-MM-DD).
      steps:
      - name: get-delivery-metrics
        type: call
        call: oracle-cloud.get-vendor-deliveries
        with:
          vendor_id: '{{vendor_id}}'
          from_date: '{{period_start}}'
          to_date: '{{period_end}}'
      - name: get-quality-incidents
        type: call
        call: servicenow.query-incidents
        with:
          query: vendor_id={{vendor_id}}^opened_at>={{period_start}}^opened_at<={{period_end}}^category=vendor_quality
      - name: get-cost-data
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT vendor_id, SUM(invoice_amount) as total_spend, AVG(price_variance_pct) as avg_variance FROM kroger_dw.procurement.vendor_costs WHERE vendor_id = '{{vendor_id}}' AND invoice_date BETWEEN '{{period_start}}' AND '{{period_end}}' GROUP BY vendor_id
          warehouse: KROGER_PROCUREMENT_WH
      - name: publish-scorecard
        type: call
        call: sharepoint.create-list-item
        with:
          site_id: kroger-procurement
          list_name: VendorScorecards
          fields: '{vendor_id: ''{{vendor_id}}'', on_time_pct: ''{{get-delivery-metrics.on_time_rate}}'', quality_incidents: ''{{get-quality-incidents.count}}'', total_spend: ''{{get-cost-data.total_spend}}'', price_variance: ''{{get-cost-data.avg_variance}}''}'
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: vendor-deliveries
      path: /receivingReceipts?q=VendorId={{vendor_id}};ReceiptDate>={{from_date}};ReceiptDate<={{to_date}}
      inputParameters:
      - name: vendor_id
        in: query
      - name: from_date
        in: query
      - name: to_date
        in: query
      operations:
      - name: get-vendor-deliveries
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: query-incidents
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://kroger.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: list-items
      path: /{{site_id}}/lists/{{list_name}}/items
      inputParameters:
      - name: site_id
        in: path
      - name: list_name
        in: path
      operations:
      - name: create-list-item
        method: POST
Open in Framework → View in Fleet → vendor-scorecard-generator.yml

Captures a vendor marketing co-op lead from HubSpot, enriches with vendor data from Oracle Cloud, creates an opportunity in Salesforce, and notifies the vendor partnerships team in Teams.

naftiko: '0.5'
info:
  label: HubSpot Vendor Marketing Lead Capture
  description: Captures a vendor marketing co-op lead from HubSpot, enriches with vendor data from Oracle Cloud, creates an opportunity in Salesforce, and notifies the vendor partnerships team in Teams.
  tags:
  - vendor-management
  - marketing
  - hubspot
  - oracle-cloud
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-marketing
    port: 8080
    tools:
    - name: process-vendor-lead
      description: Given a HubSpot contact ID, enrich with vendor data, create opportunity, and notify partnerships.
      inputParameters:
      - name: hubspot_contact_id
        in: body
        type: string
        description: The HubSpot contact identifier.
      - name: campaign_type
        in: body
        type: string
        description: The co-op marketing campaign type (e.g. endcap, digital, circular).
      steps:
      - name: get-hubspot-contact
        type: call
        call: hubspot.get-contact
        with:
          contact_id: '{{hubspot_contact_id}}'
      - name: get-vendor-details
        type: call
        call: oracle-cloud.get-supplier-by-name
        with:
          supplier_name: '{{get-hubspot-contact.company}}'
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: 'Co-op: {{get-hubspot-contact.company}} — {{campaign_type}}'
          vendor_id: '{{get-vendor-details.supplier_id}}'
          amount: '{{get-hubspot-contact.deal_value}}'
          stage: Qualification
      - name: notify-partnerships
        type: call
        call: msteams.send-channel-message
        with:
          team_id: vendor-partnerships
          channel_id: new-leads
          text: 'New vendor co-op lead: {{get-hubspot-contact.company}} ({{campaign_type}}). Contact: {{get-hubspot-contact.firstname}} {{get-hubspot-contact.lastname}}. Deal value: ${{get-hubspot-contact.deal_value}}. Salesforce opp: {{create-opportunity.opportunity_id}}.'
  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: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: suppliers
      path: /suppliers?q=SupplierName={{supplier_name}}
      inputParameters:
      - name: supplier_name
        in: query
      operations:
      - name: get-supplier-by-name
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → hubspot-vendor-marketing-lead-capture.yml

Tracks meat department yields by collecting production data, analyzing against standards in Snowflake, generating yield reports, and alerting district managers on variances.

naftiko: '0.5'
info:
  label: Meat Department Yield Tracking Pipeline
  description: Tracks meat department yields by collecting production data, analyzing against standards in Snowflake, generating yield reports, and alerting district managers on variances.
  tags:
  - production
  - yield-tracking
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: meat-ops
    port: 8080
    tools:
    - name: meat-department-yield-tracking
      description: Tracks meat department yields.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Meat Department Yield Tracking Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → meat-department-yield-tracking-pipeline.yml

Optimizes last-mile delivery by pulling orders from the OMS, optimizing routes via Google Maps, assigning drivers in Kronos, and sending customer ETAs via Twilio.

naftiko: '0.5'
info:
  label: Last Mile Delivery Optimization Pipeline
  description: Optimizes last-mile delivery by pulling orders from the OMS, optimizing routes via Google Maps, assigning drivers in Kronos, and sending customer ETAs via Twilio.
  tags:
  - delivery
  - last-mile
  - google-maps
  - twilio
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: last-ops
    port: 8080
    tools:
    - name: last-mile-delivery-optimization
      description: Optimizes last-mile delivery.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Last Mile Delivery Optimization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → last-mile-delivery-optimization-pipeline.yml

Looks up current product pricing from the Redis cache for real-time price verification.

naftiko: '0.5'
info:
  label: Redis Product Price Cache Lookup
  description: Looks up current product pricing from the Redis cache for real-time price verification.
  tags:
  - pricing
  - redis
capability:
  exposes:
  - type: mcp
    namespace: price-cache
    port: 8080
    tools:
    - name: get-price
      description: Look up product price from cache.
      inputParameters:
      - name: product_upc
        in: body
        type: string
        description: The product upc.
      call: redis.get-value
      with:
        product_upc: '{{product_upc}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: redis
    baseUri: https://kroger-redis.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.redis_token
    resources:
    - name: cache
      path: /cache
      operations:
      - name: get-value
        method: GET
Open in Framework → View in Fleet → redis-product-price-cache-lookup.yml

Retrieves demand forecasts from Blue Yonder for product demand planning and inventory optimization.

naftiko: '0.5'
info:
  label: Blue Yonder Demand Forecast Retrieval
  description: Retrieves demand forecasts from Blue Yonder for product demand planning and inventory optimization.
  tags:
  - demand-planning
  - blue-yonder
capability:
  exposes:
  - type: mcp
    namespace: demand-forecasting
    port: 8080
    tools:
    - name: get-forecast
      description: Retrieve demand forecast for a product category.
      inputParameters:
      - name: category_id
        in: body
        type: string
        description: The category id.
      call: blueyonder.get-forecast
      with:
        category_id: '{{category_id}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: blueyonder
    baseUri: https://kroger-blueyonder.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.blueyonder_token
    resources:
    - name: forecasts
      path: /forecasts
      operations:
      - name: get-forecast
        method: GET
Open in Framework → View in Fleet → blue-yonder-demand-forecast-retrieval.yml

When a Kroger.com order is placed, validates inventory in Oracle EBS, assigns a pickup slot, creates a fulfillment task in ServiceNow, and sends the customer a confirmation via Salesforce Marketing Cloud.

naftiko: '0.5'
info:
  label: Online Order Fulfillment Orchestrator
  description: When a Kroger.com order is placed, validates inventory in Oracle EBS, assigns a pickup slot, creates a fulfillment task in ServiceNow, and sends the customer a confirmation via Salesforce Marketing Cloud.
  tags:
  - e-commerce
  - fulfillment
  - oracle-e-business-suite
  - servicenow
  - salesforce-marketing-cloud
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: order-fulfillment
    port: 8080
    tools:
    - name: process-online-order
      description: Given an order ID, validate inventory, schedule fulfillment, create a task, and notify the customer.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Kroger.com order identifier.
      - name: customer_email
        in: body
        type: string
        description: The customer email address.
      - name: store_id
        in: body
        type: string
        description: The fulfilling store location code.
      steps:
      - name: get-order-details
        type: call
        call: kroger-api.get-order
        with:
          order_id: '{{order_id}}'
      - name: check-inventory
        type: call
        call: oracle-ebs.check-availability
        with:
          store_id: '{{store_id}}'
          items: '{{get-order-details.line_items}}'
      - name: create-fulfillment-task
        type: call
        call: servicenow.create-task
        with:
          short_description: Fulfill order {{order_id}} at store {{store_id}}
          description: 'Items: {{get-order-details.item_summary}}. Pickup window: {{get-order-details.pickup_window}}. Availability: {{check-inventory.status}}.'
          assigned_group: Store_Fulfillment_{{store_id}}
          category: order_fulfillment
      - name: send-confirmation
        type: call
        call: sfmc.send-triggered-email
        with:
          email: '{{customer_email}}'
          template: order_confirmation
          data: '{orderId: ''{{order_id}}'', pickupWindow: ''{{get-order-details.pickup_window}}'', taskNumber: ''{{create-fulfillment-task.number}}''}'
  consumes:
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: availability
      path: /availability-check
      operations:
      - name: check-availability
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kroger.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: sfmc
    baseUri: https://kroger.rest.marketingcloudapis.com/messaging/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: triggered-sends
      path: /email/messages
      operations:
      - name: send-triggered-email
        method: POST
Open in Framework → View in Fleet → online-order-fulfillment-orchestrator.yml

Tracks produce traceability from farm to shelf by pulling supplier lot data from SAP, logging provenance in the blockchain ledger, and enabling rapid trace-back for food safety investigations.

naftiko: '0.5'
info:
  label: Produce Traceability Pipeline
  description: Tracks produce traceability from farm to shelf by pulling supplier lot data from SAP, logging provenance in the blockchain ledger, and enabling rapid trace-back for food safety investigations.
  tags:
  - food-safety
  - traceability
  - sap
  - blockchain
capability:
  exposes:
  - type: mcp
    namespace: produce-ops
    port: 8080
    tools:
    - name: produce-traceability
      description: Tracks produce traceability from farm to shelf.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Produce Traceability Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → produce-traceability-pipeline.yml

Reviews natural and organic product categories by pulling sales data from Snowflake, comparing trends against Circana market data, and generating category reports in SharePoint.

naftiko: '0.5'
info:
  label: Natural Organic Category Review Pipeline
  description: Reviews natural and organic product categories by pulling sales data from Snowflake, comparing trends against Circana market data, and generating category reports in SharePoint.
  tags:
  - category-management
  - natural-organic
  - snowflake
  - circana
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: natural-ops
    port: 8080
    tools:
    - name: natural-organic-category-review
      description: Reviews natural and organic product categories.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Natural Organic Category Review Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → natural-organic-category-review-pipeline.yml

Queries the Oracle E-Business Suite inventory module for a given product UPC and store location, returning on-hand quantity, reorder point, and last replenishment date.

naftiko: '0.5'
info:
  label: Product Inventory Lookup
  description: Queries the Oracle E-Business Suite inventory module for a given product UPC and store location, returning on-hand quantity, reorder point, and last replenishment date.
  tags:
  - inventory
  - oracle-e-business-suite
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-product-inventory
      description: Look up current on-hand inventory for a product by UPC and store location code.
      inputParameters:
      - name: upc
        in: body
        type: string
        description: The Universal Product Code for the item.
      - name: location_code
        in: body
        type: string
        description: The Kroger store location identifier.
      call: oracle-ebs.get-inventory
      with:
        upc: '{{upc}}'
        location_code: '{{location_code}}'
      outputParameters:
      - name: on_hand_qty
        type: number
        mapping: $.inventory.on_hand_quantity
      - name: reorder_point
        type: number
        mapping: $.inventory.reorder_point
      - name: last_replenishment
        type: string
        mapping: $.inventory.last_replenishment_date
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: inventory-items
      path: /items?upc={{upc}}&location={{location_code}}
      inputParameters:
      - name: upc
        in: query
      - name: location_code
        in: query
      operations:
      - name: get-inventory
        method: GET
Open in Framework → View in Fleet → product-inventory-lookup.yml

Checks the status of a GitHub Actions workflow run, fetches test results, and posts a build status summary to the engineering Teams channel with links to artifacts.

naftiko: '0.5'
info:
  label: GitHub Actions CI/CD Pipeline Monitor
  description: Checks the status of a GitHub Actions workflow run, fetches test results, and posts a build status summary to the engineering Teams channel with links to artifacts.
  tags:
  - devops
  - github-actions
  - microsoft-teams
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: cicd-monitor
    port: 8080
    tools:
    - name: report-build-status
      description: Given a GitHub repo and workflow run ID, fetch status and test results, then post to Teams.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository (org/repo format).
      - name: run_id
        in: body
        type: string
        description: The workflow run ID.
      steps:
      - name: get-run-status
        type: call
        call: github.get-workflow-run
        with:
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: get-test-artifacts
        type: call
        call: github.list-artifacts
        with:
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: post-status
        type: call
        call: msteams.send-channel-message
        with:
          team_id: kroger-engineering
          channel_id: builds
          text: 'Build {{get-run-status.conclusion}}: {{repo}} #{{run_id}}. Branch: {{get-run-status.head_branch}}. Duration: {{get-run-status.duration_minutes}}m. Tests: {{get-test-artifacts.test_count}} ({{get-test-artifacts.pass_count}} passed). URL: {{get-run-status.html_url}}'
  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
    - name: artifacts
      path: /repos/{{repo}}/actions/runs/{{run_id}}/artifacts
      inputParameters:
      - name: repo
        in: path
      - name: run_id
        in: path
      operations:
      - name: list-artifacts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → github-actions-ci-cd-pipeline-monitor.yml

Retrieves store maintenance ticket details from ServiceNow including priority, status, and assigned technician.

naftiko: '0.5'
info:
  label: ServiceNow Store Maintenance Ticket
  description: Retrieves store maintenance ticket details from ServiceNow including priority, status, and assigned technician.
  tags:
  - maintenance
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: store-maintenance
    port: 8080
    tools:
    - name: get-ticket
      description: Look up a store maintenance ticket.
      inputParameters:
      - name: ticket_number
        in: body
        type: string
        description: The ticket number.
      call: servicenow.get-ticket
      with:
        ticket_number: '{{ticket_number}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kroger-servicenow.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tickets
      path: /tickets
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → servicenow-store-maintenance-ticket.yml

When a pricing analyst updates a product price in Oracle Cloud, validates the change against Circana competitive data, pushes to the Kroger API product catalog, and logs the change in Snowflake for audit.

naftiko: '0.5'
info:
  label: Price Change Propagation Workflow
  description: When a pricing analyst updates a product price in Oracle Cloud, validates the change against Circana competitive data, pushes to the Kroger API product catalog, and logs the change in Snowflake for audit.
  tags:
  - pricing
  - oracle-cloud
  - circana
  - snowflake
  - product-catalog
capability:
  exposes:
  - type: mcp
    namespace: pricing
    port: 8080
    tools:
    - name: propagate-price-change
      description: Given a UPC and new price, validate against market data, update the catalog, and log for audit.
      inputParameters:
      - name: upc
        in: body
        type: string
        description: The product UPC.
      - name: new_price
        in: body
        type: number
        description: The new retail price.
      - name: effective_date
        in: body
        type: string
        description: The date the price takes effect (YYYY-MM-DD).
      - name: analyst_id
        in: body
        type: string
        description: The pricing analyst employee ID.
      steps:
      - name: get-competitive-price
        type: call
        call: circana.get-price-benchmark
        with:
          upc: '{{upc}}'
      - name: update-catalog-price
        type: call
        call: kroger-api.update-product-price
        with:
          upc: '{{upc}}'
          price: '{{new_price}}'
          effective_date: '{{effective_date}}'
      - name: log-price-change
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.pricing.change_audit (upc, old_price, new_price, competitive_avg, effective_date, analyst_id, timestamp) VALUES ('{{upc}}', '{{get-competitive-price.current_kroger_price}}', '{{new_price}}', '{{get-competitive-price.market_avg_price}}', '{{effective_date}}', '{{analyst_id}}', CURRENT_TIMESTAMP())
          warehouse: KROGER_PRICING_WH
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_api_token
    resources:
    - name: price-benchmarks
      path: /pricing/benchmark?upc={{upc}}
      inputParameters:
      - name: upc
        in: query
      operations:
      - name: get-price-benchmark
        method: GET
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: products
      path: /products/{{upc}}/price
      inputParameters:
      - name: upc
        in: path
      operations:
      - name: update-product-price
        method: PUT
  - type: http
    namespace: snowflake
    baseUri: https://kroger.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → price-change-propagation-workflow.yml

Analyzes shelf images using Google Cloud Vision API to detect out-of-stock conditions and planogram compliance.

naftiko: '0.5'
info:
  label: Google Cloud Vision Shelf Scan
  description: Analyzes shelf images using Google Cloud Vision API to detect out-of-stock conditions and planogram compliance.
  tags:
  - computer-vision
  - google-cloud
capability:
  exposes:
  - type: mcp
    namespace: shelf-analytics
    port: 8080
    tools:
    - name: scan-shelf
      description: Analyze a shelf image for stock conditions.
      inputParameters:
      - name: image_url
        in: body
        type: string
        description: The image url.
      call: vision.analyze-image
      with:
        image_url: '{{image_url}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: vision
    baseUri: https://kroger-vision.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.vision_token
    resources:
    - name: analysis
      path: /analysis
      operations:
      - name: analyze-image
        method: GET
Open in Framework → View in Fleet → google-cloud-vision-shelf-scan.yml

Tracks a store remodel project by pulling milestones from Microsoft Project, budget data from Oracle Cloud, and posting weekly status updates to SharePoint and Microsoft Teams.

naftiko: '0.5'
info:
  label: Store Remodel Project Tracker
  description: Tracks a store remodel project by pulling milestones from Microsoft Project, budget data from Oracle Cloud, and posting weekly status updates to SharePoint and Microsoft Teams.
  tags:
  - store-ops
  - project-management
  - microsoft-project
  - oracle-cloud
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-remodel
    port: 8080
    tools:
    - name: generate-remodel-status
      description: Given a project ID and store ID, pull milestones and budget data, then publish a status update.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Microsoft Project plan identifier.
      - name: store_id
        in: body
        type: string
        description: The store being remodeled.
      steps:
      - name: get-milestones
        type: call
        call: msproject.get-tasks
        with:
          project_id: '{{project_id}}'
          filter: milestone=true
      - name: get-budget
        type: call
        call: oracle-cloud.get-project-costs
        with:
          project_id: remodel-{{store_id}}
      - name: publish-status
        type: call
        call: sharepoint.create-list-item
        with:
          site_id: kroger-construction
          list_name: RemodelStatus
          fields: '{store_id: ''{{store_id}}'', pct_complete: ''{{get-milestones.pct_complete}}'', budget_spent: ''{{get-budget.spent_to_date}}'', budget_total: ''{{get-budget.total_budget}}'', next_milestone: ''{{get-milestones.next_milestone}}''}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-channel-message
        with:
          team_id: store-construction
          channel_id: remodel-{{store_id}}
          text: 'Weekly remodel update for store {{store_id}}: {{get-milestones.pct_complete}}% complete. Budget: ${{get-budget.spent_to_date}}/${{get-budget.total_budget}}. Next milestone: {{get-milestones.next_milestone}} on {{get-milestones.next_milestone_date}}.'
  consumes:
  - type: http
    namespace: msproject
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: project-tasks
      path: /planner/plans/{{project_id}}/tasks
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-tasks
        method: GET
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: project-costs
      path: /projects/{{project_id}}/costs
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - 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: create-list-item
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → store-remodel-project-tracker.yml

Triggers an Apache Spark inventory optimization job, monitors execution via Datadog, stores results in Snowflake, and notifies the analytics team in Teams upon completion.

naftiko: '0.5'
info:
  label: Spark Inventory Analytics Job Trigger
  description: Triggers an Apache Spark inventory optimization job, monitors execution via Datadog, stores results in Snowflake, and notifies the analytics team in Teams upon completion.
  tags:
  - analytics
  - apache-spark
  - datadog
  - snowflake
  - microsoft-teams
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: spark-analytics
    port: 8080
    tools:
    - name: run-inventory-analytics
      description: Given an analysis type and date range, trigger Spark job, monitor, store results, and notify.
      inputParameters:
      - name: analysis_type
        in: body
        type: string
        description: Type of analysis (e.g. safety_stock, abc_classification, dead_stock).
      - name: date_range_start
        in: body
        type: string
        description: Analysis period start date.
      - name: date_range_end
        in: body
        type: string
        description: Analysis period end date.
      steps:
      - name: submit-spark-job
        type: call
        call: spark.submit-job
        with:
          job_name: inventory-{{analysis_type}}
          params: '{start: ''{{date_range_start}}'', end: ''{{date_range_end}}''}'
      - name: monitor-job
        type: call
        call: datadog.query-metrics
        with:
          query: avg:spark.job.duration{job_name:inventory-{{analysis_type}}}
          from: now-1h
          to: now
      - name: store-results
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.inventory.analytics_results SELECT '{{analysis_type}}', * FROM @kroger_stage/spark_output/inventory-{{analysis_type}}/latest/
          warehouse: KROGER_ANALYTICS_WH
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: inventory-analytics
          channel_id: job-results
          text: 'Spark job complete: inventory-{{analysis_type}} for {{date_range_start}} to {{date_range_end}}. Job ID: {{submit-spark-job.job_id}}. Duration: {{monitor-job.last_value}}s. Results loaded to Snowflake.'
  consumes:
  - type: http
    namespace: spark
    baseUri: https://kroger-spark.internal.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.spark_token
    resources:
    - name: jobs
      path: /submissions/create
      operations:
      - name: submit-job
        method: POST
  - 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
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://kroger.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → spark-inventory-analytics-job-trigger.yml

Retrieves an open ServiceNow incident for a Kroger store by incident number, returning current status, priority, assigned group, and resolution notes.

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

When Dynatrace detects a POS system anomaly, correlates with Datadog infrastructure metrics, creates a ServiceNow priority incident, and pages the store IT team via Teams.

naftiko: '0.5'
info:
  label: POS System Outage Response
  description: When Dynatrace detects a POS system anomaly, correlates with Datadog infrastructure metrics, creates a ServiceNow priority incident, and pages the store IT team via Teams.
  tags:
  - store-ops
  - incident-management
  - dynatrace
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pos-incident
    port: 8080
    tools:
    - name: handle-pos-outage
      description: Given a Dynatrace problem ID and store ID, correlate metrics, create incident, and notify IT team.
      inputParameters:
      - name: problem_id
        in: body
        type: string
        description: The Dynatrace problem identifier.
      - name: store_id
        in: body
        type: string
        description: The affected store location.
      steps:
      - name: get-dynatrace-problem
        type: call
        call: dynatrace.get-problem
        with:
          problem_id: '{{problem_id}}'
      - name: get-infra-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: avg:system.cpu.user{store:{{store_id}},service:pos} by {host}
          from: now-30m
          to: now
      - name: create-p1-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'POS outage: store {{store_id}} — {{get-dynatrace-problem.title}}'
          description: 'Dynatrace problem: {{get-dynatrace-problem.title}}. Impact: {{get-dynatrace-problem.impact_level}}. Root cause: {{get-dynatrace-problem.root_cause}}. Infra status: CPU avg {{get-infra-metrics.avg_cpu}}%.'
          category: pos_system
          priority: '1'
          assigned_group: Store_IT
      - name: page-it-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: store-it-support
          channel_id: critical-alerts
          text: 'P1 POS OUTAGE at store {{store_id}}: {{get-dynatrace-problem.title}}. Impact: {{get-dynatrace-problem.impact_level}}. Incident: {{create-p1-incident.number}}. CPU: {{get-infra-metrics.avg_cpu}}%. Immediate response required.'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://kroger.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: 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
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → pos-system-outage-response.yml

Consolidates milk run delivery routes by analyzing delivery volumes in Snowflake, optimizing routes via Google Maps, updating schedules in the TMS, and notifying logistics teams.

naftiko: '0.5'
info:
  label: Milk Run Route Consolidation Pipeline
  description: Consolidates milk run delivery routes by analyzing delivery volumes in Snowflake, optimizing routes via Google Maps, updating schedules in the TMS, and notifying logistics teams.
  tags:
  - logistics
  - routing
  - snowflake
  - google-maps
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: milk-ops
    port: 8080
    tools:
    - name: milk-run-route-consolidation
      description: Consolidates milk run delivery routes.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Milk Run Route Consolidation Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → milk-run-route-consolidation-pipeline.yml

When a customer checks in for curbside pickup via the Kroger app, retrieves order details, updates fulfillment status in ServiceNow, and sends real-time updates to the customer and the store runner via Microsoft Teams.

naftiko: '0.5'
info:
  label: Curbside Pickup Notification Workflow
  description: When a customer checks in for curbside pickup via the Kroger app, retrieves order details, updates fulfillment status in ServiceNow, and sends real-time updates to the customer and the store runner via Microsoft Teams.
  tags:
  - e-commerce
  - pickup
  - servicenow
  - microsoft-teams
  - customer-experience
capability:
  exposes:
  - type: mcp
    namespace: curbside-pickup
    port: 8080
    tools:
    - name: process-curbside-checkin
      description: Given an order ID, parking spot, and store ID, update systems and notify all parties.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The pickup order identifier.
      - name: parking_spot
        in: body
        type: string
        description: The parking spot number.
      - name: store_id
        in: body
        type: string
        description: The store location.
      steps:
      - name: get-order
        type: call
        call: kroger-api.get-order
        with:
          order_id: '{{order_id}}'
      - name: update-fulfillment
        type: call
        call: servicenow.update-task
        with:
          task_id: '{{get-order.fulfillment_task_id}}'
          state: in_progress
          work_notes: 'Customer checked in. Parking spot: {{parking_spot}}.'
      - name: notify-runner
        type: call
        call: msteams.send-channel-message
        with:
          team_id: store-{{store_id}}
          channel_id: curbside
          text: 'PICKUP READY: Order {{order_id}} — Customer in spot {{parking_spot}}. {{get-order.bag_count}} bags, {{get-order.item_count}} items. Customer: {{get-order.customer_name}}. Vehicle: {{get-order.vehicle_description}}.'
  consumes:
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task/{{task_id}}
      inputParameters:
      - name: task_id
        in: path
      operations:
      - name: update-task
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → curbside-pickup-notification-workflow.yml

Optimizes fuel center pricing by analyzing competitor prices from market data, calculating optimal margins in Snowflake, updating POS pricing, and notifying fuel center managers.

naftiko: '0.5'
info:
  label: Fuel Center Pricing Optimization Pipeline
  description: Optimizes fuel center pricing by analyzing competitor prices from market data, calculating optimal margins in Snowflake, updating POS pricing, and notifying fuel center managers.
  tags:
  - fuel
  - pricing
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fuel-ops
    port: 8080
    tools:
    - name: fuel-center-pricing-optimization
      description: Optimizes fuel center pricing.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Fuel Center Pricing Optimization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fuel-center-pricing-optimization-pipeline.yml

Rebalances pharmacy inventory across stores by analyzing stock levels in SAP, optimizing transfers, creating transfer orders, and notifying pharmacy managers via Teams.

naftiko: '0.5'
info:
  label: Pharmacy Inventory Rebalancing Orchestrator
  description: Rebalances pharmacy inventory across stores by analyzing stock levels in SAP, optimizing transfers, creating transfer orders, and notifying pharmacy managers via Teams.
  tags:
  - pharmacy
  - inventory
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-ops
    port: 8080
    tools:
    - name: pharmacy-inventory-rebalancing
      description: Rebalances pharmacy inventory across stores.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Pharmacy Inventory Rebalancing Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacy-inventory-rebalancing-orchestrator.yml

Processes a prescription transfer between Kroger pharmacy locations by looking up the prescription in Oracle EBS, verifying patient identity in Salesforce, creating a transfer record, and notifying the receiving pharmacy via Microsoft Teams.

naftiko: '0.5'
info:
  label: Pharmacy Prescription Transfer Workflow
  description: Processes a prescription transfer between Kroger pharmacy locations by looking up the prescription in Oracle EBS, verifying patient identity in Salesforce, creating a transfer record, and notifying the receiving pharmacy via Microsoft Teams.
  tags:
  - pharmacy
  - oracle-e-business-suite
  - salesforce
  - microsoft-teams
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: pharmacy
    port: 8080
    tools:
    - name: transfer-prescription
      description: Given a prescription ID, originating and destination pharmacy IDs, process the transfer and notify the receiving location.
      inputParameters:
      - name: rx_number
        in: body
        type: string
        description: The prescription number.
      - name: from_pharmacy_id
        in: body
        type: string
        description: The originating pharmacy store ID.
      - name: to_pharmacy_id
        in: body
        type: string
        description: The destination pharmacy store ID.
      - name: patient_id
        in: body
        type: string
        description: The patient identifier.
      steps:
      - name: get-prescription
        type: call
        call: oracle-ebs.get-prescription
        with:
          rx_number: '{{rx_number}}'
          pharmacy_id: '{{from_pharmacy_id}}'
      - name: verify-patient
        type: call
        call: salesforce.get-patient
        with:
          patient_id: '{{patient_id}}'
      - name: create-transfer
        type: call
        call: oracle-ebs.create-rx-transfer
        with:
          rx_number: '{{rx_number}}'
          from_pharmacy: '{{from_pharmacy_id}}'
          to_pharmacy: '{{to_pharmacy_id}}'
          patient_name: '{{verify-patient.full_name}}'
      - name: notify-destination
        type: call
        call: msteams.send-channel-message
        with:
          team_id: pharmacy-{{to_pharmacy_id}}
          channel_id: transfers
          text: 'Incoming Rx transfer: {{rx_number}} for patient {{verify-patient.full_name}} from store {{from_pharmacy_id}}. Medication: {{get-prescription.drug_name}}, {{get-prescription.dosage}}. Transfer ID: {{create-transfer.transfer_id}}.'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://kroger-ebs.oraclecloud.com/webservices/rest/pharmacy/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: prescriptions
      path: /prescriptions/{{rx_number}}?pharmacy_id={{pharmacy_id}}
      inputParameters:
      - name: rx_number
        in: path
      - name: pharmacy_id
        in: query
      operations:
      - name: get-prescription
        method: GET
    - name: transfers
      path: /transfers
      operations:
      - name: create-rx-transfer
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: patients
      path: /query?q=SELECT+Id,Full_Name__c+FROM+Patient__c+WHERE+Patient_Id__c='{{patient_id}}'
      inputParameters:
      - name: patient_id
        in: query
      operations:
      - name: get-patient
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → pharmacy-prescription-transfer-workflow.yml

Searches the Kroger product catalog in Elasticsearch by keyword, returning matched products with name, UPC, department, aisle, and current price.

naftiko: '0.5'
info:
  label: Elasticsearch Product Search
  description: Searches the Kroger product catalog in Elasticsearch by keyword, returning matched products with name, UPC, department, aisle, and current price.
  tags:
  - search
  - elasticsearch
  - product-catalog
capability:
  exposes:
  - type: mcp
    namespace: product-search
    port: 8080
    tools:
    - name: search-products
      description: Search the Kroger product catalog in Elasticsearch by keyword.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: The product search keyword or phrase.
      - name: store_id
        in: body
        type: string
        description: Optional store ID to filter by local availability.
      call: elasticsearch.search-products
      with:
        index: kroger-product-catalog
        query: '{{search_term}}'
        store_filter: '{{store_id}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://kroger-es.elastic-cloud.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: product-index
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search-products
        method: POST
Open in Framework → View in Fleet → elasticsearch-product-search.yml

Pulls historical sales from Snowflake, runs demand forecast via Azure Machine Learning, stores predictions back in Snowflake, and notifies the planning team in Teams with forecast highlights.

naftiko: '0.5'
info:
  label: Demand Forecasting Pipeline
  description: Pulls historical sales from Snowflake, runs demand forecast via Azure Machine Learning, stores predictions back in Snowflake, and notifies the planning team in Teams with forecast highlights.
  tags:
  - supply-chain
  - forecasting
  - snowflake
  - azure-machine-learning
  - microsoft-teams
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: demand-forecasting
    port: 8080
    tools:
    - name: run-demand-forecast
      description: Given a product category and forecast horizon, generate demand predictions and notify the planning team.
      inputParameters:
      - name: category
        in: body
        type: string
        description: The product category to forecast.
      - name: horizon_days
        in: body
        type: number
        description: Number of days to forecast forward.
      - name: division_code
        in: body
        type: string
        description: The Kroger division for regional forecasting.
      steps:
      - name: get-historical-sales
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT sale_date, SUM(units_sold) as daily_units FROM kroger_dw.sales.daily_transactions WHERE category = '{{category}}' AND division = '{{division_code}}' AND sale_date >= DATEADD(day, -365, CURRENT_DATE()) GROUP BY sale_date ORDER BY sale_date
          warehouse: KROGER_ANALYTICS_WH
      - name: run-ml-forecast
        type: call
        call: azureml.invoke-endpoint
        with:
          endpoint_name: kroger-demand-forecast
          data: '{historical: ''{{get-historical-sales.results}}'', horizon: {{horizon_days}}, category: ''{{category}}'', division: ''{{division_code}}''}'
      - name: store-predictions
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.supply_chain.demand_forecasts (category, division, forecast_date, predicted_units, confidence_interval, generated_at) SELECT '{{category}}', '{{division_code}}', forecast_date, predicted_units, confidence_interval, CURRENT_TIMESTAMP() FROM TABLE(RESULT_SCAN('{{run-ml-forecast.result_id}}'))
          warehouse: KROGER_SUPPLY_CHAIN_WH
      - name: notify-planners
        type: call
        call: msteams.send-channel-message
        with:
          team_id: supply-chain-planning
          channel_id: forecasts
          text: 'Demand forecast complete for {{category}} ({{division_code}}): {{horizon_days}}-day horizon. Peak demand expected {{run-ml-forecast.peak_date}} at {{run-ml-forecast.peak_units}} units. Avg daily: {{run-ml-forecast.avg_daily_units}}. Confidence: {{run-ml-forecast.confidence_pct}}%.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://kroger.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: azureml
    baseUri: https://kroger-ml.eastus.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: endpoints
      path: /score
      operations:
      - name: invoke-endpoint
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → demand-forecasting-pipeline.yml

Coordinates community food donations by identifying surplus inventory from SAP, scheduling pickups with food banks via Salesforce, generating donation receipts in SharePoint, and tracking totals.

naftiko: '0.5'
info:
  label: Community Donation Coordination Orchestrator
  description: Coordinates community food donations by identifying surplus inventory from SAP, scheduling pickups with food banks via Salesforce, generating donation receipts in SharePoint, and tracking totals.
  tags:
  - community
  - donations
  - sap
  - salesforce
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: community-ops
    port: 8080
    tools:
    - name: community-donation-coordination
      description: Coordinates community food donations.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Community Donation Coordination Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → community-donation-coordination-orchestrator.yml

When a customer complaint arrives, looks up order history in the Kroger API, retrieves the loyalty profile from Salesforce, creates a ServiceNow case, and sends a personalized apology email via Salesforce Marketing Cloud.

naftiko: '0.5'
info:
  label: Customer Complaint Resolution Pipeline
  description: When a customer complaint arrives, looks up order history in the Kroger API, retrieves the loyalty profile from Salesforce, creates a ServiceNow case, and sends a personalized apology email via Salesforce Marketing Cloud.
  tags:
  - customer-service
  - salesforce
  - servicenow
  - salesforce-marketing-cloud
  - loyalty
capability:
  exposes:
  - type: mcp
    namespace: customer-complaints
    port: 8080
    tools:
    - name: process-complaint
      description: Given a customer email, order ID, and complaint details, look up history, create a case, and send an apology.
      inputParameters:
      - name: customer_email
        in: body
        type: string
        description: The complaining customer's email.
      - name: order_id
        in: body
        type: string
        description: The order ID related to the complaint.
      - name: complaint_text
        in: body
        type: string
        description: The customer's complaint description.
      steps:
      - name: get-order-history
        type: call
        call: kroger-api.get-order
        with:
          order_id: '{{order_id}}'
      - name: get-customer
        type: call
        call: salesforce.get-contact-by-email
        with:
          email: '{{customer_email}}'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Customer complaint: order {{order_id}}'
          description: 'Customer: {{get-customer.full_name}} ({{get-customer.loyalty_tier}}). Order: {{order_id}} placed {{get-order-history.order_date}}. Complaint: {{complaint_text}}.'
          category: customer_complaint
          assigned_group: Customer_Service
      - name: send-acknowledgment
        type: call
        call: sfmc.send-triggered-email
        with:
          email: '{{customer_email}}'
          template: complaint_acknowledgment
          data: '{firstName: ''{{get-customer.first_name}}'', caseNumber: ''{{create-case.number}}'', orderId: ''{{order_id}}''}'
  consumes:
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_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://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /query?q=SELECT+Id,FirstName,Full_Name__c,Loyalty_Tier__c+FROM+Contact+WHERE+Email='{{email}}'
      inputParameters:
      - name: email
        in: query
      operations:
      - name: get-contact-by-email
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/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: sfmc
    baseUri: https://kroger.rest.marketingcloudapis.com/messaging/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: triggered-sends
      path: /email/messages
      operations:
      - name: send-triggered-email
        method: POST
Open in Framework → View in Fleet → customer-complaint-resolution-pipeline.yml

Fetches the latest shrink and loss prevention report from Power BI for a given Kroger division, returning embedded report URL and last refresh timestamp.

naftiko: '0.5'
info:
  label: Power BI Shrink Report Retrieval
  description: Fetches the latest shrink and loss prevention report from Power BI for a given Kroger division, returning embedded report URL and last refresh timestamp.
  tags:
  - analytics
  - power-bi
  - loss-prevention
capability:
  exposes:
  - type: mcp
    namespace: loss-prevention
    port: 8080
    tools:
    - name: get-shrink-report
      description: Retrieve the latest shrink report from Power BI by division code.
      inputParameters:
      - name: division_code
        in: body
        type: string
        description: The Kroger division code (e.g. CINCY, DALLAS).
      call: powerbi.get-report
      with:
        group_id: kroger-lp-workspace
        report_id: shrink-{{division_code}}
      outputParameters:
      - name: report_url
        type: string
        mapping: $.embedUrl
      - name: last_refresh
        type: string
        mapping: $.lastRefreshTime
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: reports
      path: /groups/{{group_id}}/reports/{{report_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → power-bi-shrink-report-retrieval.yml

Consumes product price change events from Apache Kafka, transforms and loads them into Snowflake, and triggers a Tableau dashboard refresh for the pricing analytics team.

naftiko: '0.5'
info:
  label: Kafka Event Stream to Snowflake Loader
  description: Consumes product price change events from Apache Kafka, transforms and loads them into Snowflake, and triggers a Tableau dashboard refresh for the pricing analytics team.
  tags:
  - data-engineering
  - apache-kafka
  - snowflake
  - tableau
  - pricing
capability:
  exposes:
  - type: mcp
    namespace: kafka-snowflake-loader
    port: 8080
    tools:
    - name: load-price-events
      description: Given a Kafka topic and time window, consume events, load to Snowflake, and refresh the dashboard.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: The Kafka topic name (e.g. kroger.pricing.changes).
      - name: from_offset
        in: body
        type: string
        description: Starting offset or timestamp.
      steps:
      - name: consume-events
        type: call
        call: kafka.consume-messages
        with:
          topic: '{{topic}}'
          from_offset: '{{from_offset}}'
          max_messages: '10000'
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-query
        with:
          statement: COPY INTO kroger_dw.pricing.price_change_events FROM @kroger_stage/{{consume-events.batch_file}} FILE_FORMAT = (TYPE = 'JSON')
          warehouse: KROGER_ETL_WH
      - name: refresh-pricing-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          site_id: kroger-analytics
          datasource_id: pricing-changes
  consumes:
  - type: http
    namespace: kafka
    baseUri: https://kroger-kafka.confluent.cloud/kafka/v3
    authentication:
      type: basic
      username: $secrets.kafka_api_key
      password: $secrets.kafka_api_secret
    resources:
    - name: consumer
      path: /clusters/kroger-prod/topics/{{topic}}/records
      inputParameters:
      - name: topic
        in: path
      operations:
      - name: consume-messages
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://kroger.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: tableau
    baseUri: https://kroger-tableau.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/{{site_id}}/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: site_id
        in: path
      - name: datasource_id
        in: path
      operations:
      - name: refresh-extract
        method: POST
Open in Framework → View in Fleet → kafka-event-stream-to-snowflake-loader.yml

Detects abandoned carts via Google Analytics, enriches customer data from Salesforce, sends personalized recovery emails through Salesforce Marketing Cloud, and logs the campaign interaction in Snowflake.

naftiko: '0.5'
info:
  label: E-Commerce Cart Abandonment Recovery
  description: Detects abandoned carts via Google Analytics, enriches customer data from Salesforce, sends personalized recovery emails through Salesforce Marketing Cloud, and logs the campaign interaction in Snowflake.
  tags:
  - e-commerce
  - marketing
  - google-analytics
  - salesforce
  - salesforce-marketing-cloud
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cart-recovery
    port: 8080
    tools:
    - name: recover-abandoned-cart
      description: Given a cart session ID and customer email, enrich the profile, send recovery email, and log the interaction.
      inputParameters:
      - name: session_id
        in: body
        type: string
        description: The abandoned cart session identifier.
      - name: customer_email
        in: body
        type: string
        description: The customer email address.
      steps:
      - name: get-cart-data
        type: call
        call: ga.get-session-data
        with:
          session_id: '{{session_id}}'
          property: properties/kroger-ecommerce
      - name: get-customer-profile
        type: call
        call: salesforce.get-contact-by-email
        with:
          email: '{{customer_email}}'
      - name: send-recovery-email
        type: call
        call: sfmc.send-triggered-email
        with:
          email: '{{customer_email}}'
          template: cart_abandonment
          data: '{firstName: ''{{get-customer-profile.first_name}}'', cartItems: ''{{get-cart-data.cart_items}}'', cartTotal: ''{{get-cart-data.cart_total}}'', loyaltyTier: ''{{get-customer-profile.loyalty_tier}}''}'
      - name: log-recovery-attempt
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.marketing.cart_recovery_log (session_id, customer_email, cart_total, items_count, loyalty_tier, sent_at) VALUES ('{{session_id}}', '{{customer_email}}', {{get-cart-data.cart_total}}, {{get-cart-data.item_count}}, '{{get-customer-profile.loyalty_tier}}', CURRENT_TIMESTAMP())
          warehouse: KROGER_MARKETING_WH
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: sessions
      path: /{{property}}/sessions/{{session_id}}
      inputParameters:
      - name: property
        in: path
      - name: session_id
        in: path
      operations:
      - name: get-session-data
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /query?q=SELECT+Id,FirstName,Loyalty_Tier__c+FROM+Contact+WHERE+Email='{{email}}'
      inputParameters:
      - name: email
        in: query
      operations:
      - name: get-contact-by-email
        method: GET
  - type: http
    namespace: sfmc
    baseUri: https://kroger.rest.marketingcloudapis.com/messaging/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: triggered-sends
      path: /email/messages
      operations:
      - name: send-triggered-email
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://kroger.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → e-commerce-cart-abandonment-recovery.yml

Retrieves a Kroger Plus loyalty member profile from Salesforce by member ID, returning points balance, tier status, and preferred store.

naftiko: '0.5'
info:
  label: Loyalty Member Profile Lookup
  description: Retrieves a Kroger Plus loyalty member profile from Salesforce by member ID, returning points balance, tier status, and preferred store.
  tags:
  - loyalty
  - salesforce
  - customer-experience
capability:
  exposes:
  - type: mcp
    namespace: loyalty
    port: 8080
    tools:
    - name: get-loyalty-member
      description: Fetch a Kroger Plus loyalty member profile by member ID. Returns points balance, tier, preferred store, and enrollment date.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Kroger Plus loyalty member ID.
      call: salesforce.get-loyalty-member
      with:
        member_id: '{{member_id}}'
      outputParameters:
      - name: points_balance
        type: number
        mapping: $.records[0].Points_Balance__c
      - name: tier
        type: string
        mapping: $.records[0].Tier__c
      - name: preferred_store
        type: string
        mapping: $.records[0].Preferred_Store__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: loyalty-members
      path: /query?q=SELECT+Id,Points_Balance__c,Tier__c,Preferred_Store__c+FROM+Loyalty_Member__c+WHERE+Member_Id__c='{{member_id}}'
      inputParameters:
      - name: member_id
        in: query
      operations:
      - name: get-loyalty-member
        method: GET
Open in Framework → View in Fleet → loyalty-member-profile-lookup.yml

Queries Datadog for current infrastructure health metrics for a given Kroger store, including POS system uptime, network latency, and active alerts.

naftiko: '0.5'
info:
  label: Datadog Store Infrastructure Health
  description: Queries Datadog for current infrastructure health metrics for a given Kroger store, including POS system uptime, network latency, and active alerts.
  tags:
  - monitoring
  - datadog
  - store-ops
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: store-monitoring
    port: 8080
    tools:
    - name: get-store-health
      description: Retrieve infrastructure health metrics from Datadog for a Kroger store location by store tag.
      inputParameters:
      - name: store_tag
        in: body
        type: string
        description: The Datadog tag for the store (e.g. store:kroger-0412).
      call: datadog.query-metrics
      with:
        query: avg:system.cpu.user{{{store_tag}}} by {host}
        from: now-1h
        to: now
  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
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-store-infrastructure-health.yml

Prepares for store grand openings by verifying inventory in SAP, scheduling staff in Kronos, launching marketing campaigns via MailChimp, and coordinating with leadership via Teams.

naftiko: '0.5'
info:
  label: Store Grand Opening Preparation Orchestrator
  description: Prepares for store grand openings by verifying inventory in SAP, scheduling staff in Kronos, launching marketing campaigns via MailChimp, and coordinating with leadership via Teams.
  tags:
  - store-operations
  - grand-opening
  - sap
  - kronos
  - mailchimp
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: store-grand-opening-preparation
      description: Prepares for store grand openings.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Store Grand Opening Preparation Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-grand-opening-preparation-orchestrator.yml

Investigates inventory shrink by pulling loss data from SAP, analyzing patterns in Snowflake, creating investigation cases in ServiceNow, and notifying the asset protection team.

naftiko: '0.5'
info:
  label: Shrink Investigation Orchestrator
  description: Investigates inventory shrink by pulling loss data from SAP, analyzing patterns in Snowflake, creating investigation cases in ServiceNow, and notifying the asset protection team.
  tags:
  - asset-protection
  - shrink
  - sap
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: shrink-ops
    port: 8080
    tools:
    - name: shrink-investigation
      description: Investigates inventory shrink.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Shrink Investigation Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → shrink-investigation-orchestrator.yml

Orchestrates new vendor item setup by collecting product data from vendors, creating master records in SAP, setting up planograms in JDA, and notifying category managers.

naftiko: '0.5'
info:
  label: Vendor New Item Setup Orchestrator
  description: Orchestrates new vendor item setup by collecting product data from vendors, creating master records in SAP, setting up planograms in JDA, and notifying category managers.
  tags:
  - vendor-management
  - item-setup
  - sap
  - jda
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-ops
    port: 8080
    tools:
    - name: vendor-new-item-setup
      description: Orchestrates new vendor item setup.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Vendor New Item Setup Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-new-item-setup-orchestrator.yml

Verifies vendor promotional compliance by checking ad placement against contracts in SAP, validating shelf displays via Cloud Vision, and creating variance reports in SharePoint.

naftiko: '0.5'
info:
  label: Vendor Promotional Compliance Checker
  description: Verifies vendor promotional compliance by checking ad placement against contracts in SAP, validating shelf displays via Cloud Vision, and creating variance reports in SharePoint.
  tags:
  - promotions
  - vendor-compliance
  - sap
  - google-cloud
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: vendor-ops
    port: 8080
    tools:
    - name: vendor-promotional-compliance-checker
      description: Verifies vendor promotional compliance.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Vendor Promotional Compliance Checker complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-promotional-compliance-checker.yml

Runs a Terraform plan against Kroger's cloud infrastructure, compares with the current Azure state, logs drift findings in ServiceNow, and alerts the platform team in Teams.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Drift Detector
  description: Runs a Terraform plan against Kroger's cloud infrastructure, compares with the current Azure state, logs drift findings in ServiceNow, and alerts the platform team in Teams.
  tags:
  - infrastructure
  - terraform
  - microsoft-azure
  - servicenow
  - microsoft-teams
  - devops
capability:
  exposes:
  - type: mcp
    namespace: infra-drift
    port: 8080
    tools:
    - name: detect-infra-drift
      description: Given a Terraform workspace and environment, run plan, detect drift, log findings, and notify.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: The Terraform Cloud workspace name.
      - name: environment
        in: body
        type: string
        description: The target environment (e.g. prod, staging).
      steps:
      - name: run-plan
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace}}'
          plan_only: 'true'
          message: Drift detection run for {{environment}}
      - name: get-plan-output
        type: call
        call: terraform.get-plan
        with:
          run_id: '{{run-plan.run_id}}'
      - name: log-drift
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Infrastructure drift detected: {{workspace}} ({{environment}})'
          description: 'Terraform plan detected {{get-plan-output.resource_changes}} resource changes. Additions: {{get-plan-output.additions}}. Changes: {{get-plan-output.changes}}. Destructions: {{get-plan-output.destructions}}. Workspace: {{workspace}}.'
          assigned_group: Platform_Engineering
          category: infrastructure_drift
      - name: notify-platform-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: platform-engineering
          channel_id: drift-alerts
          text: 'Infrastructure drift detected in {{workspace}} ({{environment}}): {{get-plan-output.resource_changes}} resources changed ({{get-plan-output.additions}} add, {{get-plan-output.changes}} change, {{get-plan-output.destructions}} destroy). Task: {{log-drift.number}}. Plan URL: {{run-plan.plan_url}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /workspaces/{{workspace_id}}/runs
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: create-run
        method: POST
    - name: plans
      path: /runs/{{run_id}}/plan
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-plan
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-drift-detector.yml

On new hire creation in PeopleSoft, provisions a Microsoft Teams account, creates a ServiceNow onboarding ticket, sets up training in Pluralsight, and sends a welcome message via Teams.

naftiko: '0.5'
info:
  label: New Associate Onboarding Orchestrator
  description: On new hire creation in PeopleSoft, provisions a Microsoft Teams account, creates a ServiceNow onboarding ticket, sets up training in Pluralsight, and sends a welcome message via Teams.
  tags:
  - hr
  - onboarding
  - peoplesoft
  - microsoft-teams
  - servicenow
  - pluralsight
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: onboard-associate
      description: Given a PeopleSoft employee ID and start date, orchestrate the full onboarding sequence.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The PeopleSoft employee ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The start date in YYYY-MM-DD format.
      - name: store_id
        in: body
        type: string
        description: The store the associate is joining.
      - name: department
        in: body
        type: string
        description: Department (e.g. produce, deli, front-end).
      steps:
      - name: get-employee
        type: call
        call: peoplesoft.get-employee
        with:
          employee_id: '{{employee_id}}'
      - name: open-onboarding-ticket
        type: call
        call: servicenow.create-task
        with:
          short_description: 'New associate onboarding: {{get-employee.full_name}} at store {{store_id}}'
          description: 'Department: {{department}}. Start date: {{start_date}}. Provision badge, locker, register access.'
          assigned_group: Store_HR_{{store_id}}
          category: hr_onboarding
      - name: assign-training
        type: call
        call: pluralsight.assign-channel
        with:
          user_email: '{{get-employee.email}}'
          channel_id: kroger-{{department}}-fundamentals
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.email}}'
          text: Welcome to Kroger, {{get-employee.first_name}}! You're joining the {{department}} team at store {{store_id}} on {{start_date}}. Your onboarding ticket is {{open-onboarding-ticket.number}}. Training has been assigned in Pluralsight.
  consumes:
  - type: http
    namespace: peoplesoft
    baseUri: https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: employees
      path: /employees/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-employee
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.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: pluralsight
    baseUri: https://api.pluralsight.com/graphql
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: channel-assignments
      path: /assign
      operations:
      - name: assign-channel
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-associate-onboarding-orchestrator.yml

Reduces fresh department waste by analyzing spoilage data in Snowflake, adjusting orders in Blue Yonder, creating markdown recommendations, and alerting store managers via Teams.

naftiko: '0.5'
info:
  label: Fresh Department Waste Reduction Pipeline
  description: Reduces fresh department waste by analyzing spoilage data in Snowflake, adjusting orders in Blue Yonder, creating markdown recommendations, and alerting store managers via Teams.
  tags:
  - waste-reduction
  - fresh
  - snowflake
  - blue-yonder
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fresh-ops
    port: 8080
    tools:
    - name: fresh-department-waste-reduction
      description: Reduces fresh department waste.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Fresh Department Waste Reduction Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fresh-department-waste-reduction-pipeline.yml

Onboards a new vendor by creating records in Oracle Cloud procurement, provisioning a SharePoint collaboration site, setting up EDI integration tracking in ServiceNow, and notifying the category manager in Teams.

naftiko: '0.5'
info:
  label: New Vendor Onboarding Pipeline
  description: Onboards a new vendor by creating records in Oracle Cloud procurement, provisioning a SharePoint collaboration site, setting up EDI integration tracking in ServiceNow, and notifying the category manager in Teams.
  tags:
  - vendor-management
  - onboarding
  - oracle-cloud
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboarding
    port: 8080
    tools:
    - name: onboard-vendor
      description: Given vendor details, create procurement records, provision collaboration space, set up tracking, and notify the category manager.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: The vendor company name.
      - name: vendor_contact_email
        in: body
        type: string
        description: Primary vendor contact email.
      - name: category
        in: body
        type: string
        description: Product category (e.g. produce, dairy, frozen).
      - name: category_manager_email
        in: body
        type: string
        description: Kroger category manager email.
      steps:
      - name: create-vendor-record
        type: call
        call: oracle-cloud.create-supplier
        with:
          supplier_name: '{{vendor_name}}'
          contact_email: '{{vendor_contact_email}}'
          category: '{{category}}'
      - name: provision-site
        type: call
        call: sharepoint.create-site
        with:
          site_name: vendor-{{create-vendor-record.supplier_id}}
          description: Collaboration site for {{vendor_name}}
          template: vendor-collaboration
      - name: create-edi-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'EDI setup for new vendor: {{vendor_name}}'
          description: 'Vendor ID: {{create-vendor-record.supplier_id}}. Category: {{category}}. Configure EDI 850/810/856 transactions. SharePoint: {{provision-site.url}}.'
          assigned_group: EDI_Integration
          category: vendor_onboarding
      - name: notify-category-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{category_manager_email}}'
          text: 'New vendor onboarded: {{vendor_name}} ({{category}}). Vendor ID: {{create-vendor-record.supplier_id}}. SharePoint: {{provision-site.url}}. EDI setup task: {{create-edi-task.number}}.'
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: create-supplier
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: sites
      path: /sites
      operations:
      - name: create-site
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-vendor-onboarding-pipeline.yml

Matches vendor invoices from Oracle Cloud against purchase orders, identifies discrepancies, logs them in Snowflake, creates ServiceNow tasks for unresolved variances, and emails the vendor contact via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Vendor Invoice Reconciliation
  description: Matches vendor invoices from Oracle Cloud against purchase orders, identifies discrepancies, logs them in Snowflake, creates ServiceNow tasks for unresolved variances, and emails the vendor contact via Microsoft Outlook.
  tags:
  - finance
  - vendor-management
  - oracle-cloud
  - snowflake
  - servicenow
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: invoice-reconciliation
    port: 8080
    tools:
    - name: reconcile-vendor-invoice
      description: Given an invoice ID, match against POs, log discrepancies, and escalate unresolved variances.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The Oracle Cloud invoice identifier.
      - name: vendor_id
        in: body
        type: string
        description: The vendor/supplier identifier.
      steps:
      - name: get-invoice
        type: call
        call: oracle-cloud.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-matched-po
        type: call
        call: oracle-cloud.get-purchase-order
        with:
          po_number: '{{get-invoice.po_number}}'
      - name: log-discrepancy
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.finance.invoice_discrepancies (invoice_id, po_number, vendor_id, invoice_amount, po_amount, variance, logged_at) VALUES ('{{invoice_id}}', '{{get-invoice.po_number}}', '{{vendor_id}}', {{get-invoice.total_amount}}, {{get-matched-po.total_amount}}, {{get-invoice.total_amount}} - {{get-matched-po.total_amount}}, CURRENT_TIMESTAMP())
          warehouse: KROGER_FINANCE_WH
      - name: create-variance-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Invoice variance: {{invoice_id}} vs PO {{get-invoice.po_number}}'
          description: 'Vendor: {{get-invoice.vendor_name}}. Invoice: ${{get-invoice.total_amount}}. PO: ${{get-matched-po.total_amount}}. Variance: ${{get-invoice.variance_amount}}.'
          assigned_group: Accounts_Payable
          category: invoice_reconciliation
      - name: notify-vendor
        type: call
        call: outlook.send-email
        with:
          to: '{{get-invoice.vendor_contact_email}}'
          subject: Invoice {{invoice_id}} — Variance Notification
          body: 'We identified a variance between invoice {{invoice_id}} (${{get-invoice.total_amount}}) and PO {{get-invoice.po_number}} (${{get-matched-po.total_amount}}). Please review and provide documentation. Reference: {{create-variance-task.number}}.'
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
    - name: purchase-orders
      path: /purchaseOrders/{{po_number}}
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-purchase-order
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://kroger.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://kroger.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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/ap-team@kroger.com/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → vendor-invoice-reconciliation.yml

Orchestrates seasonal category resets by pulling new planograms from JDA, generating task lists in Jira, scheduling associates in Kronos, and tracking completion via Teams.

naftiko: '0.5'
info:
  label: Seasonal Category Reset Orchestrator
  description: Orchestrates seasonal category resets by pulling new planograms from JDA, generating task lists in Jira, scheduling associates in Kronos, and tracking completion via Teams.
  tags:
  - category-management
  - seasonal
  - jda
  - jira
  - kronos
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: seasonal-ops
    port: 8080
    tools:
    - name: seasonal-category-reset
      description: Orchestrates seasonal category resets.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Seasonal Category Reset Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → seasonal-category-reset-orchestrator.yml

Pulls associate shift schedules from PeopleSoft, syncs to Microsoft Teams shift calendar, and posts upcoming schedule to the store's Teams channel for visibility.

naftiko: '0.5'
info:
  label: Employee Scheduling Sync
  description: Pulls associate shift schedules from PeopleSoft, syncs to Microsoft Teams shift calendar, and posts upcoming schedule to the store's Teams channel for visibility.
  tags:
  - store-ops
  - hr
  - peoplesoft
  - microsoft-teams
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: scheduling
    port: 8080
    tools:
    - name: sync-store-schedule
      description: Given a store ID and week start date, pull schedules from PeopleSoft and sync to Teams.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Kroger store location identifier.
      - name: week_start
        in: body
        type: string
        description: The Monday date for the schedule week (YYYY-MM-DD).
      steps:
      - name: get-schedule
        type: call
        call: peoplesoft.get-store-schedule
        with:
          store_id: '{{store_id}}'
          week_start: '{{week_start}}'
      - name: update-teams-shifts
        type: call
        call: msteams.update-shifts
        with:
          team_id: store-{{store_id}}
          schedule_data: '{{get-schedule.shifts}}'
      - name: post-schedule-summary
        type: call
        call: msteams.send-channel-message
        with:
          team_id: store-{{store_id}}
          channel_id: general
          text: 'Schedule posted for week of {{week_start}}: {{get-schedule.total_hours}} total hours across {{get-schedule.associate_count}} associates. {{get-schedule.open_shifts}} open shifts remaining.'
  consumes:
  - type: http
    namespace: peoplesoft
    baseUri: https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: schedules
      path: /schedules?store_id={{store_id}}&week_start={{week_start}}
      inputParameters:
      - name: store_id
        in: query
      - name: week_start
        in: query
      operations:
      - name: get-store-schedule
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: shifts
      path: /teams/{{team_id}}/schedule/shifts
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: update-shifts
        method: POST
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → employee-scheduling-sync.yml

Monitors store labor budget variances by pulling hours from Kronos, comparing against budgets in SAP, generating variance reports, and alerting store directors via Teams.

naftiko: '0.5'
info:
  label: Store Labor Budget Variance Pipeline
  description: Monitors store labor budget variances by pulling hours from Kronos, comparing against budgets in SAP, generating variance reports, and alerting store directors via Teams.
  tags:
  - labor
  - budget
  - kronos
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: store-labor-budget-variance
      description: Monitors store labor budget variances.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Store Labor Budget Variance Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-labor-budget-variance-pipeline.yml

Orchestrates seasonal hiring by posting positions via the ATS, scheduling interviews in Kronos, creating onboarding packets in SharePoint, and tracking progress in Jira.

naftiko: '0.5'
info:
  label: Seasonal Hiring Campaign Orchestrator
  description: Orchestrates seasonal hiring by posting positions via the ATS, scheduling interviews in Kronos, creating onboarding packets in SharePoint, and tracking progress in Jira.
  tags:
  - hiring
  - seasonal
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: seasonal-ops
    port: 8080
    tools:
    - name: seasonal-hiring-campaign
      description: Orchestrates seasonal hiring.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Seasonal Hiring Campaign Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → seasonal-hiring-campaign-orchestrator.yml

Analyzes customer complaint trends by aggregating data from Zendesk, running sentiment analysis in Snowflake, generating trend reports in Tableau, and alerting customer experience leaders.

naftiko: '0.5'
info:
  label: Customer Complaint Trend Analysis Pipeline
  description: Analyzes customer complaint trends by aggregating data from Zendesk, running sentiment analysis in Snowflake, generating trend reports in Tableau, and alerting customer experience leaders.
  tags:
  - customer-experience
  - complaints
  - zendesk
  - snowflake
  - tableau
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customer-ops
    port: 8080
    tools:
    - name: customer-complaint-trend-analysis
      description: Analyzes customer complaint trends.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Customer Complaint Trend Analysis Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → customer-complaint-trend-analysis-pipeline.yml

Retrieves associate work schedules from Kronos workforce management system by employee ID.

naftiko: '0.5'
info:
  label: Kronos Associate Schedule Lookup
  description: Retrieves associate work schedules from Kronos workforce management system by employee ID.
  tags:
  - scheduling
  - kronos
capability:
  exposes:
  - type: mcp
    namespace: scheduling
    port: 8080
    tools:
    - name: get-schedule
      description: Look up associate schedule by employee ID.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee id.
      call: kronos.get-schedule
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: kronos
    baseUri: https://kroger-kronos.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kronos_token
    resources:
    - name: schedule
      path: /schedule
      operations:
      - name: get-schedule
        method: GET
Open in Framework → View in Fleet → kronos-associate-schedule-lookup.yml

Searches Kroger's Confluence knowledge base for store operations procedures by keyword, returning matching page titles, URLs, and last-updated dates.

naftiko: '0.5'
info:
  label: Confluence Store Ops Knowledge Lookup
  description: Searches Kroger's Confluence knowledge base for store operations procedures by keyword, returning matching page titles, URLs, and last-updated dates.
  tags:
  - knowledge-management
  - confluence
  - store-ops
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: search-store-procedures
      description: Search Confluence for store operations procedures by keyword.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The keyword or phrase to search for.
      call: confluence.search-content
      with:
        cql: type=page AND space=STOREOPS AND text~'{{search_query}}'
        limit: '10'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://kroger.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-store-ops-knowledge-lookup.yml

Manages health clinic appointment capacity by pulling scheduling data, optimizing slot allocation in Snowflake, updating the booking system, and notifying clinic managers.

naftiko: '0.5'
info:
  label: Health Clinic Appointment Capacity Pipeline
  description: Manages health clinic appointment capacity by pulling scheduling data, optimizing slot allocation in Snowflake, updating the booking system, and notifying clinic managers.
  tags:
  - health-clinic
  - scheduling
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: covid-ops
    port: 8080
    tools:
    - name: covid-testing-site-capacity
      description: Manages health clinic appointment capacity.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Health Clinic Appointment Capacity Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → health-clinic-appointment-capacity-pipeline.yml

Plans deli and bakery production by pulling demand forecasts from Blue Yonder, scheduling production in Kronos, ordering ingredients via SAP, and notifying department managers.

naftiko: '0.5'
info:
  label: Deli Bakery Production Planning Pipeline
  description: Plans deli and bakery production by pulling demand forecasts from Blue Yonder, scheduling production in Kronos, ordering ingredients via SAP, and notifying department managers.
  tags:
  - production-planning
  - deli-bakery
  - blue-yonder
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: deli-ops
    port: 8080
    tools:
    - name: deli-bakery-production-planning
      description: Plans deli and bakery production.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Deli Bakery Production Planning Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → deli-bakery-production-planning-pipeline.yml

When a temperature threshold breach is detected by Datadog IoT sensors, creates a ServiceNow critical incident, notifies the store food safety team in Teams, and logs the event in Snowflake for compliance reporting.

naftiko: '0.5'
info:
  label: Food Safety Temperature Monitoring
  description: When a temperature threshold breach is detected by Datadog IoT sensors, creates a ServiceNow critical incident, notifies the store food safety team in Teams, and logs the event in Snowflake for compliance reporting.
  tags:
  - food-safety
  - datadog
  - servicenow
  - microsoft-teams
  - snowflake
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: food-safety
    port: 8080
    tools:
    - name: handle-temp-breach
      description: Given a sensor ID, store ID, and temperature reading, create incident, notify team, and log for compliance.
      inputParameters:
      - name: sensor_id
        in: body
        type: string
        description: The IoT temperature sensor identifier.
      - name: store_id
        in: body
        type: string
        description: The affected store location.
      - name: current_temp
        in: body
        type: number
        description: The current temperature reading in Fahrenheit.
      - name: threshold_temp
        in: body
        type: number
        description: The allowable threshold temperature.
      steps:
      - name: get-sensor-history
        type: call
        call: datadog.query-metrics
        with:
          query: avg:iot.temperature{sensor_id:{{sensor_id}}}
          from: now-2h
          to: now
      - name: create-critical-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'TEMP BREACH: Store {{store_id}}, sensor {{sensor_id}} at {{current_temp}}F (threshold: {{threshold_temp}}F)'
          description: 'Temperature breach detected. Current: {{current_temp}}F. Threshold: {{threshold_temp}}F. 2-hour trend: {{get-sensor-history.trend}}. Immediate action required per food safety protocol.'
          category: food_safety
          priority: '1'
          assigned_group: Food_Safety
      - name: notify-store-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: store-{{store_id}}
          channel_id: food-safety
          text: 'CRITICAL: Temperature breach at sensor {{sensor_id}}. Reading: {{current_temp}}F (limit: {{threshold_temp}}F). Incident {{create-critical-incident.number}} created. Check affected cases immediately. Do NOT sell product from this unit until cleared.'
      - name: log-compliance-event
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.compliance.temp_breach_log (store_id, sensor_id, temp_reading, threshold, incident_number, detected_at) VALUES ('{{store_id}}', '{{sensor_id}}', {{current_temp}}, {{threshold_temp}}, '{{create-critical-incident.number}}', CURRENT_TIMESTAMP())
          warehouse: KROGER_COMPLIANCE_WH
  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
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/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
  - type: http
    namespace: snowflake
    baseUri: https://kroger.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → food-safety-temperature-monitoring.yml

Optimizes store energy consumption by collecting IoT sensor data from Azure IoT Hub, analyzing patterns in Snowflake, adjusting HVAC schedules, and reporting savings via Power BI.

naftiko: '0.5'
info:
  label: Store Energy Optimization Pipeline
  description: Optimizes store energy consumption by collecting IoT sensor data from Azure IoT Hub, analyzing patterns in Snowflake, adjusting HVAC schedules, and reporting savings via Power BI.
  tags:
  - energy
  - sustainability
  - azure-iot
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: store-energy-optimization
      description: Optimizes store energy consumption.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Store Energy Optimization Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-energy-optimization-pipeline.yml

Monitors self-checkout loss by analyzing transaction exceptions from the POS system, scoring risk patterns in Snowflake, creating alerts in ServiceNow, and notifying asset protection.

naftiko: '0.5'
info:
  label: Self-Checkout Loss Prevention Pipeline
  description: Monitors self-checkout loss by analyzing transaction exceptions from the POS system, scoring risk patterns in Snowflake, creating alerts in ServiceNow, and notifying asset protection.
  tags:
  - loss-prevention
  - self-checkout
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: self-ops
    port: 8080
    tools:
    - name: self-checkout-loss-prevention
      description: Monitors self-checkout loss.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Self-Checkout Loss Prevention Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → self-checkout-loss-prevention-pipeline.yml

Retrieves vendor contract details from Oracle Cloud by contract ID, returning vendor name, contract value, expiration date, and renewal terms.

naftiko: '0.5'
info:
  label: Vendor Contract Lookup
  description: Retrieves vendor contract details from Oracle Cloud by contract ID, returning vendor name, contract value, expiration date, and renewal terms.
  tags:
  - vendor-management
  - oracle-cloud
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: vendor-contracts
    port: 8080
    tools:
    - name: get-vendor-contract
      description: Retrieve a vendor contract from Oracle Cloud by contract ID. Returns vendor name, value, expiration, and renewal status.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The Oracle Cloud procurement contract identifier.
      call: oracle-cloud.get-contract
      with:
        contract_id: '{{contract_id}}'
      outputParameters:
      - name: vendor_name
        type: string
        mapping: $.ContractHeader.SupplierName
      - name: contract_value
        type: string
        mapping: $.ContractHeader.ContractAmount
      - name: expiration_date
        type: string
        mapping: $.ContractHeader.ExpirationDate
      - name: renewal_status
        type: string
        mapping: $.ContractHeader.RenewalStatus
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: contracts
      path: /purchaseContracts/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
Open in Framework → View in Fleet → vendor-contract-lookup.yml

Processes associate engagement surveys by collecting responses from Microsoft Forms, analyzing results in Snowflake, generating reports in Power BI, and sharing with leadership via Teams.

naftiko: '0.5'
info:
  label: Associate Engagement Survey Pipeline
  description: Processes associate engagement surveys by collecting responses from Microsoft Forms, analyzing results in Snowflake, generating reports in Power BI, and sharing with leadership via Teams.
  tags:
  - hr
  - engagement
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: associate-ops
    port: 8080
    tools:
    - name: associate-engagement-survey
      description: Processes associate engagement surveys.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Associate Engagement Survey Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → associate-engagement-survey-pipeline.yml

Tracks scratch bakery production costs by pulling ingredient costs from SAP, calculating per-unit costs in Snowflake, comparing against targets, and reporting variances.

naftiko: '0.5'
info:
  label: Bakery Scratch Production Cost Pipeline
  description: Tracks scratch bakery production costs by pulling ingredient costs from SAP, calculating per-unit costs in Snowflake, comparing against targets, and reporting variances.
  tags:
  - bakery
  - costing
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bakery-ops
    port: 8080
    tools:
    - name: bakery-scratch-production-cost
      description: Tracks scratch bakery production costs.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Bakery Scratch Production Cost Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bakery-scratch-production-cost-pipeline.yml

Retrieves market share data from Circana (formerly IRI) for a given product category and market area, returning Kroger share versus competitors.

naftiko: '0.5'
info:
  label: Circana Market Share Data
  description: Retrieves market share data from Circana (formerly IRI) for a given product category and market area, returning Kroger share versus competitors.
  tags:
  - analytics
  - circana
  - market-intelligence
capability:
  exposes:
  - type: mcp
    namespace: market-intelligence
    port: 8080
    tools:
    - name: get-market-share
      description: Fetch Circana market share data by product category and market.
      inputParameters:
      - name: category_id
        in: body
        type: string
        description: The Circana product category identifier.
      - name: market_code
        in: body
        type: string
        description: The geographic market code.
      call: circana.get-share-data
      with:
        category_id: '{{category_id}}'
        market_code: '{{market_code}}'
      outputParameters:
      - name: kroger_share
        type: number
        mapping: $.data.kroger_share_pct
      - name: category_total
        type: number
        mapping: $.data.category_volume
  consumes:
  - type: http
    namespace: circana
    baseUri: https://api.circana.com/v2
    authentication:
      type: bearer
      token: $secrets.circana_api_token
    resources:
    - name: market-share
      path: /market-share?category={{category_id}}&market={{market_code}}
      inputParameters:
      - name: category_id
        in: query
      - name: market_code
        in: query
      operations:
      - name: get-share-data
        method: GET
Open in Framework → View in Fleet → circana-market-share-data.yml

Aggregates daily store KPIs from Snowflake, labor metrics from PeopleSoft, and customer satisfaction scores from Salesforce, then refreshes the Power BI dashboard dataset.

naftiko: '0.5'
info:
  label: Store Performance Dashboard Sync
  description: Aggregates daily store KPIs from Snowflake, labor metrics from PeopleSoft, and customer satisfaction scores from Salesforce, then refreshes the Power BI dashboard dataset.
  tags:
  - analytics
  - store-ops
  - snowflake
  - peoplesoft
  - salesforce
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: store-dashboard
    port: 8080
    tools:
    - name: refresh-store-dashboard
      description: Given a store ID and date, aggregate KPIs from multiple sources and trigger a Power BI refresh.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Kroger store identifier.
      - name: report_date
        in: body
        type: string
        description: The reporting date (YYYY-MM-DD).
      steps:
      - name: get-sales-kpis
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT store_id, net_sales, transactions, avg_basket, shrink_pct FROM kroger_dw.store_ops.daily_kpis WHERE store_id = '{{store_id}}' AND report_date = '{{report_date}}'
          warehouse: KROGER_ANALYTICS_WH
      - name: get-labor-metrics
        type: call
        call: peoplesoft.get-labor-summary
        with:
          store_id: '{{store_id}}'
          date: '{{report_date}}'
      - name: get-csat-scores
        type: call
        call: salesforce.get-store-csat
        with:
          store_id: '{{store_id}}'
          date: '{{report_date}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          group_id: kroger-store-ops
          dataset_id: store-performance-{{store_id}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://kroger.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: peoplesoft
    baseUri: https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: labor
      path: /labor-summary?store_id={{store_id}}&date={{date}}
      inputParameters:
      - name: store_id
        in: query
      - name: date
        in: query
      operations:
      - name: get-labor-summary
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: store-csat
      path: /query?q=SELECT+AVG(Score__c)+avg_score+FROM+CSAT_Survey__c+WHERE+Store_Id__c='{{store_id}}'+AND+Survey_Date__c={{date}}
      inputParameters:
      - name: store_id
        in: query
      - name: date
        in: query
      operations:
      - name: get-store-csat
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → store-performance-dashboard-sync.yml

Schedules fleet maintenance by pulling vehicle telematics from Azure IoT, forecasting service needs in Snowflake, creating work orders in ServiceNow, and notifying fleet managers.

naftiko: '0.5'
info:
  label: Fleet Maintenance Scheduling Orchestrator
  description: Schedules fleet maintenance by pulling vehicle telematics from Azure IoT, forecasting service needs in Snowflake, creating work orders in ServiceNow, and notifying fleet managers.
  tags:
  - fleet
  - maintenance
  - azure-iot
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fleet-ops
    port: 8080
    tools:
    - name: fleet-maintenance-scheduling
      description: Schedules fleet maintenance.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Fleet Maintenance Scheduling Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → fleet-maintenance-scheduling-orchestrator.yml

When a delivery exception is detected in Oracle Cloud, checks impacted store inventory levels, creates a ServiceNow incident, reassigns affected orders, and alerts the supply chain team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Supply Chain Disruption Alert Orchestrator
  description: When a delivery exception is detected in Oracle Cloud, checks impacted store inventory levels, creates a ServiceNow incident, reassigns affected orders, and alerts the supply chain team in Microsoft Teams.
  tags:
  - supply-chain
  - oracle-cloud
  - oracle-e-business-suite
  - servicenow
  - microsoft-teams
  - logistics
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-alerts
    port: 8080
    tools:
    - name: handle-delivery-exception
      description: Given a shipment ID and exception type, assess inventory impact, create an incident, and notify the supply chain team.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The Oracle Cloud shipment tracking identifier.
      - name: exception_type
        in: body
        type: string
        description: Type of exception (e.g. DELAYED, DAMAGED, SHORT_SHIP).
      - name: affected_store_ids
        in: body
        type: string
        description: Comma-separated list of affected store IDs.
      steps:
      - name: get-shipment
        type: call
        call: oracle-cloud.get-shipment
        with:
          shipment_id: '{{shipment_id}}'
      - name: check-store-stock
        type: call
        call: oracle-ebs.get-inventory-levels
        with:
          store_ids: '{{affected_store_ids}}'
          items: '{{get-shipment.item_list}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supply chain disruption: {{exception_type}} on shipment {{shipment_id}}'
          description: 'Shipment {{shipment_id}} from {{get-shipment.vendor_name}} experienced {{exception_type}}. Affected stores: {{affected_store_ids}}. Items: {{get-shipment.item_summary}}. Current stock status: {{check-store-stock.summary}}.'
          category: supply_chain
          priority: '2'
          assigned_group: Supply_Chain_Ops
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: supply-chain-ops
          channel_id: disruptions
          text: 'ALERT: {{exception_type}} on shipment {{shipment_id}} ({{get-shipment.vendor_name}}). {{check-store-stock.impacted_count}} stores affected. Incident: {{create-incident.number}}. Stock at risk for {{get-shipment.item_count}} items.'
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: shipments
      path: /shipments/{{shipment_id}}
      inputParameters:
      - name: shipment_id
        in: path
      operations:
      - name: get-shipment
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: inventory-levels
      path: /levels
      operations:
      - name: get-inventory-levels
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → supply-chain-disruption-alert-orchestrator.yml

Checks the latest deployment pipeline status in Azure DevOps for a Kroger microservice, returning build result, environment, and release timestamp.

naftiko: '0.5'
info:
  label: Azure DevOps Deployment Status
  description: Checks the latest deployment pipeline status in Azure DevOps for a Kroger microservice, returning build result, environment, and release timestamp.
  tags:
  - devops
  - azure-devops
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: get-deployment-status
      description: Retrieve the latest Azure DevOps pipeline run status for a given Kroger service.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: The pipeline definition ID.
      call: azdo.get-latest-run
      with:
        project: '{{project_name}}'
        pipeline_id: '{{pipeline_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.value[0].result
      - name: status
        type: string
        mapping: $.value[0].state
      - name: finished_date
        type: string
        mapping: $.value[0].finishedDate
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/kroger
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: pipeline-runs
      path: /{{project}}/_apis/pipelines/{{pipeline_id}}/runs?api-version=7.0&$top=1
      inputParameters:
      - name: project
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-latest-run
        method: GET
Open in Framework → View in Fleet → azure-devops-deployment-status.yml

Identifies low-stock items across distribution centers in Oracle EBS, generates purchase orders in Oracle Cloud, logs replenishment actions in Snowflake, and alerts the distribution team in Teams.

naftiko: '0.5'
info:
  label: Warehouse Replenishment Orchestrator
  description: Identifies low-stock items across distribution centers in Oracle EBS, generates purchase orders in Oracle Cloud, logs replenishment actions in Snowflake, and alerts the distribution team in Teams.
  tags:
  - supply-chain
  - warehouse
  - oracle-e-business-suite
  - oracle-cloud
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: warehouse-replenishment
    port: 8080
    tools:
    - name: trigger-replenishment
      description: Given a distribution center ID and threshold, find low-stock items, generate POs, log, and notify.
      inputParameters:
      - name: dc_id
        in: body
        type: string
        description: The distribution center identifier.
      - name: stock_threshold_pct
        in: body
        type: number
        description: Percentage threshold below which items are considered low-stock.
      steps:
      - name: find-low-stock
        type: call
        call: oracle-ebs.get-low-stock-items
        with:
          dc_id: '{{dc_id}}'
          threshold_pct: '{{stock_threshold_pct}}'
      - name: generate-pos
        type: call
        call: oracle-cloud.create-purchase-orders
        with:
          items: '{{find-low-stock.items}}'
          dc_id: '{{dc_id}}'
      - name: log-replenishment
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO kroger_dw.supply_chain.replenishment_log (dc_id, item_count, po_count, threshold_pct, triggered_at) VALUES ('{{dc_id}}', {{find-low-stock.item_count}}, {{generate-pos.po_count}}, {{stock_threshold_pct}}, CURRENT_TIMESTAMP())
          warehouse: KROGER_SUPPLY_CHAIN_WH
      - name: notify-distribution
        type: call
        call: msteams.send-channel-message
        with:
          team_id: distribution-{{dc_id}}
          channel_id: replenishment
          text: 'Replenishment triggered for DC {{dc_id}}: {{find-low-stock.item_count}} items below {{stock_threshold_pct}}% threshold. {{generate-pos.po_count}} purchase orders generated. Top items: {{find-low-stock.top_items}}.'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: low-stock
      path: /low-stock-report
      operations:
      - name: get-low-stock-items
        method: POST
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: purchase-orders
      path: /purchaseOrders
      operations:
      - name: create-purchase-orders
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://kroger.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → warehouse-replenishment-orchestrator.yml

Manages private label quality control by tracking supplier quality scores in SAP, scheduling inspections in ServiceNow, documenting results in SharePoint, and notifying the quality team.

naftiko: '0.5'
info:
  label: Private Label Quality Control Pipeline
  description: Manages private label quality control by tracking supplier quality scores in SAP, scheduling inspections in ServiceNow, documenting results in SharePoint, and notifying the quality team.
  tags:
  - quality
  - private-label
  - sap
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: private-ops
    port: 8080
    tools:
    - name: private-label-quality-control
      description: Manages private label quality control.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Private Label Quality Control Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → private-label-quality-control-pipeline.yml

On a product recall event, identifies affected inventory in Oracle EBS, pulls impacted orders from the Kroger API, creates a ServiceNow major incident, notifies store managers via Teams, and emails affected customers through Salesforce Marketing Cloud.

naftiko: '0.5'
info:
  label: Product Recall Response Orchestrator
  description: On a product recall event, identifies affected inventory in Oracle EBS, pulls impacted orders from the Kroger API, creates a ServiceNow major incident, notifies store managers via Teams, and emails affected customers through Salesforce Marketing Cloud.
  tags:
  - food-safety
  - recall
  - oracle-e-business-suite
  - servicenow
  - microsoft-teams
  - salesforce-marketing-cloud
capability:
  exposes:
  - type: mcp
    namespace: recall-management
    port: 8080
    tools:
    - name: execute-product-recall
      description: Given a product UPC and recall reason, identify impact, create incident, and notify all stakeholders.
      inputParameters:
      - name: upc
        in: body
        type: string
        description: The recalled product UPC.
      - name: recall_reason
        in: body
        type: string
        description: The reason for the recall.
      - name: lot_numbers
        in: body
        type: string
        description: Comma-separated lot numbers affected.
      steps:
      - name: find-inventory
        type: call
        call: oracle-ebs.find-by-lot
        with:
          upc: '{{upc}}'
          lot_numbers: '{{lot_numbers}}'
      - name: find-affected-orders
        type: call
        call: kroger-api.search-orders-by-upc
        with:
          upc: '{{upc}}'
          date_range: last_90_days
      - name: create-major-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'RECALL: {{upc}} — {{recall_reason}}'
          description: 'Product recall for UPC {{upc}}. Lots: {{lot_numbers}}. Found in {{find-inventory.store_count}} stores. {{find-affected-orders.order_count}} customer orders affected.'
          category: product_recall
          priority: '1'
          assigned_group: Food_Safety
      - name: notify-store-managers
        type: call
        call: msteams.send-channel-message
        with:
          team_id: store-operations
          channel_id: recalls
          text: 'URGENT RECALL: UPC {{upc}} ({{recall_reason}}). Lots: {{lot_numbers}}. Pull immediately from shelves. Incident: {{create-major-incident.number}}. Affected stores: {{find-inventory.store_list}}.'
      - name: notify-customers
        type: call
        call: sfmc.send-triggered-email
        with:
          list_id: '{{find-affected-orders.customer_list_id}}'
          template: product_recall_notice
          data: '{upc: ''{{upc}}'', reason: ''{{recall_reason}}'', lots: ''{{lot_numbers}}''}'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://kroger-ebs.oraclecloud.com/webservices/rest/inventory/v1
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: lot-search
      path: /items/lot-search
      operations:
      - name: find-by-lot
        method: POST
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: order-search
      path: /orders/search
      operations:
      - name: search-orders-by-upc
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/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
  - type: http
    namespace: sfmc
    baseUri: https://kroger.rest.marketingcloudapis.com/messaging/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: triggered-sends
      path: /email/messages
      operations:
      - name: send-triggered-email
        method: POST
Open in Framework → View in Fleet → product-recall-response-orchestrator.yml

Manages store remodel communications by pulling project milestones from Jira, generating customer notifications via Twilio, updating store hours in Google Business Profile, and briefing leadership.

naftiko: '0.5'
info:
  label: Store Remodel Communication Orchestrator
  description: Manages store remodel communications by pulling project milestones from Jira, generating customer notifications via Twilio, updating store hours in Google Business Profile, and briefing leadership.
  tags:
  - store-remodel
  - communications
  - jira
  - twilio
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: store-remodel-communication
      description: Manages store remodel communications.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Store Remodel Communication Orchestrator complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-remodel-communication-orchestrator.yml

Pulls food safety inspection data from ServiceNow, labor compliance records from PeopleSoft, financial controls from Oracle Cloud, compiles into a report on SharePoint, and notifies the compliance team in Teams.

naftiko: '0.5'
info:
  label: Compliance Audit Report Generator
  description: Pulls food safety inspection data from ServiceNow, labor compliance records from PeopleSoft, financial controls from Oracle Cloud, compiles into a report on SharePoint, and notifies the compliance team in Teams.
  tags:
  - compliance
  - audit
  - servicenow
  - peoplesoft
  - oracle-cloud
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-audit
    port: 8080
    tools:
    - name: generate-compliance-report
      description: Given a store ID and audit period, compile compliance data from all sources and publish the report.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Kroger store identifier.
      - name: audit_period_start
        in: body
        type: string
        description: Audit period start (YYYY-MM-DD).
      - name: audit_period_end
        in: body
        type: string
        description: Audit period end (YYYY-MM-DD).
      steps:
      - name: get-inspection-records
        type: call
        call: servicenow.query-incidents
        with:
          query: store_id={{store_id}}^category=food_safety^opened_at>={{audit_period_start}}^opened_at<={{audit_period_end}}
      - name: get-labor-compliance
        type: call
        call: peoplesoft.get-compliance-records
        with:
          store_id: '{{store_id}}'
          from_date: '{{audit_period_start}}'
          to_date: '{{audit_period_end}}'
      - name: get-financial-controls
        type: call
        call: oracle-cloud.get-audit-findings
        with:
          location_code: '{{store_id}}'
          period_start: '{{audit_period_start}}'
          period_end: '{{audit_period_end}}'
      - name: publish-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: kroger-compliance
          file_path: AuditReports/{{store_id}}/{{audit_period_end}}_compliance_report.json
          content: '{storeId: ''{{store_id}}'', period: ''{{audit_period_start}} to {{audit_period_end}}'', inspections: {{get-inspection-records.count}}, laborViolations: {{get-labor-compliance.violation_count}}, financialFindings: {{get-financial-controls.finding_count}}}'
      - name: notify-compliance-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: compliance
          channel_id: audit-reports
          text: 'Compliance report published for store {{store_id}} ({{audit_period_start}} to {{audit_period_end}}). Food safety inspections: {{get-inspection-records.count}}. Labor compliance issues: {{get-labor-compliance.violation_count}}. Financial findings: {{get-financial-controls.finding_count}}. Report: {{publish-report.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: query-incidents
        method: GET
  - type: http
    namespace: peoplesoft
    baseUri: https://kroger-hcm.peoplesoft.com/PSIGW/RESTListeningConnector/PSFT_HR
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: compliance
      path: /compliance-records?store_id={{store_id}}&from={{from_date}}&to={{to_date}}
      inputParameters:
      - name: store_id
        in: query
      - name: from_date
        in: query
      - name: to_date
        in: query
      operations:
      - name: get-compliance-records
        method: GET
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: audit-findings
      path: /auditFindings?locationCode={{location_code}}&periodStart={{period_start}}&periodEnd={{period_end}}
      inputParameters:
      - name: location_code
        in: query
      - name: period_start
        in: query
      - name: period_end
        in: query
      operations:
      - name: get-audit-findings
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → compliance-audit-report-generator.yml

Retrieves customer loyalty behavior insights from 84.51 data science platform for personalization.

naftiko: '0.5'
info:
  label: 84.51 Loyalty Insights Lookup
  description: Retrieves customer loyalty behavior insights from 84.51 data science platform for personalization.
  tags:
  - loyalty
  - 84-51
capability:
  exposes:
  - type: mcp
    namespace: loyalty-insights
    port: 8080
    tools:
    - name: get-insights
      description: Retrieve loyalty insights for a customer segment.
      inputParameters:
      - name: segment_id
        in: body
        type: string
        description: The segment id.
      call: insights.get-segment
      with:
        segment_id: '{{segment_id}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: insights
    baseUri: https://kroger-insights.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.insights_token
    resources:
    - name: segments
      path: /segments
      operations:
      - name: get-segment
        method: GET
Open in Framework → View in Fleet → 84-51-loyalty-insights-lookup.yml

Queries Apache NiFi for data pipeline status, checks Prometheus for throughput metrics, and alerts the data engineering team in Teams when pipelines degrade.

naftiko: '0.5'
info:
  label: NiFi Data Pipeline Health Check
  description: Queries Apache NiFi for data pipeline status, checks Prometheus for throughput metrics, and alerts the data engineering team in Teams when pipelines degrade.
  tags:
  - data-engineering
  - apache-nifi
  - prometheus
  - microsoft-teams
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline-health
    port: 8080
    tools:
    - name: check-pipeline-health
      description: Given a NiFi process group ID, check pipeline status and throughput, and alert if degraded.
      inputParameters:
      - name: process_group_id
        in: body
        type: string
        description: The NiFi process group identifier.
      - name: pipeline_name
        in: body
        type: string
        description: Human-readable pipeline name for notifications.
      steps:
      - name: get-nifi-status
        type: call
        call: nifi.get-process-group
        with:
          pg_id: '{{process_group_id}}'
      - name: get-throughput
        type: call
        call: prometheus.query-instant
        with:
          query: rate(nifi_amount_bytes_read_total{process_group='{{process_group_id}}'}[5m])
      - name: alert-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: data-engineering
          channel_id: pipeline-alerts
          text: 'Pipeline health check: {{pipeline_name}}. Status: {{get-nifi-status.status}}. Active threads: {{get-nifi-status.active_threads}}. Queued: {{get-nifi-status.queued_count}}. Throughput: {{get-throughput.value}} bytes/sec. Bulletin count: {{get-nifi-status.bulletin_count}}.'
  consumes:
  - type: http
    namespace: nifi
    baseUri: https://kroger-nifi.internal.kroger.com/nifi-api
    authentication:
      type: bearer
      token: $secrets.nifi_token
    resources:
    - name: process-groups
      path: /process-groups/{{pg_id}}/status
      inputParameters:
      - name: pg_id
        in: path
      operations:
      - name: get-process-group
        method: GET
  - type: http
    namespace: prometheus
    baseUri: https://kroger-prometheus.internal.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: instant-query
      path: /query
      operations:
      - name: query-instant
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → nifi-data-pipeline-health-check.yml

Retrieves application performance metrics from New Relic for Kroger's curbside pickup service, including response time, throughput, and error rate.

naftiko: '0.5'
info:
  label: New Relic Pickup Service Performance
  description: Retrieves application performance metrics from New Relic for Kroger's curbside pickup service, including response time, throughput, and error rate.
  tags:
  - monitoring
  - new-relic
  - e-commerce
  - pickup
capability:
  exposes:
  - type: mcp
    namespace: pickup-monitoring
    port: 8080
    tools:
    - name: get-pickup-apm
      description: Fetch New Relic APM metrics for the Kroger curbside pickup service.
      inputParameters:
      - name: time_range
        in: body
        type: string
        description: Time range for metrics (e.g. last_30_minutes, last_1_hour).
      call: newrelic.get-app-metrics
      with:
        app_id: kroger-pickup-service
        time_range: '{{time_range}}'
        metrics: HttpDispatcher,Errors/all,Apdex
  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}}/metrics/data.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-pickup-service-performance.yml

Orchestrates a Kroger private label product launch by creating the item in Oracle Cloud, setting up the product page via the Kroger API, configuring Salesforce Marketing Cloud campaigns, and publishing to the BigCommerce catalog.

naftiko: '0.5'
info:
  label: Private Label Product Launch Workflow
  description: Orchestrates a Kroger private label product launch by creating the item in Oracle Cloud, setting up the product page via the Kroger API, configuring Salesforce Marketing Cloud campaigns, and publishing to the BigCommerce catalog.
  tags:
  - product-management
  - private-label
  - oracle-cloud
  - salesforce-marketing-cloud
  - bigcommerce
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: private-label
    port: 8080
    tools:
    - name: launch-private-label-product
      description: Given product details, create the item across all systems and set up marketing.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product display name.
      - name: upc
        in: body
        type: string
        description: The product UPC.
      - name: brand
        in: body
        type: string
        description: The private label brand (e.g. Simple Truth, Kroger Brand).
      - name: category
        in: body
        type: string
        description: Product category.
      - name: retail_price
        in: body
        type: number
        description: The retail price.
      steps:
      - name: create-item
        type: call
        call: oracle-cloud.create-item
        with:
          item_name: '{{product_name}}'
          upc: '{{upc}}'
          brand: '{{brand}}'
          category: '{{category}}'
          price: '{{retail_price}}'
      - name: publish-to-kroger
        type: call
        call: kroger-api.create-product
        with:
          upc: '{{upc}}'
          name: '{{product_name}}'
          brand: '{{brand}}'
          price: '{{retail_price}}'
          item_id: '{{create-item.item_id}}'
      - name: setup-campaign
        type: call
        call: sfmc.create-email-campaign
        with:
          campaign_name: launch_{{upc}}
          subject: 'NEW: {{product_name}} from {{brand}}'
          template: private_label_launch
      - name: publish-to-bigcommerce
        type: call
        call: bigcommerce.create-product
        with:
          name: '{{product_name}}'
          sku: '{{upc}}'
          price: '{{retail_price}}'
          brand_name: '{{brand}}'
          categories: '[{{category}}]'
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://kroger-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: items
      path: /itemsV2
      operations:
      - name: create-item
        method: POST
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: products
      path: /products
      operations:
      - name: create-product
        method: POST
  - type: http
    namespace: sfmc
    baseUri: https://kroger.rest.marketingcloudapis.com/messaging/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: campaigns
      path: /email/campaigns
      operations:
      - name: create-email-campaign
        method: POST
  - type: http
    namespace: bigcommerce
    baseUri: https://api.bigcommerce.com/stores/kroger/v3
    authentication:
      type: bearer
      token: $secrets.bigcommerce_token
    resources:
    - name: products
      path: /catalog/products
      operations:
      - name: create-product
        method: POST
Open in Framework → View in Fleet → private-label-product-launch-workflow.yml

Allocates distribution center labor by pulling volume forecasts from Blue Yonder, scheduling associates in Kronos, optimizing assignments, and notifying DC managers via Teams.

naftiko: '0.5'
info:
  label: Distribution Center Labor Allocation Pipeline
  description: Allocates distribution center labor by pulling volume forecasts from Blue Yonder, scheduling associates in Kronos, optimizing assignments, and notifying DC managers via Teams.
  tags:
  - distribution
  - labor
  - blue-yonder
  - kronos
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: distribution-ops
    port: 8080
    tools:
    - name: distribution-center-labor-allocation
      description: Allocates distribution center labor.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Distribution Center Labor Allocation Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → distribution-center-labor-allocation-pipeline.yml

When a refrigeration or HVAC alert fires in Datadog, creates a ServiceNow work order, assigns to the facilities team, and notifies the store manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Store Equipment Maintenance Orchestrator
  description: When a refrigeration or HVAC alert fires in Datadog, creates a ServiceNow work order, assigns to the facilities team, and notifies the store manager in Microsoft Teams.
  tags:
  - store-ops
  - maintenance
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: equipment-maintenance
    port: 8080
    tools:
    - name: handle-equipment-alert
      description: Given a Datadog alert ID and store ID, create a maintenance work order and notify the store.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert event ID.
      - name: store_id
        in: body
        type: string
        description: The affected store location ID.
      - name: equipment_type
        in: body
        type: string
        description: Type of equipment (e.g. REFRIGERATION, HVAC, POS).
      steps:
      - name: get-alert-details
        type: call
        call: datadog.get-event
        with:
          event_id: '{{alert_id}}'
      - name: create-work-order
        type: call
        call: servicenow.create-task
        with:
          short_description: '{{equipment_type}} maintenance required at store {{store_id}}'
          description: 'Alert: {{get-alert-details.title}}. Severity: {{get-alert-details.priority}}. Details: {{get-alert-details.text}}. Equipment: {{equipment_type}}.'
          assigned_group: Facilities_Maintenance
          category: equipment_maintenance
          priority: '{{get-alert-details.priority}}'
      - name: notify-store-manager
        type: call
        call: msteams.send-channel-message
        with:
          team_id: store-{{store_id}}
          channel_id: maintenance
          text: 'Equipment alert: {{equipment_type}} issue detected. {{get-alert-details.title}}. Work order {{create-work-order.number}} has been created and assigned to Facilities. Priority: {{get-alert-details.priority}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: events
      path: /events/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-event
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://kroger.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → store-equipment-maintenance-orchestrator.yml

Checks SonarQube quality gate status for a Kroger microservice build, and if failed, creates a GitHub issue and alerts the development team in Teams with details on blockers.

naftiko: '0.5'
info:
  label: SonarQube Code Quality Gate Enforcer
  description: Checks SonarQube quality gate status for a Kroger microservice build, and if failed, creates a GitHub issue and alerts the development team in Teams with details on blockers.
  tags:
  - code-quality
  - sonarqube
  - github
  - microsoft-teams
  - devops
capability:
  exposes:
  - type: mcp
    namespace: code-quality
    port: 8080
    tools:
    - name: enforce-quality-gate
      description: Given a SonarQube project key, check quality gate and escalate failures.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The SonarQube project key.
      - name: github_repo
        in: body
        type: string
        description: The GitHub repository (org/repo).
      - name: branch
        in: body
        type: string
        description: The branch being analyzed.
      steps:
      - name: get-quality-gate
        type: call
        call: sonarqube.get-quality-gate-status
        with:
          project_key: '{{project_key}}'
      - name: create-issue
        type: call
        call: github.create-issue
        with:
          repo: '{{github_repo}}'
          title: 'Quality gate failed: {{project_key}} on {{branch}}'
          body: 'SonarQube quality gate FAILED. Status: {{get-quality-gate.status}}. Bugs: {{get-quality-gate.bugs}}. Vulnerabilities: {{get-quality-gate.vulnerabilities}}. Code smells: {{get-quality-gate.code_smells}}. Coverage: {{get-quality-gate.coverage}}%. Duplications: {{get-quality-gate.duplications}}%.'
          labels: quality-gate,automated
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: kroger-engineering
          channel_id: code-quality
          text: 'Quality gate FAILED for {{project_key}} ({{branch}}). Bugs: {{get-quality-gate.bugs}}, Vulns: {{get-quality-gate.vulnerabilities}}, Smells: {{get-quality-gate.code_smells}}. Coverage: {{get-quality-gate.coverage}}%. GitHub issue: {{create-issue.html_url}}'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.kroger.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status?projectKey={{project_key}}
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-quality-gate-status
        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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sonarqube-code-quality-gate-enforcer.yml

Analyzes digital coupon performance by pulling redemption data from Snowflake, calculating ROI metrics, generating performance reports in Tableau, and sharing with marketing leaders.

naftiko: '0.5'
info:
  label: Digital Coupon Performance Analytics Pipeline
  description: Analyzes digital coupon performance by pulling redemption data from Snowflake, calculating ROI metrics, generating performance reports in Tableau, and sharing with marketing leaders.
  tags:
  - marketing
  - coupons
  - snowflake
  - tableau
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: digital-ops
    port: 8080
    tools:
    - name: digital-coupon-performance-analytics
      description: Analyzes digital coupon performance.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Digital Coupon Performance Analytics Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-coupon-performance-analytics-pipeline.yml

Checks warehouse slot availability in JDA warehouse management system for distribution planning.

naftiko: '0.5'
info:
  label: JDA Warehouse Slot Availability
  description: Checks warehouse slot availability in JDA warehouse management system for distribution planning.
  tags:
  - warehouse
  - jda
capability:
  exposes:
  - type: mcp
    namespace: warehouse-mgmt
    port: 8080
    tools:
    - name: check-slots
      description: Check warehouse slot availability.
      inputParameters:
      - name: warehouse_id
        in: body
        type: string
        description: The warehouse id.
      call: jda.get-slots
      with:
        warehouse_id: '{{warehouse_id}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: jda
    baseUri: https://kroger-jda.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.jda_token
    resources:
    - name: slots
      path: /slots
      operations:
      - name: get-slots
        method: GET
Open in Framework → View in Fleet → jda-warehouse-slot-availability.yml

Verifies shelf tag price accuracy by scanning tags via Cloud Vision, comparing against the pricing database in Redis, creating correction tickets in ServiceNow, and alerting pricing teams.

naftiko: '0.5'
info:
  label: Shelf Tag Price Accuracy Pipeline
  description: Verifies shelf tag price accuracy by scanning tags via Cloud Vision, comparing against the pricing database in Redis, creating correction tickets in ServiceNow, and alerting pricing teams.
  tags:
  - pricing
  - accuracy
  - google-cloud
  - redis
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: shelf-ops
    port: 8080
    tools:
    - name: shelf-tag-price-accuracy
      description: Verifies shelf tag price accuracy.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Shelf Tag Price Accuracy Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → shelf-tag-price-accuracy-pipeline.yml

Reports store safety incidents by creating cases in ServiceNow, documenting evidence in SharePoint, notifying risk management via Teams, and triggering OSHA reporting workflows.

naftiko: '0.5'
info:
  label: Store Safety Incident Reporting Pipeline
  description: Reports store safety incidents by creating cases in ServiceNow, documenting evidence in SharePoint, notifying risk management via Teams, and triggering OSHA reporting workflows.
  tags:
  - safety
  - incidents
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-ops
    port: 8080
    tools:
    - name: store-safety-incident-reporting
      description: Reports store safety incidents.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The store identifier.
      - name: notification_email
        in: body
        type: string
        description: Notification email address.
      steps:
      - name: gather-data
        type: call
        call: primary.get-data
        with:
          store_id: '{{store_id}}'
      - name: analyze-data
        type: call
        call: analytics.run-analysis
        with:
          store_id: '{{store_id}}'
          data: '{{gather-data.results}}'
      - name: take-action
        type: call
        call: action.execute
        with:
          store_id: '{{store_id}}'
          analysis: '{{analyze-data.recommendations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notification_email}}'
          text: 'Store Safety Incident Reporting Pipeline complete for store {{store_id}}. Results: {{analyze-data.summary}}. Actions taken: {{take-action.count}}.'
  consumes:
  - type: http
    namespace: primary
    baseUri: https://kroger-api.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://kroger-analytics.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: analysis
      path: /analyze
      operations:
      - name: run-analysis
        method: POST
  - type: http
    namespace: action
    baseUri: https://kroger-ops.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ops_token
    resources:
    - name: actions
      path: /execute
      operations:
      - name: execute
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-safety-incident-reporting-pipeline.yml

Queries customer segmentation data from Snowflake for marketing analytics and targeted promotions.

naftiko: '0.5'
info:
  label: Snowflake Customer Segment Query
  description: Queries customer segmentation data from Snowflake for marketing analytics and targeted promotions.
  tags:
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: customer-analytics
    port: 8080
    tools:
    - name: query-segments
      description: Query customer segments from Snowflake.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The query.
      call: snowflake.run-query
      with:
        query: '{{query}}'
      outputParameters:
      - name: result
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://kroger-snowflake.kroger.com/api/v1
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: analytics
      path: /analytics
      operations:
      - name: run-query
        method: GET
Open in Framework → View in Fleet → snowflake-customer-segment-query.yml

Creates a digital coupon campaign by defining the offer in Salesforce, configuring the audience in Salesforce Marketing Cloud, publishing to the Kroger app via the API, and tracking baseline metrics in Google Analytics.

naftiko: '0.5'
info:
  label: Digital Coupon Campaign Launcher
  description: Creates a digital coupon campaign by defining the offer in Salesforce, configuring the audience in Salesforce Marketing Cloud, publishing to the Kroger app via the API, and tracking baseline metrics in Google Analytics.
  tags:
  - marketing
  - promotions
  - salesforce
  - salesforce-marketing-cloud
  - google-analytics
  - e-commerce
capability:
  exposes:
  - type: mcp
    namespace: coupon-campaigns
    port: 8080
    tools:
    - name: launch-digital-coupon
      description: Given coupon parameters, create the offer, configure the audience, publish to app, and set up tracking.
      inputParameters:
      - name: coupon_name
        in: body
        type: string
        description: Name of the coupon campaign.
      - name: discount_value
        in: body
        type: string
        description: Discount amount or percentage.
      - name: target_upc_list
        in: body
        type: string
        description: Comma-separated UPCs eligible for the coupon.
      - name: start_date
        in: body
        type: string
        description: Campaign start date (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: Campaign end date (YYYY-MM-DD).
      steps:
      - name: create-offer
        type: call
        call: salesforce.create-coupon-offer
        with:
          name: '{{coupon_name}}'
          discount: '{{discount_value}}'
          eligible_upcs: '{{target_upc_list}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: configure-audience
        type: call
        call: sfmc.create-audience-segment
        with:
          segment_name: coupon_{{create-offer.offer_id}}
          criteria: active_loyalty_members_with_category_affinity
      - name: publish-to-app
        type: call
        call: kroger-api.publish-coupon
        with:
          offer_id: '{{create-offer.offer_id}}'
          audience_id: '{{configure-audience.segment_id}}'
      - name: setup-tracking
        type: call
        call: ga.create-campaign
        with:
          campaign_name: coupon_{{create-offer.offer_id}}
          source: kroger_app
          medium: digital_coupon
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://kroger.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: coupon-offers
      path: /sobjects/Coupon_Offer__c
      operations:
      - name: create-coupon-offer
        method: POST
  - type: http
    namespace: sfmc
    baseUri: https://kroger.rest.marketingcloudapis.com/contacts/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: audiences
      path: /audiences
      operations:
      - name: create-audience-segment
        method: POST
  - type: http
    namespace: kroger-api
    baseUri: https://api.kroger.com/v1
    authentication:
      type: bearer
      token: $secrets.kroger_api_token
    resources:
    - name: coupons
      path: /coupons/publish
      operations:
      - name: publish-coupon
        method: POST
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: campaigns
      path: /properties/kroger-ecommerce/campaigns
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → digital-coupon-campaign-launcher.yml

Submits a time-off request in Workday and notifies the employee's manager via Teams for approval.

naftiko: '0.5'
info:
  label: Workday Time-Off Request Approval Workflow
  description: Submits a time-off request in Workday and notifies the employee's manager via Teams for approval.
  tags:
  - hr
  - workday
  - time-off
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: pto-management
    port: 8080
    tools:
    - name: submit-time-off-request
      description: Given a Workday employee ID, leave type, start and end dates, submit a leave request in Workday and notify the manager via Teams for approval. Use when a Medtronic employee requests vacation, sick leave, FMLA, or personal time.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the employee requesting leave.
      - name: leave_type
        in: body
        type: string
        description: 'Leave type: VACATION, SICK, FMLA, or PERSONAL.'
      - name: start_date
        in: body
        type: string
        description: First day of leave in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Last day of leave in YYYY-MM-DD format.
      steps:
      - name: get-worker
        type: call
        call: workday-pto.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-leave
        type: call
        call: workday-pto.create-leave-request
        with:
          worker_id: '{{workday_employee_id}}'
          leave_type: '{{leave_type}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: notify-manager
        type: call
        call: msteams-pto.send-message
        with:
          recipient_upn: '{{get-worker.manager_email}}'
          text: 'Leave approval needed: {{get-worker.full_name}} has requested {{leave_type}} from {{start_date}} to {{end_date}}. Request ID: {{create-leave.request_id}}. Approve in Workday.'
  consumes:
  - type: http
    namespace: workday-pto
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /medtronic/workers/{worker_id}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
    - name: leave-requests
      path: /medtronic/workers/{worker_id}/leaveRequests
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: create-leave-request
        method: POST
  - type: http
    namespace: msteams-pto
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-time-off-request-approval-workflow.yml

Retrieves weekly LinkedIn company page and job posting engagement metrics for Medtronic and posts a talent brand digest to the HR marketing Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Talent Brand Performance Digest
  description: Retrieves weekly LinkedIn company page and job posting engagement metrics for Medtronic and posts a talent brand digest to the HR marketing Teams channel.
  tags:
  - marketing
  - linkedin
  - social-media
  - reporting
  - microsoft-teams
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: talent-brand
    port: 8080
    tools:
    - name: digest-talent-brand-performance
      description: Given a LinkedIn organization ID and a Teams channel ID, retrieve weekly follower growth, job posting views, and candidate application rates from LinkedIn and publish a digest to the HR marketing channel. Use for weekly talent attraction reviews and employer brand performance reporting.
      inputParameters:
      - name: linkedin_org_id
        in: body
        type: string
        description: LinkedIn organization URN ID for the Medtronic company page.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the HR marketing team digest.
      steps:
      - name: get-org-stats
        type: call
        call: linkedin.get-organization-stats
        with:
          organization_id: '{{linkedin_org_id}}'
      - name: post-digest
        type: call
        call: msteams-talent-brand.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Talent Brand Digest: Followers: {{get-org-stats.follower_count}} | Impressions: {{get-org-stats.impressions}} | Engagement: {{get-org-stats.engagement_rate}}% | Job Views: {{get-org-stats.job_views}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: organization-stats
      path: /organizationalEntityShareStatistics
      operations:
      - name: get-organization-stats
        method: GET
  - type: http
    namespace: msteams-talent-brand
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-brand-performance-digest.yml

Provisions application access in Okta for a new or transferring employee based on their division and role, then confirms via Teams.

naftiko: '0.5'
info:
  label: Okta Application Access Provisioning
  description: Provisions application access in Okta for a new or transferring employee based on their division and role, then confirms via Teams.
  tags:
  - identity
  - security
  - okta
  - access-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: identity-provisioning
    port: 8080
    tools:
    - name: provision-employee-access
      description: Given an employee email, division, and job role, assign the correct Okta application groups and send an access confirmation to their Teams account. Use during onboarding or when an employee changes roles requiring updated access to clinical, quality, or commercial systems.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: Work email of the employee requiring access provisioning.
      - name: division
        in: body
        type: string
        description: Medtronic division for role-based access determination.
      - name: job_role
        in: body
        type: string
        description: Job role code determining Okta group assignments (e.g., CLINICAL_SPECIALIST, QA_ENGINEER, SALES_REP).
      - name: teams_upn
        in: body
        type: string
        description: Teams UPN for access confirmation notification.
      steps:
      - name: get-user
        type: call
        call: okta-prov.get-user-by-email
        with:
          email: '{{user_email}}'
      - name: assign-groups
        type: call
        call: okta-prov.assign-group
        with:
          user_id: '{{get-user.user_id}}'
          group_name: '{{job_role}}'
      - name: confirm-access
        type: call
        call: msteams-identity.send-message
        with:
          recipient_upn: '{{teams_upn}}'
          text: Application access provisioned for role {{job_role}} in {{division}}. Access your applications at medtronic.okta.com.
  consumes:
  - type: http
    namespace: okta-prov
    baseUri: https://medtronic.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: get-user-by-email
        method: GET
    - 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
  - type: http
    namespace: msteams-identity
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → okta-application-access-provisioning.yml

Creates a new job requisition in Workday for an approved headcount, assigns it to a recruiter, and notifies the hiring manager via Teams.

naftiko: '0.5'
info:
  label: Workday Recruiting Requisition Assignment
  description: Creates a new job requisition in Workday for an approved headcount, assigns it to a recruiter, and notifies the hiring manager via Teams.
  tags:
  - hr
  - recruiting
  - workday
  - microsoft-teams
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: open-job-requisition
      description: Given a job title, division, job family, and hiring manager UPN, create a new requisition in Workday and notify the hiring manager via Teams. Use when headcount is approved for clinical, engineering, or commercial roles across Medtronic's global divisions.
      inputParameters:
      - name: job_title
        in: body
        type: string
        description: Title of the role to be hired.
      - name: division
        in: body
        type: string
        description: Medtronic division the role belongs to.
      - name: job_family
        in: body
        type: string
        description: Medtronic job family classification.
      - name: hiring_manager_upn
        in: body
        type: string
        description: UPN of the hiring manager.
      steps:
      - name: create-req
        type: call
        call: workday-talent.create-requisition
        with:
          job_title: '{{job_title}}'
          division: '{{division}}'
          job_family: '{{job_family}}'
          hiring_manager: '{{hiring_manager_upn}}'
      - name: notify-hiring-manager
        type: call
        call: msteams-recruiting.send-message
        with:
          recipient_upn: '{{hiring_manager_upn}}'
          text: 'Job requisition opened: {{job_title}} in {{division}} ({{job_family}}). Req ID: {{create-req.requisition_id}}. Talent acquisition will be in touch shortly.'
  consumes:
  - type: http
    namespace: workday-talent
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /medtronic/jobRequisitions
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: msteams-recruiting
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-recruiting-requisition-assignment.yml

Extracts division-level actuals and forecasts from SAP S/4HANA and triggers a Power BI dataset refresh for CFO and finance leadership review.

naftiko: '0.5'
info:
  label: Quarterly Finance Forecast Consolidation
  description: Extracts division-level actuals and forecasts from SAP S/4HANA and triggers a Power BI dataset refresh for CFO and finance leadership review.
  tags:
  - finance
  - forecasting
  - sap
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-forecasting
    port: 8080
    tools:
    - name: consolidate-quarterly-forecast
      description: Given a fiscal quarter, extract division-level actuals and plan data from SAP S/4HANA and trigger a refresh of the finance forecast Power BI dataset. Use during quarterly planning cycles, budget reviews, and CFO reporting preparation.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter to consolidate (e.g., Q1-FY2027).
      - name: powerbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the consolidated finance forecast.
      - name: powerbi_workspace_id
        in: body
        type: string
        description: Power BI workspace ID containing the forecast dataset.
      steps:
      - name: get-sap-forecast
        type: call
        call: sap-finance.get-cost-center-data
        with:
          fiscal_period: '{{fiscal_quarter}}'
      - name: refresh-powerbi
        type: call
        call: powerbi-finance.trigger-refresh
        with:
          workspace_id: '{{powerbi_workspace_id}}'
          dataset_id: '{{powerbi_dataset_id}}'
  consumes:
  - type: http
    namespace: sap-finance
    baseUri: https://medtronic-s4.sap.com/sap/opu/odata/sap/FAR_ACDOCA_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-data
      path: /AcdocaItems
      operations:
      - name: get-cost-center-data
        method: GET
  - type: http
    namespace: powerbi-finance
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{workspace_id}/datasets/{dataset_id}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → quarterly-finance-forecast-consolidation.yml

Pulls the sprint status for the regulatory submissions Jira project and publishes a digest to the regulatory affairs Teams channel for weekly review.

naftiko: '0.5'
info:
  label: Jira Regulatory Submission Sprint Digest
  description: Pulls the sprint status for the regulatory submissions Jira project and publishes a digest to the regulatory affairs Teams channel for weekly review.
  tags:
  - devops
  - jira
  - sprint
  - reporting
  - microsoft-teams
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: digest-regulatory-sprint
      description: Given a Jira board ID for the regulatory submissions project and an active sprint ID, retrieve all in-progress and blocked issues and post a digest to the regulatory affairs Teams channel. Use for weekly regulatory sprint reviews and FDA submission progress reporting.
      inputParameters:
      - name: board_id
        in: body
        type: integer
        description: Jira board ID for the regulatory submissions project.
      - name: sprint_id
        in: body
        type: integer
        description: Active sprint ID to generate the digest for.
      - name: reg_channel_id
        in: body
        type: string
        description: Teams channel ID for the regulatory affairs team.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira-reg.get-sprint-issues
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: post-digest
        type: call
        call: msteams-reg.post-channel-message
        with:
          channel_id: '{{reg_channel_id}}'
          text: 'Regulatory Sprint Digest — Board {{board_id}} Sprint {{sprint_id}}: {{get-sprint-issues.in_progress_count}} in progress, {{get-sprint-issues.blocked_count}} blocked, {{get-sprint-issues.done_count}} done.'
  consumes:
  - type: http
    namespace: jira-reg
    baseUri: https://medtronic.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: get-sprint-issues
        method: GET
  - type: http
    namespace: msteams-reg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-regulatory-submission-sprint-digest.yml

Monitors scheduled Snowflake tasks for clinical trial and patient data pipelines and creates a ServiceNow incident if any critical tasks fail.

naftiko: '0.5'
info:
  label: Snowflake Clinical Data Pipeline Monitor
  description: Monitors scheduled Snowflake tasks for clinical trial and patient data pipelines and creates a ServiceNow incident if any critical tasks fail.
  tags:
  - data
  - analytics
  - snowflake
  - servicenow
  - clinical
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-ops
    port: 8080
    tools:
    - name: monitor-clinical-pipeline
      description: Given a Snowflake database and schema for clinical data pipelines, check for failed or overdue tasks and create a ServiceNow incident automatically. Use for daily monitoring of clinical trial data feeds, post-market surveillance pipelines, and patient outcomes reporting.
      inputParameters:
      - name: snowflake_database
        in: body
        type: string
        description: The Snowflake database containing clinical data pipeline tasks.
      - name: snowflake_schema
        in: body
        type: string
        description: The Snowflake schema containing the pipeline tasks to check.
      steps:
      - name: get-task-status
        type: call
        call: snowflake.get-task-history
        with:
          database: '{{snowflake_database}}'
          schema: '{{snowflake_schema}}'
      - name: create-incident
        type: call
        call: servicenow-data.create-incident
        with:
          short_description: 'Clinical data pipeline failure: {{snowflake_database}}.{{snowflake_schema}}'
          category: data_pipeline
          urgency: '1'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://medtronic.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: get-task-history
        method: GET
  - type: http
    namespace: servicenow-data
    baseUri: https://medtronic.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-data-pipeline-monitor.yml

Retrieves a vendor invoice in SAP S/4HANA, validates it against the corresponding PO, and triggers the payment approval workflow.

naftiko: '0.5'
info:
  label: Vendor Invoice Three-Way Match and Payment Approval
  description: Retrieves a vendor invoice in SAP S/4HANA, validates it against the corresponding PO, and triggers the payment approval workflow.
  tags:
  - finance
  - erp
  - sap
  - accounts-payable
  - invoice
capability:
  exposes:
  - type: mcp
    namespace: accounts-payable
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Given a vendor invoice number and PO number, retrieve the invoice from SAP, validate the amount against the PO total, and trigger the payment approval workflow. Use for accounts payable processing and three-way invoice matching for medical device component suppliers.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: Vendor invoice number to process.
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number for three-way match validation.
      steps:
      - name: get-invoice
        type: call
        call: sap-fi.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: get-po
        type: call
        call: sap-mm.get-po
        with:
          po_number: '{{po_number}}'
      - name: approve-invoice
        type: call
        call: sap-fi.approve-invoice
        with:
          invoice_id: '{{get-invoice.invoice_id}}'
  consumes:
  - type: http
    namespace: sap-fi
    baseUri: https://medtronic-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{invoice_number}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
      - name: approve-invoice
        method: POST
  - type: http
    namespace: sap-mm
    baseUri: https://medtronic-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{po_number}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → vendor-invoice-three-way-match-and-payment-approval.yml

When a Datadog alert fires on a manufacturing or quality control system, creates a ServiceNow quality incident, assigns it to the quality engineering team, and notifies operations via Teams.

naftiko: '0.5'
info:
  label: Manufacturing Quality Incident Response
  description: When a Datadog alert fires on a manufacturing or quality control system, creates a ServiceNow quality incident, assigns it to the quality engineering team, and notifies operations via Teams.
  tags:
  - manufacturing
  - quality
  - datadog
  - servicenow
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: handle-quality-incident
      description: Given a Datadog monitor alert for a manufacturing or quality control system, create a ServiceNow quality incident, assign it to the QE team, and post an alert to the operations Teams channel. Invoke when any OT/manufacturing system alert fires in Datadog for Medtronic production environments.
      inputParameters:
      - name: monitor_name
        in: body
        type: string
        description: The Datadog monitor name that triggered the alert.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: critical or high.'
      - name: manufacturing_line
        in: body
        type: string
        description: Manufacturing line or quality control system identifier affected.
      - name: alert_url
        in: body
        type: string
        description: Direct URL to the Datadog alert for investigation.
      steps:
      - name: create-quality-incident
        type: call
        call: servicenow-quality.create-incident
        with:
          short_description: '[{{severity}}] Manufacturing alert: {{monitor_name}} — Line {{manufacturing_line}}'
          category: quality_incident
          assigned_group: Quality_Engineering
          urgency: '1'
      - name: alert-ops-team
        type: call
        call: msteams-manufacturing.post-channel-message
        with:
          channel_id: manufacturing-operations
          text: 'QUALITY INCIDENT {{create-quality-incident.number}}: {{monitor_name}} | Line: {{manufacturing_line}} | Severity: {{severity}} | Alert: {{alert_url}}'
  consumes:
  - type: http
    namespace: servicenow-quality
    baseUri: https://medtronic.service-now.com/api/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-manufacturing
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → manufacturing-quality-incident-response.yml

Retrieves current on-call engineer from PagerDuty.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Lookup
  description: Retrieves current on-call engineer from PagerDuty.
  tags:
  - it
  - observability
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: on-call
    port: 8080
    tools:
    - name: get-on-call
      description: Given schedule ID, return on-call engineer. Use for escalation.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: Schedule ID.
      call: pagerduty.get-on-call
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: engineer
        type: string
        mapping: $.oncalls[0].user.name
  consumes:
  - 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?schedule_ids[]={{schedule_id}}
      inputParameters:
      - name: schedule_id
        in: query
      operations:
      - name: get-on-call
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-lookup.yml

Retrieves firewall security policy rules from Palo Alto Networks Panorama for regulated network segments and posts a compliance summary to the IT security Teams channel.

naftiko: '0.5'
info:
  label: Palo Alto Networks Security Policy Audit
  description: Retrieves firewall security policy rules from Palo Alto Networks Panorama for regulated network segments and posts a compliance summary to the IT security Teams channel.
  tags:
  - security
  - network
  - palo-alto
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: audit-firewall-policies
      description: Given a Palo Alto Networks Panorama device group, retrieve all active security policy rules and post a compliance summary to the IT security operations Teams channel. Use for quarterly HIPAA and SOX security control reviews and network access audits on clinical and manufacturing network segments.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: Palo Alto Panorama device group to audit (e.g., clinical-network, manufacturing-ot, corporate).
      - name: security_channel_id
        in: body
        type: string
        description: Teams channel ID for the IT security operations team.
      steps:
      - name: get-policies
        type: call
        call: paloalto.get-security-rules
        with:
          device_group: '{{device_group}}'
      - name: post-audit-report
        type: call
        call: msteams-netsec.post-channel-message
        with:
          channel_id: '{{security_channel_id}}'
          text: 'Firewall Policy Audit for device group {{device_group}}: {{get-policies.rule_count}} rules retrieved. Review for permissive or non-compliant rules per policy.'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.medtronic.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: security-rules
      path: /Objects/SecurityRules
      operations:
      - name: get-security-rules
        method: GET
  - type: http
    namespace: msteams-netsec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → palo-alto-networks-security-policy-audit.yml

Checks the status of Databricks job runs for medical device R&D and signal processing models and alerts the data science team via Teams if any runs fail.

naftiko: '0.5'
info:
  label: Databricks R&D Model Training Monitor
  description: Checks the status of Databricks job runs for medical device R&D and signal processing models and alerts the data science team via Teams if any runs fail.
  tags:
  - ai
  - data
  - databricks
  - microsoft-teams
  - ml-operations
  - rd
capability:
  exposes:
  - type: mcp
    namespace: rd-mlops
    port: 8080
    tools:
    - name: monitor-rd-model-runs
      description: Given an Azure Databricks workspace and job ID, retrieve the latest job run status and alert the R&D data science Teams channel if the run failed. Use for daily monitoring of cardiac signal processing, device telemetry analysis, and predictive maintenance model training jobs.
      inputParameters:
      - name: databricks_host
        in: body
        type: string
        description: Azure Databricks workspace hostname.
      - name: job_id
        in: body
        type: integer
        description: The Databricks job ID to check for run status.
      - name: data_science_channel_id
        in: body
        type: string
        description: Teams channel ID for the R&D data science team.
      steps:
      - name: get-job-run
        type: call
        call: databricks.get-latest-run
        with:
          job_id: '{{job_id}}'
      - name: alert-team
        type: call
        call: msteams-rd.post-channel-message
        with:
          channel_id: '{{data_science_channel_id}}'
          text: 'R&D Model Job Alert: Job {{job_id}} on {{databricks_host}} — Status: {{get-job-run.state}}. Run ID: {{get-job-run.run_id}}. Please investigate if failed.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-0000000000.0.azuredatabricks.net/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: job-runs
      path: /jobs/runs/get-latest-by-job-id
      operations:
      - name: get-latest-run
        method: GET
  - type: http
    namespace: msteams-rd
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → databricks-r-d-model-training-monitor.yml

When an employee separation is processed in Workday, disables the Microsoft 365 account, revokes Okta sessions, and closes open ServiceNow tickets assigned to that user.

naftiko: '0.5'
info:
  label: Employee Offboarding and Access Revocation
  description: When an employee separation is processed in Workday, disables the Microsoft 365 account, revokes Okta sessions, and closes open ServiceNow tickets assigned to that user.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-employee-offboarding
      description: Given a Workday employee ID for a departing employee, disable their Microsoft 365 account, revoke all Okta sessions, and close open ServiceNow tickets. Invoke on confirmed employee separation effective date.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: separation_date
        in: body
        type: string
        description: The effective separation date in YYYY-MM-DD format.
      steps:
      - name: get-worker
        type: call
        call: workday-offboard.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: disable-m365
        type: call
        call: msgraph-offboard.disable-user
        with:
          user_id: '{{get-worker.work_email}}'
      - name: revoke-okta
        type: call
        call: okta.clear-user-sessions
        with:
          user_id: '{{get-worker.work_email}}'
      - name: close-snow-tickets
        type: call
        call: servicenow-offboard.close-user-tickets
        with:
          assigned_to: '{{get-worker.work_email}}'
  consumes:
  - type: http
    namespace: workday-offboard
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /medtronic/workers/{worker_id}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph-offboard
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{user_id}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://medtronic.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-sessions
      path: /users/{user_id}/sessions
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: clear-user-sessions
        method: DELETE
  - type: http
    namespace: servicenow-offboard
    baseUri: https://medtronic.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: close-user-tickets
        method: PATCH
Open in Framework → View in Fleet → employee-offboarding-and-access-revocation.yml

Logs adverse events in safety database, notifies medical team, and creates regulatory tasks.

naftiko: '0.5'
info:
  label: Clinical Adverse Event Reporting Orchestration
  description: Logs adverse events in safety database, notifies medical team, and creates regulatory tasks.
  tags:
  - clinical
  - regulatory
  - safety
  - oracle
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: report-ae
      description: Given study, patient, event, and severity, log event, notify, and create task. Use for SAE reporting.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Study ID.
      - name: patient_id
        in: body
        type: string
        description: Patient ID.
      - name: event_description
        in: body
        type: string
        description: Event.
      - name: severity
        in: body
        type: string
        description: Severity.
      steps:
      - name: log
        type: call
        call: oracle-argus.create-case
        with:
          study_id: '{{study_id}}'
          subject_id: '{{patient_id}}'
          description: '{{event_description}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: medical-safety
          text: 'SAE: {{study_id}} Patient {{patient_id}}: {{event_description}} ({{severity}}). Case: {{log.case_number}}'
      - name: task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'SAE report: {{log.case_number}}'
          priority: '1'
  consumes:
  - type: http
    namespace: oracle-argus
    baseUri: https://medtronic-argus.oracle.com/api/v2
    authentication:
      type: bearer
      token: $secrets.oracle_argus_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://medtronic.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → clinical-adverse-event-reporting-orchestration.yml

When a CrowdStrike Falcon detection fires on a Medtronic endpoint, creates a ServiceNow security incident, posts a Datadog security event, and alerts the SOC via Teams.

naftiko: '0.5'
info:
  label: CrowdStrike Endpoint Threat Detection Handler
  description: When a CrowdStrike Falcon detection fires on a Medtronic endpoint, creates a ServiceNow security incident, posts a Datadog security event, and alerts the SOC via Teams.
  tags:
  - security
  - crowdstrike
  - servicenow
  - datadog
  - microsoft-teams
  - threat-detection
capability:
  exposes:
  - type: mcp
    namespace: soc-ops
    port: 8080
    tools:
    - name: handle-endpoint-threat
      description: Given a CrowdStrike detection ID, severity, affected hostname, and MITRE tactic, retrieve the detection details, create a ServiceNow security incident, log a Datadog security event, and alert the SOC Teams channel. Invoke immediately on any medium, high, or critical CrowdStrike detection across Medtronic's global endpoint fleet.
      inputParameters:
      - name: detection_id
        in: body
        type: string
        description: CrowdStrike Falcon detection ID.
      - name: severity
        in: body
        type: string
        description: 'Detection severity: critical, high, or medium.'
      - name: affected_host
        in: body
        type: string
        description: Hostname of the affected endpoint.
      - name: tactic
        in: body
        type: string
        description: MITRE ATT&CK tactic associated with the detection.
      steps:
      - name: get-detection
        type: call
        call: crowdstrike.get-detection
        with:
          detection_id: '{{detection_id}}'
      - name: create-security-incident
        type: call
        call: servicenow-soc.create-incident
        with:
          short_description: '[{{severity}}] Endpoint threat: {{affected_host}} — {{tactic}}'
          category: security_incident
          urgency: '1'
      - name: post-datadog-event
        type: call
        call: datadog-soc.create-event
        with:
          title: 'CrowdStrike Detection: {{affected_host}}'
          text: 'Detection {{detection_id}} | Severity: {{severity}} | Tactic: {{tactic}} | ServiceNow: {{create-security-incident.number}}'
          alert_type: error
      - name: alert-soc
        type: call
        call: msteams-soc.post-channel-message
        with:
          channel_id: security-operations-center
          text: 'THREAT DETECTED: {{affected_host}} | Severity: {{severity}} | Tactic: {{tactic}} | CrowdStrike: {{detection_id}} | ServiceNow: {{create-security-incident.number}}'
  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
      operations:
      - name: get-detection
        method: GET
  - type: http
    namespace: servicenow-soc
    baseUri: https://medtronic.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: datadog-soc
    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-soc
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → crowdstrike-endpoint-threat-detection-handler.yml

When a Salesforce opportunity for a new device is marked Closed Won, creates a Jira epic for the clinical and regulatory team and notifies the clinical affairs Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to Clinical Trial Coordination
  description: When a Salesforce opportunity for a new device is marked Closed Won, creates a Jira epic for the clinical and regulatory team and notifies the clinical affairs Teams channel.
  tags:
  - crm
  - sales
  - salesforce
  - jira
  - microsoft-teams
  - clinical-affairs
capability:
  exposes:
  - type: mcp
    namespace: clinical-coordination
    port: 8080
    tools:
    - name: sync-opportunity-to-clinical
      description: Given a Salesforce opportunity ID at Closed Won stage, create a Jira epic for the clinical affairs team to coordinate next steps, and notify the clinical channel in Teams. Use when a hospital system or key account commits to a new Medtronic therapy or device platform.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID at Closed Won stage.
      - name: clinical_channel_id
        in: body
        type: string
        description: Teams channel ID for the clinical affairs team.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opps.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-epic
        type: call
        call: jira-clinical.create-issue
        with:
          project_key: CLIN
          issuetype: Epic
          summary: 'Clinical coordination: {{get-opportunity.account_name}} — {{get-opportunity.name}}'
          description: 'Salesforce: {{opportunity_id}}

            Account: {{get-opportunity.account_name}}

            Device: {{get-opportunity.product_name}}

            Contract Value: {{get-opportunity.amount}}'
      - name: notify-clinical-team
        type: call
        call: msteams-clinical.post-channel-message
        with:
          channel_id: '{{clinical_channel_id}}'
          text: 'New account commitment: {{get-opportunity.account_name}} — {{get-opportunity.product_name}} (${{get-opportunity.amount}}). Clinical epic: {{create-epic.key}}'
  consumes:
  - type: http
    namespace: salesforce-opps
    baseUri: https://medtronic.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-clinical
    baseUri: https://medtronic.atlassian.net/rest/api/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-clinical
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-clinical-trial-coordination.yml

Submits an IT change request in ServiceNow for regulated system changes, assigns it to the CAB, and notifies approvers via Teams.

naftiko: '0.5'
info:
  label: ServiceNow IT Change Management Submission
  description: Submits an IT change request in ServiceNow for regulated system changes, assigns it to the CAB, and notifies approvers via Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - gxp
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-regulated-change
      description: Given a change title, description, risk level, and implementation window, create a ServiceNow change request for a GxP or regulated system change and notify the Change Advisory Board in Teams. Use for changes to ERP, clinical data, manufacturing execution, and quality management systems.
      inputParameters:
      - name: change_title
        in: body
        type: string
        description: Short title describing the regulated system change.
      - name: change_description
        in: body
        type: string
        description: Full description including rationale, test evidence, and rollback plan.
      - name: risk_level
        in: body
        type: string
        description: 'Change risk level: low, medium, or high.'
      - name: regulated_system
        in: body
        type: string
        description: Name of the regulated system being changed (e.g., SAP ERP, MES, LIMS).
      - name: implementation_window
        in: body
        type: string
        description: Planned implementation date and window in ISO 8601 format.
      steps:
      - name: create-change
        type: call
        call: servicenow-changes.create-change
        with:
          short_description: '{{change_title}}'
          description: 'System: {{regulated_system}}

            {{change_description}}'
          risk: '{{risk_level}}'
          start_date: '{{implementation_window}}'
      - name: notify-cab
        type: call
        call: msteams-cab.post-channel-message
        with:
          channel_id: change-advisory-board
          text: 'New regulated change request: {{create-change.number}} — {{change_title}} | System: {{regulated_system}} | Risk: {{risk_level}} | Window: {{implementation_window}}'
  consumes:
  - type: http
    namespace: servicenow-changes
    baseUri: https://medtronic.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-cab
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-change-management-submission.yml

Orchestrates software release for Medtronic Hugo surgical robot by validating, creating regulatory tasks, and notifying engineering.

naftiko: '0.5'
info:
  label: Surgical Robot Software Release Orchestration
  description: Orchestrates software release for Medtronic Hugo surgical robot by validating, creating regulatory tasks, and notifying engineering.
  tags:
  - rd
  - regulatory
  - medical-device
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: robot-software
    port: 8080
    tools:
    - name: release-software
      description: Given version and branch, validate, create regulatory task, and notify. Use for Hugo robot software.
      inputParameters:
      - name: software_version
        in: body
        type: string
        description: Version.
      - name: release_branch
        in: body
        type: string
        description: Branch.
      steps:
      - name: validate
        type: call
        call: github.create-workflow-dispatch
        with:
          repo: medtronic/hugo-software
          workflow: validation.yml
          ref: '{{release_branch}}'
      - name: regulatory
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Regulatory: Hugo software {{software_version}}'
          category: regulatory_review
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: hugo-engineering
          text: 'Hugo software {{software_version}} release initiated. Regulatory: {{regulatory.number}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: create-workflow-dispatch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://medtronic.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → surgical-robot-software-release-orchestration.yml

Enriches a new Salesforce lead from a hospital or health system with facility size and specialty data, assigns it to the correct territory rep, and notifies them via Teams.

naftiko: '0.5'
info:
  label: Salesforce Medical Device Lead Enrichment
  description: Enriches a new Salesforce lead from a hospital or health system with facility size and specialty data, assigns it to the correct territory rep, and notifies them via Teams.
  tags:
  - crm
  - sales
  - salesforce
  - microsoft-teams
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: enrich-and-assign-lead
      description: Given a Salesforce lead ID from a hospital, IDN, or surgeon contact, retrieve the lead details, update ownership to the correct territory rep, and notify them via Teams. Use when a new healthcare provider lead is created in Salesforce from a trade show, referral, or web form.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich and assign.
      steps:
      - name: get-lead
        type: call
        call: salesforce-leads.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: update-lead
        type: call
        call: salesforce-leads.update-lead
        with:
          lead_id: '{{lead_id}}'
          status: Working
      - name: notify-rep
        type: call
        call: msteams-sales.send-message
        with:
          recipient_upn: '{{get-lead.owner_email}}'
          text: 'New lead assigned: {{get-lead.company}} — {{get-lead.first_name}} {{get-lead.last_name}} ({{get-lead.title}}) | Product interest: {{get-lead.product_interest}} | Salesforce ID: {{lead_id}}'
  consumes:
  - type: http
    namespace: salesforce-leads
    baseUri: https://medtronic.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: msteams-sales
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-medical-device-lead-enrichment.yml

Manages implantable device lot release by verifying QC, releasing batch, creating CoA, and notifying distribution.

naftiko: '0.5'
info:
  label: Implant Device Lot Release Orchestration
  description: Manages implantable device lot release by verifying QC, releasing batch, creating CoA, and notifying distribution.
  tags:
  - quality
  - manufacturing
  - medical-device
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lot-release
    port: 8080
    tools:
    - name: release-lot
      description: Given batch and product, verify QC, release, and notify. Use for device lot release.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: Batch.
      - name: product_code
        in: body
        type: string
        description: Product.
      steps:
      - name: qc
        type: call
        call: sap-erp.get-inspection
        with:
          batch: '{{batch_number}}'
      - name: release
        type: call
        call: sap-erp.release-batch
        with:
          batch: '{{batch_number}}'
      - name: coa
        type: call
        call: servicenow.create-task
        with:
          short_description: 'CoA: {{batch_number}} {{product_code}}'
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: distribution
          text: 'Lot {{batch_number}} ({{product_code}}) released. CoA: {{coa.number}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://medtronic-s4.sap.com/sap/opu/odata/sap/QM_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspections
      path: /A_InspectionResult
      operations:
      - name: get-inspection
        method: GET
    - name: batches
      path: /A_BatchRelease
      operations:
      - name: release-batch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://medtronic.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → implant-device-lot-release-orchestration.yml

Returns current headcount by Medtronic division, job family, and region from Workday for use in workforce planning and finance reporting.

naftiko: '0.5'
info:
  label: Workday Headcount Snapshot by Division
  description: Returns current headcount by Medtronic division, job family, and region from Workday for use in workforce planning and finance reporting.
  tags:
  - hr
  - finance
  - workday
  - headcount
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: workforce-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns a breakdown of Medtronic employees by division, job family, and region from Workday. Use for quarterly workforce planning, FDA staffing compliance, and executive headcount reporting.
      inputParameters:
      - name: division
        in: body
        type: string
        description: Optional Medtronic division to filter results. Leave blank for global headcount.
      call: workday-hc.headcount-export
      with:
        division: '{{division}}'
      outputParameters:
      - name: total_headcount
        type: number
        mapping: $.total
      - name: by_division
        type: array
        mapping: $.divisions
  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: /medtronic/workers/export
      operations:
      - name: headcount-export
        method: GET
Open in Framework → View in Fleet → workday-headcount-snapshot-by-division.yml

Queries SAP Ariba for supplier contracts expiring within a specified number of days and posts a prioritized renewal list to the procurement Teams channel.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Expiry Alert
  description: Queries SAP Ariba for supplier contracts expiring within a specified number of days and posts a prioritized renewal list to the procurement Teams channel.
  tags:
  - procurement
  - sap-ariba
  - contract-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: contract-renewals
    port: 8080
    tools:
    - name: alert-expiring-contracts
      description: Query SAP Ariba for all supplier contracts expiring within a specified number of days and post a summary to the procurement Teams channel. Use for monthly contract renewal planning with direct material suppliers, CROs, and technology vendors.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: integer
        description: Number of days ahead to look for expiring contracts (e.g., 90).
      - name: teams_channel_id
        in: body
        type: string
        description: Procurement Teams channel ID to post the expiry alert to.
      steps:
      - name: get-expiring-contracts
        type: call
        call: ariba-contracts.get-contracts
        with:
          expiry_days: '{{days_until_expiry}}'
      - name: post-alert
        type: call
        call: msteams-contracts.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Contract Expiry Alert: {{get-expiring-contracts.count}} supplier contracts expire within {{days_until_expiry}} days. Please review and initiate renewals in SAP Ariba.'
  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
      operations:
      - name: get-contracts
        method: GET
  - type: http
    namespace: msteams-contracts
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-contract-expiry-alert.yml

Detects Azure spending anomalies in research or commercial subscriptions, creates a ServiceNow change request, and alerts the FinOps team via Teams.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Response
  description: Detects Azure spending anomalies in research or commercial subscriptions, creates a ServiceNow change request, and alerts the FinOps team via Teams.
  tags:
  - cloud
  - finops
  - azure
  - servicenow
  - microsoft-teams
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an Azure subscription ID, anomalous spend amount, and responsible service, open a ServiceNow change request for investigation and alert the FinOps Teams channel. Use when Azure Cost Management detects unexpected spending in R&D, clinical systems, or commercial cloud subscriptions.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID where the anomaly was detected.
      - name: anomaly_amount
        in: body
        type: number
        description: Anomalous spend amount in USD above baseline.
      - name: service_name
        in: body
        type: string
        description: Azure service or resource group responsible for the anomaly.
      steps:
      - name: create-change
        type: call
        call: servicenow-cost.create-change
        with:
          short_description: 'Azure cost anomaly: {{service_name}} — ${{anomaly_amount}} above baseline'
          category: cloud_cost
      - name: alert-finops
        type: call
        call: msteams-finops.post-channel-message
        with:
          channel_id: finops-alerts
          text: 'Cost Anomaly: Azure {{service_name}} in {{subscription_id}} is ${{anomaly_amount}} over budget. ServiceNow: {{create-change.number}}'
  consumes:
  - type: http
    namespace: servicenow-cost
    baseUri: https://medtronic.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-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-response.yml

Submits a procurement requisition for medical device components or raw materials in SAP Ariba and notifies the requester via Teams when submitted for approval.

naftiko: '0.5'
info:
  label: SAP Ariba Medical Component Procurement Requisition
  description: Submits a procurement requisition for medical device components or raw materials in SAP Ariba and notifies the requester via Teams when submitted for approval.
  tags:
  - procurement
  - sap-ariba
  - supply-chain
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ariba-procurement
    port: 8080
    tools:
    - name: submit-component-requisition
      description: Given a component description, cost center, quantity, and amount, create a procurement requisition in SAP Ariba for medical device components or manufacturing materials and notify the requester via Teams. Use for direct materials, clinical supplies, and R&D procurement requests.
      inputParameters:
      - name: item_description
        in: body
        type: string
        description: Description of the medical component or material being requested.
      - name: cost_center
        in: body
        type: string
        description: SAP cost center to charge the purchase against.
      - name: quantity
        in: body
        type: number
        description: Quantity of units required.
      - name: estimated_amount
        in: body
        type: number
        description: Estimated total cost in USD.
      - name: requester_upn
        in: body
        type: string
        description: UPN of the employee submitting the requisition.
      steps:
      - name: create-requisition
        type: call
        call: ariba.create-requisition
        with:
          description: '{{item_description}}'
          cost_center: '{{cost_center}}'
          quantity: '{{quantity}}'
          estimated_amount: '{{estimated_amount}}'
          requester: '{{requester_upn}}'
      - name: notify-requester
        type: call
        call: msteams-ariba.send-message
        with:
          recipient_upn: '{{requester_upn}}'
          text: 'Requisition submitted: {{create-requisition.requisition_id}} for {{item_description}} ({{quantity}} units, ${{estimated_amount}}). Pending approval in SAP Ariba.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-requisitions/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: msteams-ariba
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-medical-component-procurement-requisition.yml

Manages medical device recall notifications by identifying affected lots, notifying hospitals, and creating tracking records.

naftiko: '0.5'
info:
  label: Recall Management Notification Orchestration
  description: Manages medical device recall notifications by identifying affected lots, notifying hospitals, and creating tracking records.
  tags:
  - regulatory
  - quality
  - safety
  - sap
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recall-management
    port: 8080
    tools:
    - name: initiate-recall
      description: Given product code and recall reason, identify lots, notify customers, and create tracking. Use for device recalls.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Product.
      - name: recall_reason
        in: body
        type: string
        description: Reason.
      steps:
      - name: get-lots
        type: call
        call: sap-erp.query-affected-lots
        with:
          material: '{{product_code}}'
      - name: create-recall-record
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Recall: {{product_code}} - {{recall_reason}}'
          category: recall_management
          priority: '1'
      - name: notify-customers
        type: call
        call: salesforce.create-campaign
        with:
          name: 'Recall notification: {{product_code}}'
          type: recall
      - name: alert-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-safety
          text: 'RECALL: {{product_code}} - {{recall_reason}}. Lots: {{get-lots.count}}. Task: {{create-recall-record.number}}'
  consumes:
  - type: http
    namespace: sap-erp
    baseUri: https://medtronic-s4.sap.com/sap/opu/odata/sap/PP_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: lots
      path: /A_Batch
      operations:
      - name: query-affected-lots
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://medtronic.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: salesforce
    baseUri: https://medtronic.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → recall-management-notification-orchestration.yml

Orchestrates firmware release for cardiac rhythm management devices by running validation, creating regulatory tasks, and notifying engineering.

naftiko: '0.5'
info:
  label: Cardiac Device Firmware Release Orchestration
  description: Orchestrates firmware release for cardiac rhythm management devices by running validation, creating regulatory tasks, and notifying engineering.
  tags:
  - rd
  - regulatory
  - medical-device
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: firmware-release
    port: 8080
    tools:
    - name: release-firmware
      description: Given version and branch, trigger validation, create regulatory task, and notify. Use for CRM device firmware.
      inputParameters:
      - name: firmware_version
        in: body
        type: string
        description: Version.
      - name: release_branch
        in: body
        type: string
        description: Branch.
      steps:
      - name: validate
        type: call
        call: github.create-workflow-dispatch
        with:
          repo: medtronic/crm-firmware
          workflow: validation.yml
          ref: '{{release_branch}}'
      - name: regulatory-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Regulatory review: CRM firmware {{firmware_version}}'
          category: regulatory_review
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: crm-engineering
          text: 'CRM firmware {{firmware_version}} release initiated. Regulatory task: {{regulatory-task.number}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repo}}/actions/workflows/{{workflow}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow
        in: path
      operations:
      - name: create-workflow-dispatch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://medtronic.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.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cardiac-device-firmware-release-orchestration.yml

Triggers a Power BI dataset refresh for the commercial performance dashboard and notifies the commercial analytics team via Teams when complete.

naftiko: '0.5'
info:
  label: Power BI Commercial Performance Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the commercial performance dashboard and notifies the commercial analytics team via Teams when complete.
  tags:
  - data
  - analytics
  - power-bi
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-commercial-dashboard
      description: Given a Power BI workspace ID and dataset ID, trigger a refresh of the Medtronic commercial performance dataset and notify the analytics team in Teams. Use before quarterly business reviews, sales leadership meetings, and board reporting cycles.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Power BI workspace ID containing the commercial dashboard dataset.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID to refresh.
      - name: notify_channel_id
        in: body
        type: string
        description: Teams channel ID for the analytics team notification.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-team
        type: call
        call: msteams-bi.post-channel-message
        with:
          channel_id: '{{notify_channel_id}}'
          text: Commercial performance dashboard refresh triggered for dataset {{dataset_id}}. Data will be available shortly.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{workspace_id}/datasets/{dataset_id}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams-bi
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-commercial-performance-dashboard-refresh.yml

Retrieves a submitted SAP Concur expense report and notifies the approving manager via Teams with a summary and direct approval link.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Approval Notifier
  description: Retrieves a submitted SAP Concur expense report and notifies the approving manager via Teams with a summary and direct approval link.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: expense-approvals
    port: 8080
    tools:
    - name: notify-expense-approver
      description: Given a SAP Concur expense report ID and approver UPN, retrieve the report details and notify the approver via Teams with a cost summary and link to review and approve. Use when an employee submits a travel or field clinical expense report.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: SAP Concur expense report ID requiring approval.
      - name: approver_upn
        in: body
        type: string
        description: UPN of the approving manager.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{expense_report_id}}'
      - name: notify-approver
        type: call
        call: msteams-concur.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Expense approval needed: {{get-report.employee_name}} submitted ${{get-report.total_amount}} for {{get-report.purpose}}. Report: {{expense_report_id}}. Approve at: {{get-report.approval_url}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{report_id}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: msteams-concur
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chats
      path: /users/{upn}/chats
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-approval-notifier.yml

Retrieves development pipeline status for Medtronic diabetes management devices.

naftiko: '0.5'
info:
  label: Diabetes Device Pipeline Status Lookup
  description: Retrieves development pipeline status for Medtronic diabetes management devices.
  tags:
  - rd
  - medical-device
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: pipeline
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Given device program ID, return development phase and milestones. Use for R&D pipeline visibility.
      inputParameters:
      - name: program_id
        in: body
        type: string
        description: Program ID.
      call: snowflake.execute-query
      with:
        query_name: device_pipeline_status
        params: '{{program_id}}'
      outputParameters:
      - name: phase
        type: string
        mapping: $.data[0].phase
      - name: next_milestone
        type: string
        mapping: $.data[0].next_milestone
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://medtronic.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → diabetes-device-pipeline-status-lookup.yml

Retrieves clinical trial protocol documents from SharePoint and uses the Anthropic Claude API to generate a concise summary of inclusion criteria, endpoints, and risk factors for the clinical affairs team.

naftiko: '0.5'
info:
  label: AI-Assisted Clinical Trial Document Summarizer
  description: Retrieves clinical trial protocol documents from SharePoint and uses the Anthropic Claude API to generate a concise summary of inclusion criteria, endpoints, and risk factors for the clinical affairs team.
  tags:
  - ai
  - clinical
  - anthropic
  - sharepoint
  - microsoft-teams
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: clinical-ai
    port: 8080
    tools:
    - name: summarize-trial-protocol
      description: Given a SharePoint site ID and document path for a clinical trial protocol, retrieve the document via Microsoft Graph, send it to Anthropic Claude for structured summarization of inclusion/exclusion criteria, primary and secondary endpoints, and safety considerations, then post the summary to the clinical affairs Teams channel. Use when reviewing new protocols, preparing for investigator meetings, or onboarding new clinical staff.
      inputParameters:
      - name: sharepoint_site_id
        in: body
        type: string
        description: Microsoft Graph site ID for the SharePoint clinical document library.
      - name: protocol_document_path
        in: body
        type: string
        description: Path to the clinical trial protocol document within the SharePoint drive.
      - name: clinical_channel_id
        in: body
        type: string
        description: Teams channel ID for the clinical affairs team to receive the summary.
      steps:
      - name: get-protocol-document
        type: call
        call: sharepoint-clinical.get-drive-item-content
        with:
          site_id: '{{sharepoint_site_id}}'
          path: '{{protocol_document_path}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a clinical research expert. Summarize this Medtronic clinical trial protocol, extracting: 1) Inclusion and exclusion criteria, 2) Primary and secondary endpoints, 3) Key safety considerations and stopping rules, 4) Study duration and patient population. Protocol content: {{get-protocol-document.content}}'
      - name: post-summary
        type: call
        call: msteams-clinical-ai.post-channel-message
        with:
          channel_id: '{{clinical_channel_id}}'
          text: 'Clinical Trial Protocol Summary: {{generate-summary.content}}'
  consumes:
  - type: http
    namespace: sharepoint-clinical
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{site_id}/drive/root:{path}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: get-drive-item-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams-clinical-ai
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{team_id}/channels/{channel_id}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-clinical-trial-document-summarizer.yml

When an adverse event report is received, creates a Veeva Vault safety record, opens a ServiceNow priority incident, and notifies the pharmacovigilance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Pharmacovigilance Adverse Event Intake
  description: When an adverse event report is received, creates a Veeva Vault safety record, opens a ServiceNow priority incident, and notifies the pharmacovigilance team via Microsoft Teams.
  tags:
  - pharmacovigilance
  - safety
  - veeva
  - servicenow
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: safety-ops
    port: 8080
    tools:
    - name: intake-adverse-event
      description: Given an adverse event report with patient ID, drug name, and event description, create a Veeva Vault safety case record, open a high-priority ServiceNow incident, and alert the pharmacovigilance Microsoft Teams channel.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The anonymized patient identifier from the adverse event report.
      - name: drug_name
        in: body
        type: string
        description: The Merck drug or compound associated with the adverse event.
      - name: event_description
        in: body
        type: string
        description: Clinical description of the adverse event.
      - name: severity
        in: body
        type: string
        description: 'Event severity classification: mild, moderate, severe, or life-threatening.'
      steps:
      - name: create-safety-case
        type: call
        call: veeva.create-safety-case
        with:
          patient_id: '{{patient_id}}'
          drug_name: '{{drug_name}}'
          description: '{{event_description}}'
          severity: '{{severity}}'
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Adverse event: {{drug_name}} - {{severity}}'
          urgency: '1'
          category: pharmacovigilance
      - name: notify-pv-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: pharmacovigilance
          message: 'NEW ADVERSE EVENT: Drug {{drug_name}} | Severity: {{severity}} | Vault Case: {{create-safety-case.case_id}} | SNOW: {{open-incident.number}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://merck.veevavault.com/api/v21.2
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: safety-cases
      path: /objects/safety_cases
      operations:
      - name: create-safety-case
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://merck.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-adverse-event-intake.yml

Monitors Snowflake for failed research data ingestion tasks, creates Jira issues, and alerts the data science team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Research Data Pipeline Monitor
  description: Monitors Snowflake for failed research data ingestion tasks, creates Jira issues, and alerts the data science team via Microsoft Teams.
  tags:
  - data
  - research
  - snowflake
  - jira
  - microsoft-teams
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: research-data-ops
    port: 8080
    tools:
    - name: monitor-research-pipelines
      description: Query Snowflake for failed data ingestion tasks in research databases, create Jira issues for critical failures, and post a summary to the data science Microsoft Teams channel.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: The Snowflake database name containing the research data pipelines.
      - name: lookback_hours
        in: body
        type: integer
        description: Number of hours to look back for failures (default 24).
      steps:
      - name: get-failures
        type: call
        call: snowflake.query-failures
        with:
          database_name: '{{database_name}}'
          lookback_hours: '{{lookback_hours}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: Research data pipeline failures in {{database_name}}
          description: '{{get-failures.failure_count}} pipeline failures detected. Summary: {{get-failures.failure_summary}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: data-science
          message: 'Research Pipeline Alert: {{get-failures.failure_count}} failures in {{database_name}}. Jira: {{create-issue.key}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://merck.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query-failures
        method: POST
  - type: http
    namespace: jira
    baseUri: https://merck.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-research-data-pipeline-monitor.yml

Looks up the current status of a regulatory filing in Veeva Vault and returns submission timeline, review status, and agency correspondence.

naftiko: '0.5'
info:
  label: Drug Safety Regulatory Filing Status
  description: Looks up the current status of a regulatory filing in Veeva Vault and returns submission timeline, review status, and agency correspondence.
  tags:
  - regulatory
  - veeva
  - compliance
  - drug-safety
capability:
  exposes:
  - type: mcp
    namespace: regulatory-status
    port: 8080
    tools:
    - name: get-regulatory-filing-status
      description: Look up a regulatory filing in Veeva Vault by submission ID. Returns current review status, target action date, and recent agency correspondence. Use during regulatory review cycles.
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: The Veeva Vault regulatory submission document ID.
      call: veeva.get-submission-status
      with:
        submission_id: '{{submission_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status__v
      - name: target_action_date
        type: string
        mapping: $.target_action_date__v
      - name: filing_type
        type: string
        mapping: $.document_type__v
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://merck.veevavault.com/api/v21.2
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: submissions
      path: /objects/regulatory_submissions/{{submission_id}}
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: get-submission-status
        method: GET
Open in Framework → View in Fleet → drug-safety-regulatory-filing-status.yml

Retrieves GitHub Dependabot alerts for a repository, creates Jira tickets for critical vulnerabilities, and posts a remediation summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Code Security Vulnerability Triage
  description: Retrieves GitHub Dependabot alerts for a repository, creates Jira tickets for critical vulnerabilities, and posts a remediation summary to Microsoft Teams.
  tags:
  - devops
  - security
  - github
  - jira
  - microsoft-teams
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-triage
    port: 8080
    tools:
    - name: triage-dependency-vulnerabilities
      description: Given a GitHub repository, retrieve Dependabot security alerts, create Jira tickets for critical and high severity findings, and post a triage summary to the security Microsoft Teams channel.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository to triage (e.g., merck/research-api).
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for security vulnerability tickets.
      steps:
      - name: get-alerts
        type: call
        call: github.list-dependabot-alerts
        with:
          repository: '{{repository}}'
          severity: critical,high
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: 'Dependency vulnerabilities in {{repository}}: {{get-alerts.critical_count}} critical'
          description: '{{get-alerts.alert_summary}}'
      - name: notify-security
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: security-team
          message: 'Vulnerability Triage: {{repository}} has {{get-alerts.critical_count}} critical alerts. Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alerts
      path: /repos/{{repository}}/dependabot/alerts
      inputParameters:
      - name: repository
        in: path
      operations:
      - name: list-dependabot-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://merck.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-code-security-vulnerability-triage.yml

At the start of a financial period close, checks SAP S/4HANA closing status, creates a Jira checklist epic, and notifies the global finance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Finance Period Close Initiation
  description: At the start of a financial period close, checks SAP S/4HANA closing status, creates a Jira checklist epic, and notifies the global finance team via Microsoft Teams.
  tags:
  - finance
  - period-close
  - sap-s4hana
  - jira
  - microsoft-teams
  - erp
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: initiate-period-close
      description: Given a fiscal period and year, retrieve SAP S/4HANA closing status, create a Jira epic with close checklist tasks, and notify the global finance Microsoft Teams channel.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period number to close (01-12).
      - name: fiscal_year
        in: body
        type: string
        description: The fiscal year (e.g., 2026).
      steps:
      - name: get-close-status
        type: call
        call: sap-s4.get-period-status
        with:
          fiscal_period: '{{fiscal_period}}'
          fiscal_year: '{{fiscal_year}}'
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          issuetype: Epic
          summary: Period Close {{fiscal_period}}/{{fiscal_year}}
          description: 'SAP status: {{get-close-status.status}} | Company: {{get-close-status.company_code}}'
      - name: notify-finance
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: global-finance
          message: 'Period close initiated: FY{{fiscal_year}} Period {{fiscal_period}}. Jira Epic: {{create-epic.key}}'
  consumes:
  - type: http
    namespace: sap-s4
    baseUri: https://merck-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-status
      path: /PeriodCloseStatusSet
      operations:
      - name: get-period-status
        method: GET
  - type: http
    namespace: jira
    baseUri: https://merck.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-finance-period-close-initiation.yml

Triggers a Power BI dataset refresh for the global commercial analytics dashboard and notifies the commercial insights team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Commercial Analytics Refresh
  description: Triggers a Power BI dataset refresh for the global commercial analytics dashboard and notifies the commercial insights team via Microsoft Teams.
  tags:
  - analytics
  - reporting
  - power-bi
  - microsoft-teams
  - commercial
capability:
  exposes:
  - type: mcp
    namespace: commercial-analytics
    port: 8080
    tools:
    - name: refresh-commercial-dashboard
      description: Given a Power BI dataset ID and workspace ID, trigger a dataset refresh for the Merck commercial analytics dashboard and notify the insights team via Microsoft Teams.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the commercial analytics dashboard.
      - name: workspace_id
        in: body
        type: string
        description: The Power BI workspace ID containing the dataset.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
          workspace_id: '{{workspace_id}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: commercial-insights
          message: 'Commercial analytics refresh initiated for dataset {{dataset_id}}. Expected completion: 15 minutes.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-commercial-analytics-refresh.yml

Detects GCP cost anomalies via Datadog, creates a ServiceNow change request for cost review, and notifies the cloud FinOps team via Microsoft Teams.

naftiko: '0.5'
info:
  label: GCP Cloud Cost Anomaly Response
  description: Detects GCP cost anomalies via Datadog, creates a ServiceNow change request for cost review, and notifies the cloud FinOps team via Microsoft Teams.
  tags:
  - cloud
  - finops
  - datadog
  - servicenow
  - microsoft-teams
  - gcp
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost-ops
    port: 8080
    tools:
    - name: respond-to-cost-anomaly
      description: Given a Datadog cloud cost anomaly with service and excess amount, create a ServiceNow change request for the FinOps team to investigate and notify the cloud cost Microsoft Teams channel.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The GCP service or workload generating the cost anomaly.
      - name: excess_amount_usd
        in: body
        type: number
        description: Dollar amount exceeding the expected cost baseline.
      - name: anomaly_date
        in: body
        type: string
        description: Date the anomaly was detected (YYYY-MM-DD).
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'GCP cost anomaly: {{service_name}} exceeded by ${{excess_amount_usd}}'
          type: normal
          category: cloud_cost
      - name: notify-finops
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: cloud-finops
          message: 'Cost Anomaly: {{service_name}} exceeded baseline by ${{excess_amount_usd}} on {{anomaly_date}}. ServiceNow: {{create-change.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://merck.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → gcp-cloud-cost-anomaly-response.yml

Logs a medical information inquiry from the Veeva CRM into a ServiceNow ticket and assigns it to the medical information team for response.

naftiko: '0.5'
info:
  label: Veeva CRM Medical Inquiry Intake
  description: Logs a medical information inquiry from the Veeva CRM into a ServiceNow ticket and assigns it to the medical information team for response.
  tags:
  - medical-affairs
  - veeva
  - servicenow
  - crm
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: medical-inquiry
    port: 8080
    tools:
    - name: intake-medical-inquiry
      description: Given a Veeva CRM inquiry record ID, retrieve the inquiry details, create a ServiceNow task for the medical information team, and notify the team via Microsoft Teams.
      inputParameters:
      - name: inquiry_id
        in: body
        type: string
        description: The Veeva CRM medical inquiry record ID.
      steps:
      - name: get-inquiry
        type: call
        call: veeva.get-inquiry-record
        with:
          inquiry_id: '{{inquiry_id}}'
      - name: create-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Medical inquiry: {{get-inquiry.product_name}} - {{get-inquiry.inquiry_type}}'
          category: medical_information
          description: 'Inquiry: {{get-inquiry.inquiry_text}} | Source: {{get-inquiry.hcp_name}}'
      - name: notify-medinfo
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: medical-information
          message: 'New Medical Inquiry: {{get-inquiry.product_name}} from {{get-inquiry.hcp_name}}. Task: {{create-task.number}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://merck.veevavault.com/api/v21.2
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: inquiries
      path: /objects/medical_inquiries/{{inquiry_id}}
      inputParameters:
      - name: inquiry_id
        in: path
      operations:
      - name: get-inquiry-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://merck.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → veeva-crm-medical-inquiry-intake.yml

Retrieves purchase order status, vendor details, and line items from SAP S/4HANA for procurement review and invoice matching.

naftiko: '0.5'
info:
  label: SAP S/4HANA Purchase Order Status Lookup
  description: Retrieves purchase order status, vendor details, and line items from SAP S/4HANA for procurement review and invoice matching.
  tags:
  - finance
  - procurement
  - sap-s4hana
  - 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 header status, vendor name, total value, and open line items. Use when reviewing procurement status or matching invoices.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number to look up (e.g., 4500012345).
      call: sap-s4.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.OverallStatus
      - name: vendor
        type: string
        mapping: $.d.Supplier.CompanyName
      - name: total_value
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
  consumes:
  - type: http
    namespace: sap-s4
    baseUri: https://merck-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
        outputRawFormat: xml
Open in Framework → View in Fleet → sap-s-4hana-purchase-order-status-lookup.yml

Creates a purchase requisition in SAP Ariba for lab supplies and routes it for approval based on cost center and spend threshold.

naftiko: '0.5'
info:
  label: SAP Ariba Procurement Request
  description: Creates a purchase requisition in SAP Ariba for lab supplies and routes it for approval based on cost center and spend threshold.
  tags:
  - procurement
  - sap-ariba
  - finance
  - approval
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: create-procurement-request
      description: Given a supplier, item description, quantity, and cost center, create a purchase requisition in SAP Ariba and route it for approval according to Merck spend authority policy.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier ID for the purchase.
      - name: item_description
        in: body
        type: string
        description: Description of the item or service being procured.
      - name: quantity
        in: body
        type: integer
        description: Quantity of items requested.
      - name: unit_price
        in: body
        type: number
        description: Unit price in USD.
      - name: cost_center
        in: body
        type: string
        description: The cost center code to charge for this purchase.
      call: sap-ariba.create-requisition
      with:
        supplier_id: '{{supplier_id}}'
        item_description: '{{item_description}}'
        quantity: '{{quantity}}'
        unit_price: '{{unit_price}}'
        cost_center: '{{cost_center}}'
      outputParameters:
      - name: requisition_id
        type: string
        mapping: $.requisitionId
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: sap-ariba
    baseUri: https://openapi.ariba.com/api/purchase-req/v1
    authentication:
      type: apikey
      key: apiKey
      value: $secrets.ariba_api_key
      placement: header
    resources:
    - name: requisitions
      path: /requisitions
      operations:
      - name: create-requisition
        method: POST
Open in Framework → View in Fleet → sap-ariba-procurement-request.yml

Escalates a high-priority ServiceNow IT incident to the on-call engineer via PagerDuty and posts context to the IT ops Microsoft Teams channel.

naftiko: '0.5'
info:
  label: ServiceNow IT Incident Escalation to PagerDuty
  description: Escalates a high-priority ServiceNow IT incident to the on-call engineer via PagerDuty and posts context to the IT ops Microsoft Teams channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: itsm-escalation
    port: 8080
    tools:
    - name: escalate-it-incident
      description: Given a ServiceNow incident number and escalation reason, retrieve incident details, trigger a PagerDuty alert to the on-call engineer, and post the incident context to the IT ops Microsoft Teams channel.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number to escalate (e.g., INC0012345).
      - name: escalation_reason
        in: body
        type: string
        description: Reason for escalation, to be included in the PagerDuty alert.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: trigger-page
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Escalated: {{incident_number}} - {{get-incident.short_description}}'
          severity: critical
          body: '{{escalation_reason}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: it-operations
          message: 'Incident Escalated: {{incident_number}} | {{get-incident.short_description}} | PagerDuty: {{trigger-page.incident_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://merck.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      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: 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: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-incident-escalation-to-pagerduty.yml

Retrieves a clinical study report from Veeva Vault and uses OpenAI to generate a structured executive summary for regulatory reviewers.

naftiko: '0.5'
info:
  label: AI-Assisted Clinical Study Report Summarization
  description: Retrieves a clinical study report from Veeva Vault and uses OpenAI to generate a structured executive summary for regulatory reviewers.
  tags:
  - ai
  - automation
  - openai
  - veeva
  - clinical-trials
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: ai-clinical
    port: 8080
    tools:
    - name: summarize-clinical-study-report
      description: Given a Veeva Vault document ID for a clinical study report, retrieve the document, generate a structured executive summary using OpenAI, and store the summary back in Veeva Vault as a related document.
      inputParameters:
      - name: vault_document_id
        in: body
        type: string
        description: The Veeva Vault document ID for the clinical study report to summarize.
      steps:
      - name: get-document
        type: call
        call: veeva.get-document-content
        with:
          document_id: '{{vault_document_id}}'
      - name: generate-summary
        type: call
        call: openai.create-completion
        with:
          model: gpt-4o
          prompt: 'You are a regulatory affairs expert. Create a structured executive summary of this clinical study report with sections for: Study Objectives, Key Efficacy Results, Safety Summary, and Regulatory Conclusions: {{get-document.content}}'
      - name: store-summary
        type: call
        call: veeva.create-document
        with:
          parent_document_id: '{{vault_document_id}}'
          document_type: Executive Summary
          content: '{{generate-summary.choices[0].message.content}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://merck.veevavault.com/api/v21.2
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: document-content
      path: /objects/documents/{{document_id}}/file
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document-content
        method: GET
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - 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
Open in Framework → View in Fleet → ai-assisted-clinical-study-report-summarization.yml

When an employee role change is processed in Workday, notifies the employee and their new manager via Microsoft Teams and updates their Okta group memberships.

naftiko: '0.5'
info:
  label: Workday Job Change Notification
  description: When an employee role change is processed in Workday, notifies the employee and their new manager via Microsoft Teams and updates their Okta group memberships.
  tags:
  - hr
  - role-change
  - workday
  - okta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-role-change
    port: 8080
    tools:
    - name: process-job-change
      description: Given a Workday job change event ID, retrieve the employee and new role details, update Okta group memberships for the new role, and notify both the employee and new manager via Microsoft Teams.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: The Workday job change business process event ID.
      steps:
      - name: get-job-change
        type: call
        call: workday.get-job-change-event
        with:
          event_id: '{{event_id}}'
      - name: update-okta-groups
        type: call
        call: okta.update-user-groups
        with:
          user_email: '{{get-job-change.employee_email}}'
          new_department: '{{get-job-change.new_department}}'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-job-change.employee_email}}'
          message: Your role change to {{get-job-change.new_job_title}} is effective {{get-job-change.effective_date}}. Welcome to {{get-job-change.new_department}}!
  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-change-events
      path: /merck/jobChangeEvents/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-job-change-event
        method: GET
  - type: http
    namespace: okta
    baseUri: https://merck.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-groups
      path: /users/{{user_id}}/groups
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user-groups
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-job-change-notification.yml

Audits SAP Concur expense reports for policy compliance, flags violations for manager review, and updates the compliance tracking record.

naftiko: '0.5'
info:
  label: SAP Concur Travel and Expense Audit
  description: Audits SAP Concur expense reports for policy compliance, flags violations for manager review, and updates the compliance tracking record.
  tags:
  - finance
  - expense-management
  - sap-concur
  - compliance
  - audit
capability:
  exposes:
  - type: mcp
    namespace: expense-audit
    port: 8080
    tools:
    - name: audit-expense-report
      description: Given a SAP Concur expense report ID, retrieve report details, validate each line item against Merck travel and expense policy, and flag non-compliant items for manager review.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID to audit.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: flag-violations
        type: call
        call: concur.update-report-status
        with:
          report_id: '{{report_id}}'
          status: Pending_Manager_Review
          comment: Policy review required for items above daily limits
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
      - name: update-report-status
        method: PATCH
Open in Framework → View in Fleet → sap-concur-travel-and-expense-audit.yml

Provisions Okta access to laboratory information systems for new research scientists and logs the provisioning in ServiceNow.

naftiko: '0.5'
info:
  label: Okta Identity Provisioning for Lab Systems
  description: Provisions Okta access to laboratory information systems for new research scientists and logs the provisioning in ServiceNow.
  tags:
  - identity
  - security
  - okta
  - servicenow
  - access-management
  - research
capability:
  exposes:
  - type: mcp
    namespace: lab-identity
    port: 8080
    tools:
    - name: provision-lab-access
      description: Given a new research scientist's email and lab system list, assign Okta group memberships for laboratory information systems and log the provisioning in a ServiceNow ticket.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The research scientist's work email address.
      - name: lab_systems
        in: body
        type: string
        description: Comma-separated list of laboratory system identifiers to provision (e.g., LIMS, ELN, ChemDraw).
      - name: research_unit
        in: body
        type: string
        description: The research unit the scientist belongs to (e.g., Oncology, Vaccines).
      steps:
      - name: get-user
        type: call
        call: okta.get-user-by-email
        with:
          email: '{{user_email}}'
      - name: assign-lab-groups
        type: call
        call: okta.add-user-to-group
        with:
          user_id: '{{get-user.id}}'
          group_profile: '{{research_unit}}_lab_access'
      - name: log-provisioning
        type: call
        call: servicenow.create-incident
        with:
          short_description: Lab system access provisioned for {{user_email}}
          category: access_management
          description: 'Systems: {{lab_systems}} | Research Unit: {{research_unit}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://merck.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: get-user-by-email
        method: GET
    - name: group-memberships
      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
  - type: http
    namespace: servicenow
    baseUri: https://merck.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-identity-provisioning-for-lab-systems.yml

When a key account NPS survey response is below threshold in Salesforce, creates a follow-up task for the account manager and logs a customer success case.

naftiko: '0.5'
info:
  label: Salesforce Key Account NPS Follow-Up
  description: When a key account NPS survey response is below threshold in Salesforce, creates a follow-up task for the account manager and logs a customer success case.
  tags:
  - sales
  - crm
  - salesforce
  - customer-success
  - nps
capability:
  exposes:
  - type: mcp
    namespace: customer-success
    port: 8080
    tools:
    - name: handle-low-nps-response
      description: Given a Salesforce survey response record with a low NPS score, create a follow-up task for the account manager and open a customer success case for investigation.
      inputParameters:
      - name: survey_response_id
        in: body
        type: string
        description: The Salesforce survey response ID with the low NPS score.
      - name: nps_score
        in: body
        type: integer
        description: The NPS score that triggered this follow-up (0-6 range).
      steps:
      - name: get-response
        type: call
        call: salesforce-survey.get-survey-response
        with:
          response_id: '{{survey_response_id}}'
      - name: create-task
        type: call
        call: salesforce-task.create-task
        with:
          owner_id: '{{get-response.account_manager_id}}'
          subject: 'NPS Follow-Up: {{get-response.account_name}} scored {{nps_score}}'
          due_date: +3d
      - name: create-case
        type: call
        call: salesforce-case.create-case
        with:
          account_id: '{{get-response.account_id}}'
          subject: 'Customer Success: Low NPS {{nps_score}} - {{get-response.account_name}}'
          origin: NPS Survey
  consumes:
  - type: http
    namespace: salesforce-survey
    baseUri: https://merck.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: survey-responses
      path: /sobjects/SurveyQuestionResponse/{{response_id}}
      inputParameters:
      - name: response_id
        in: path
      operations:
      - name: get-survey-response
        method: GET
  - type: http
    namespace: salesforce-task
    baseUri: https://merck.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: salesforce-case
    baseUri: https://merck.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → salesforce-key-account-nps-follow-up.yml

When a Datadog APM monitor triggers for a critical pharmaceutical application, creates a ServiceNow incident and pages the on-call team via PagerDuty.

naftiko: '0.5'
info:
  label: Datadog Application Performance Alert Handler
  description: When a Datadog APM monitor triggers for a critical pharmaceutical application, creates a ServiceNow incident and pages the on-call team via PagerDuty.
  tags:
  - observability
  - apm
  - datadog
  - servicenow
  - pagerduty
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: apm-monitoring
    port: 8080
    tools:
    - name: handle-apm-alert
      description: Given a Datadog APM alert with service name, error rate, and latency details, open a ServiceNow incident and trigger PagerDuty for the on-call engineer.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The application service name that triggered the APM alert.
      - name: error_rate
        in: body
        type: number
        description: The current error rate percentage that breached the threshold.
      - name: p99_latency_ms
        in: body
        type: number
        description: The P99 latency in milliseconds that triggered the alert.
      - name: alert_url
        in: body
        type: string
        description: URL to the Datadog APM alert dashboard.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'APM Alert: {{service_name}} error rate {{error_rate}}%'
          urgency: '1'
          category: application_performance
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'APM Alert: {{service_name}} - {{error_rate}}% error rate'
          severity: critical
          body: 'P99 latency: {{p99_latency_ms}}ms. Alert: {{alert_url}}. SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://merck.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → datadog-application-performance-alert-handler.yml

Initiates a performance review cycle in Workday for a department, creates Jira tasks for HR coordinators, and notifies all employees in the department via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Launch
  description: Initiates a performance review cycle in Workday for a department, creates Jira tasks for HR coordinators, and notifies all employees in the department via Microsoft Teams.
  tags:
  - hr
  - performance-management
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: launch-performance-review
      description: Given a Workday department ID and review cycle name, initiate the performance review event, create HR coordinator tasks in Jira, and notify all employees in the department via Microsoft Teams.
      inputParameters:
      - name: department_id
        in: body
        type: string
        description: The Workday department ID for which to launch the performance review.
      - name: cycle_name
        in: body
        type: string
        description: The name of the performance review cycle (e.g., 2026 Annual Review).
      - name: due_date
        in: body
        type: string
        description: The performance review completion due date (YYYY-MM-DD).
      steps:
      - name: get-department
        type: call
        call: workday.get-department
        with:
          department_id: '{{department_id}}'
      - name: create-hr-task
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: 'Performance review coordination: {{cycle_name}} - {{get-department.name}}'
          description: 'Department: {{get-department.name}} | Due: {{due_date}} | Employees: {{get-department.headcount}}'
      - name: notify-department
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{get-department.teams_channel_id}}'
          message: 'Performance Review Launched: {{cycle_name}} is open. Please complete your self-assessment by {{due_date}}.'
  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: departments
      path: /merck/organizations/{{department_id}}
      inputParameters:
      - name: department_id
        in: path
      operations:
      - name: get-department
        method: GET
  - type: http
    namespace: jira
    baseUri: https://merck.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-launch.yml

Syncs medical representative call activity from Salesforce CRM to SAP S/4HANA for revenue attribution and territory management reporting.

naftiko: '0.5'
info:
  label: Salesforce Medical Representative Activity Sync
  description: Syncs medical representative call activity from Salesforce CRM to SAP S/4HANA for revenue attribution and territory management reporting.
  tags:
  - sales
  - crm
  - salesforce
  - sap-s4hana
  - medical-affairs
capability:
  exposes:
  - type: mcp
    namespace: medaffairs-sales
    port: 8080
    tools:
    - name: sync-rep-call-activity
      description: Given a Salesforce activity record ID for a medical representative call, retrieve call details and sync the physician touchpoint to SAP S/4HANA for territory analytics.
      inputParameters:
      - name: activity_id
        in: body
        type: string
        description: The Salesforce Activity ID for the medical representative call.
      steps:
      - name: get-activity
        type: call
        call: salesforce.get-activity
        with:
          activity_id: '{{activity_id}}'
      - name: sync-to-sap
        type: call
        call: sap-s4.create-sales-activity
        with:
          rep_id: '{{get-activity.owner_id}}'
          physician_id: '{{get-activity.contact_id}}'
          product: '{{get-activity.product_name}}'
          call_date: '{{get-activity.activity_date}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://merck.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/Activity/{{activity_id}}
      inputParameters:
      - name: activity_id
        in: path
      operations:
      - name: get-activity
        method: GET
  - type: http
    namespace: sap-s4
    baseUri: https://merck-s4.sap.com/sap/opu/odata/sap/SD_ACTIVITY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: sales-activities
      path: /A_SalesActivity
      operations:
      - name: create-sales-activity
        method: POST
Open in Framework → View in Fleet → salesforce-medical-representative-activity-sync.yml

Generates a weekly sprint summary for a Merck research project in Jira and posts it to the team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Research Project Sprint Digest
  description: Generates a weekly sprint summary for a Merck research project in Jira and posts it to the team's Microsoft Teams channel.
  tags:
  - devops
  - agile
  - jira
  - microsoft-teams
  - reporting
  - research
capability:
  exposes:
  - type: mcp
    namespace: research-agile
    port: 8080
    tools:
    - name: digest-research-sprint
      description: Given a Jira board ID and sprint ID for a research project, fetch completed and open issues and post a formatted sprint summary to the research team's Microsoft Teams channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID for the research project sprint.
      - name: sprint_id
        in: body
        type: string
        description: The Jira sprint ID to summarize.
      - name: teams_channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID to post the summary to.
      steps:
      - name: get-issues
        type: call
        call: jira.list-sprint-issues
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          message: 'Research Sprint {{sprint_id}} Update: {{get-issues.done_count}} completed, {{get-issues.inprogress_count}} in progress, {{get-issues.todo_count}} remaining.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://merck.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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-research-project-sprint-digest.yml

Aggregates FDA submission status from Veeva Vault RIM, pulls latest correspondence from the regulatory document store, updates the tracking dashboard in Tableau, and posts a weekly status to the regulatory affairs Confluence page.

naftiko: '0.5'
info:
  label: FDA Submission Tracking Dashboard Refresh
  description: Aggregates FDA submission status from Veeva Vault RIM, pulls latest correspondence from the regulatory document store, updates the tracking dashboard in Tableau, and posts a weekly status to the regulatory affairs Confluence page.
  tags:
  - regulatory
  - fda
  - veeva
  - tableau
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: regulatory-tracking
    port: 8080
    tools:
    - name: refresh-fda-tracker
      description: Given a submission ID, pull status from Veeva RIM, refresh the Tableau dashboard, and update the Confluence tracking page.
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: Veeva Vault RIM submission identifier.
      - name: tableau_workbook_id
        in: body
        type: string
        description: Tableau workbook ID for the FDA tracker.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID for the regulatory tracker.
      steps:
      - name: get-submission-status
        type: call
        call: veeva.get-submission
        with:
          submission_id: '{{submission_id}}'
      - name: refresh-tableau
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: '{{tableau_workbook_id}}'
      - name: update-confluence
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          body: 'FDA Submission Tracker


            Submission: {{submission_id}}

            Status: {{get-submission-status.status}}

            Type: {{get-submission-status.submission_type}}

            Last FDA Action: {{get-submission-status.last_action_date}}

            Next Milestone: {{get-submission-status.next_milestone}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://moderna.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: submissions
      path: /objects/submissions/{{submission_id}}
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: get-submission
        method: GET
  - type: http
    namespace: tableau
    baseUri: https://moderna-tableau.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/moderna/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moderna.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: update-page
        method: PUT
Open in Framework → View in Fleet → fda-submission-tracking-dashboard-refresh.yml

Queries Kubernetes cluster health via Datadog, checks active Prometheus alerts for the cluster, and posts a consolidated infrastructure report to the platform engineering Teams channel.

naftiko: '0.5'
info:
  label: Kubernetes Cluster Health and Scaling Report
  description: Queries Kubernetes cluster health via Datadog, checks active Prometheus alerts for the cluster, and posts a consolidated infrastructure report to the platform engineering Teams channel.
  tags:
  - infrastructure
  - kubernetes
  - datadog
  - prometheus
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: k8s-monitoring
    port: 8080
    tools:
    - name: get-cluster-health
      description: Query Datadog for K8s metrics, check Prometheus alerts, and post a health report to Teams.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: Kubernetes cluster name.
      steps:
      - name: query-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: avg:kubernetes.node.count{cluster_name:{{cluster_name}}}
      - name: check-alerts
        type: call
        call: prometheus.get-alerts
        with:
          filter: cluster={{cluster_name}}
      - name: post-report
        type: call
        call: msteams.send-message
        with:
          channel_id: platform-engineering
          text: 'K8s cluster {{cluster_name}}: Nodes: {{query-metrics.node_count}}. Active alerts: {{check-alerts.data.alerts.length}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: prometheus
    baseUri: https://moderna-prometheus.internal.modernatx.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: alerts
      path: /alerts
      operations:
      - name: get-alerts
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → kubernetes-cluster-health-and-scaling-report.yml

Assembles a regulatory submission package by pulling the latest clinical study report from Veeva Vault, CMC data from SAP, and generating a submission index in Confluence, then notifying regulatory affairs via Teams.

naftiko: '0.5'
info:
  label: Regulatory Submission Assembly
  description: Assembles a regulatory submission package by pulling the latest clinical study report from Veeva Vault, CMC data from SAP, and generating a submission index in Confluence, then notifying regulatory affairs via Teams.
  tags:
  - regulatory
  - submissions
  - veeva
  - sap
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: assemble-submission
      description: Given a study ID and submission type, gather documents from Veeva, pull CMC data from SAP, create an index page in Confluence, and notify the regulatory team.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: submission_type
        in: body
        type: string
        description: Type of submission (IND, BLA, supplement, annual-report).
      - name: target_authority
        in: body
        type: string
        description: Regulatory authority (FDA, EMA, PMDA, HC).
      steps:
      - name: get-clinical-docs
        type: call
        call: veeva.search-documents
        with:
          query: study_id__c={{study_id}} AND document_type__c='Clinical Study Report'
      - name: get-cmc-data
        type: call
        call: sap.get-material-master
        with:
          study_id: '{{study_id}}'
      - name: create-index
        type: call
        call: confluence.create-page
        with:
          space_key: REG
          title: '{{submission_type}} Submission - {{study_id}} - {{target_authority}}'
          body: 'Submission Package Index


            Study: {{study_id}}

            Type: {{submission_type}}

            Authority: {{target_authority}}

            CSR Documents: {{get-clinical-docs.document_count}}

            CMC Material: {{get-cmc-data.material_number}}'
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-affairs
          text: 'Submission package assembled for {{study_id}} ({{submission_type}}) targeting {{target_authority}}. {{get-clinical-docs.document_count}} clinical docs collected. Index: {{create-index.url}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://moderna.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: documents
      path: /objects/documents/search
      operations:
      - name: search-documents
        method: POST
  - type: http
    namespace: sap
    baseUri: https://moderna-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_MASTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: materials
      path: /A_Material
      operations:
      - name: get-material-master
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://moderna.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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-assembly.yml

Triggers a Terraform plan run for a Moderna infrastructure workspace, creates a Jira change request ticket, and notifies the infrastructure team in Teams with the plan summary.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Plan and Notify
  description: Triggers a Terraform plan run for a Moderna infrastructure workspace, creates a Jira change request ticket, and notifies the infrastructure team in Teams with the plan summary.
  tags:
  - infrastructure
  - terraform
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-automation
    port: 8080
    tools:
    - name: trigger-terraform-plan
      description: Trigger a Terraform plan, create a Jira change request, and notify the infra team.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID.
      - name: message
        in: body
        type: string
        description: Commit message or reason for the plan.
      steps:
      - name: create-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: '{{message}}'
      - name: create-change-request
        type: call
        call: jira.create-issue
        with:
          project_key: INFRA
          issue_type: Task
          summary: 'Terraform plan: {{message}}'
          description: 'Run ID: {{create-run.data.id}}. Status: {{create-run.data.attributes.status}}. Workspace: {{workspace_id}}.'
      - name: notify-infra
        type: call
        call: msteams.send-message
        with:
          channel_id: infrastructure
          text: 'Terraform plan triggered: {{message}}. Run: {{create-run.data.id}}. Status: {{create-run.data.attributes.status}}. Jira: {{create-change-request.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://moderna.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-plan-and-notify.yml

Retrieves the latest version of a document in Veeva Vault by document ID, returning version number, status, owner, and last modified date.

naftiko: '0.5'
info:
  label: Veeva Vault Document Version Lookup
  description: Retrieves the latest version of a document in Veeva Vault by document ID, returning version number, status, owner, and last modified date.
  tags:
  - regulatory
  - veeva
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: vault-docs
    port: 8080
    tools:
    - name: get-document-version
      description: Look up the latest version of a Veeva Vault document by document ID.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: Veeva Vault document ID.
      call: veeva.get-doc-version
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: version
        type: string
        mapping: $.versions[0].version_number__v
      - name: status
        type: string
        mapping: $.versions[0].status__v
      - name: owner
        type: string
        mapping: $.versions[0].owner__v
      - name: modified_date
        type: string
        mapping: $.versions[0].modified_date__v
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://moderna.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: document-versions
      path: /objects/documents/{{document_id}}/versions
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-doc-version
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-version-lookup.yml

Pulls production batch yield data from SAP, aggregates quality metrics from the LIMS via Benchling, feeds the data into the Azure ML anomaly detection model, and updates the manufacturing excellence Power BI dashboard.

naftiko: '0.5'
info:
  label: mRNA Production Yield Analytics Pipeline
  description: Pulls production batch yield data from SAP, aggregates quality metrics from the LIMS via Benchling, feeds the data into the Azure ML anomaly detection model, and updates the manufacturing excellence Power BI dashboard.
  tags:
  - manufacturing
  - analytics
  - sap
  - benchling
  - azure-machine-learning
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: mfg-analytics
    port: 8080
    tools:
    - name: analyze-production-yield
      description: Given a production run range, pull batch yields from SAP, quality data from Benchling, run anomaly detection, and refresh the analytics dashboard.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: SAP plant code.
      - name: date_from
        in: body
        type: string
        description: Start date for production data (YYYY-MM-DD).
      - name: date_to
        in: body
        type: string
        description: End date for production data (YYYY-MM-DD).
      - name: dashboard_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the manufacturing dashboard.
      steps:
      - name: get-batch-yields
        type: call
        call: sap.get-production-orders
        with:
          plant: '{{plant_code}}'
          date_from: '{{date_from}}'
          date_to: '{{date_to}}'
      - name: get-quality-metrics
        type: call
        call: benchling.list-results
        with:
          schema_id: production_quality
          created_after: '{{date_from}}'
      - name: detect-anomalies
        type: call
        call: azureml.invoke-endpoint
        with:
          deployment_name: yield-anomaly-detector
          payload:
            yields: '{{get-batch-yields.results}}'
            quality: '{{get-quality-metrics}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dashboard_dataset_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://moderna-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?$filter=Plant eq '{{plant}}' and StartDate ge datetime'{{date_from}}' and StartDate le datetime'{{date_to}}'
      inputParameters:
      - name: plant
        in: query
      - name: date_from
        in: query
      - name: date_to
        in: query
      operations:
      - name: get-production-orders
        method: GET
  - type: http
    namespace: benchling
    baseUri: https://moderna.benchling.com/api/v2
    authentication:
      type: bearer
      token: $secrets.benchling_token
    resources:
    - name: results
      path: /assay-results?schemaId={{schema_id}}&createdAt.gte={{created_after}}
      inputParameters:
      - name: schema_id
        in: query
      - name: created_after
        in: query
      operations:
      - name: list-results
        method: GET
  - type: http
    namespace: azureml
    baseUri: https://moderna-ml.eastus2.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: deployments
      path: /score
      operations:
      - name: invoke-endpoint
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → mrna-production-yield-analytics-pipeline.yml

Ingests preclinical study results from Benchling into the Elasticsearch data lake, triggers a TensorFlow model for immunogenicity prediction via Azure ML, and stores the prediction output back in Benchling with a Jira task for review.

naftiko: '0.5'
info:
  label: Preclinical Study Data Ingestion
  description: Ingests preclinical study results from Benchling into the Elasticsearch data lake, triggers a TensorFlow model for immunogenicity prediction via Azure ML, and stores the prediction output back in Benchling with a Jira task for review.
  tags:
  - research
  - preclinical
  - benchling
  - elasticsearch
  - azure-machine-learning
  - jira
capability:
  exposes:
  - type: mcp
    namespace: preclinical-ai
    port: 8080
    tools:
    - name: ingest-and-predict
      description: Given a Benchling experiment ID, ingest results into the data lake, run immunogenicity prediction, store predictions, and create a review task.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: Benchling experiment ID with preclinical results.
      - name: model_endpoint
        in: body
        type: string
        description: Azure ML deployment name for the immunogenicity model.
      steps:
      - name: get-results
        type: call
        call: benchling.list-results
        with:
          experiment_id: '{{experiment_id}}'
      - name: index-data
        type: call
        call: elasticsearch.index-document
        with:
          index: preclinical-results
          body: '{{get-results}}'
      - name: predict-immunogenicity
        type: call
        call: azureml.invoke-endpoint
        with:
          deployment_name: '{{model_endpoint}}'
          payload: '{{get-results}}'
      - name: store-prediction
        type: call
        call: benchling.create-result
        with:
          experiment_id: '{{experiment_id}}'
          result_type: immunogenicity_prediction
          data: '{{predict-immunogenicity.predictions}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: PRECLIN
          issue_type: Task
          summary: Review immunogenicity prediction for {{experiment_id}}
          description: 'Prediction score: {{predict-immunogenicity.score}}. Results indexed in Elasticsearch. Experiment: {{experiment_id}}.'
  consumes:
  - type: http
    namespace: benchling
    baseUri: https://moderna.benchling.com/api/v2
    authentication:
      type: bearer
      token: $secrets.benchling_token
    resources:
    - name: results
      path: /experiments/{{experiment_id}}/results
      inputParameters:
      - name: experiment_id
        in: path
      operations:
      - name: list-results
        method: GET
      - name: create-result
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://moderna-es.eastus2.azure.elastic-cloud.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: documents
      path: /{{index}}/_doc
      inputParameters:
      - name: index
        in: path
      operations:
      - name: index-document
        method: POST
  - type: http
    namespace: azureml
    baseUri: https://moderna-ml.eastus2.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: deployments
      path: /score
      operations:
      - name: invoke-endpoint
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moderna.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → preclinical-study-data-ingestion.yml

Queries Oracle Cloud ERP for vaccine inventory levels, compares against reorder thresholds, and if stock is low, creates a SAP purchase requisition and alerts the supply chain team in Teams.

naftiko: '0.5'
info:
  label: Oracle Cloud Inventory Check and Reorder Alert
  description: Queries Oracle Cloud ERP for vaccine inventory levels, compares against reorder thresholds, and if stock is low, creates a SAP purchase requisition and alerts the supply chain team in Teams.
  tags:
  - supply-chain
  - inventory
  - oracle-cloud
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: inventory-mgmt
    port: 8080
    tools:
    - name: check-inventory-reorder
      description: Check inventory levels in Oracle Cloud. If below threshold, create a SAP purchase requisition and alert supply chain.
      inputParameters:
      - name: item_number
        in: body
        type: string
        description: Oracle item number for the vaccine product.
      - name: warehouse_code
        in: body
        type: string
        description: Warehouse organization code.
      - name: reorder_threshold
        in: body
        type: number
        description: Minimum stock level before reorder.
      steps:
      - name: get-inventory
        type: call
        call: oracle.get-inventory
        with:
          item_number: '{{item_number}}'
          warehouse_code: '{{warehouse_code}}'
      - name: create-requisition
        type: call
        call: sap.create-requisition
        with:
          material: '{{item_number}}'
          plant: '{{warehouse_code}}'
          quantity: '{{reorder_threshold}}'
      - name: alert-supply-chain
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-ops
          text: 'Inventory alert: {{item_number}} at {{warehouse_code}}. On-hand: {{get-inventory.OnHandQuantity}}. Threshold: {{reorder_threshold}}. Requisition created: {{create-requisition.requisition_number}}.'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://moderna-erp.fa.us2.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: inventory
      path: /inventoryBalances?q=ItemNumber={{item_number}};OrganizationCode={{warehouse_code}}
      inputParameters:
      - name: item_number
        in: query
      - name: warehouse_code
        in: query
      operations:
      - name: get-inventory
        method: GET
  - type: http
    namespace: sap
    baseUri: https://moderna-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: requisitions
      path: /A_PurchaseRequisitionHeader
      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/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → oracle-cloud-inventory-check-and-reorder-alert.yml

Retrieves a Jira issue by key from the Moderna R&D project board and returns the summary, assignee, status, and sprint information.

naftiko: '0.5'
info:
  label: Jira Research Ticket Status
  description: Retrieves a Jira issue by key from the Moderna R&D project board and returns the summary, assignee, status, and sprint information.
  tags:
  - research
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: research-tracking
    port: 8080
    tools:
    - name: get-research-ticket
      description: Look up a Jira issue by key. Returns summary, status, assignee, priority, and sprint.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Jira issue key (e.g., MRNA-1234).
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://moderna.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-research-ticket-status.yml

When an IoT sensor reports a temperature excursion in the mRNA vaccine cold chain, logs the event in Datadog, creates a SAP quality notification, opens a ServiceNow incident, and escalates to the supply chain team in Teams.

naftiko: '0.5'
info:
  label: Cold Chain Temperature Alert Pipeline
  description: When an IoT sensor reports a temperature excursion in the mRNA vaccine cold chain, logs the event in Datadog, creates a SAP quality notification, opens a ServiceNow incident, and escalates to the supply chain team in Teams.
  tags:
  - supply-chain
  - cold-chain
  - datadog
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cold-chain-monitoring
    port: 8080
    tools:
    - name: handle-temperature-excursion
      description: Given shipment and sensor data for a temperature excursion, log the event, create quality notifications, and escalate to supply chain operations.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: Shipment tracking identifier.
      - name: sensor_id
        in: body
        type: string
        description: IoT sensor identifier.
      - name: recorded_temp_c
        in: body
        type: number
        description: Recorded temperature in Celsius.
      - name: threshold_temp_c
        in: body
        type: number
        description: Configured temperature threshold in Celsius.
      - name: location
        in: body
        type: string
        description: Current shipment location.
      steps:
      - name: log-event
        type: call
        call: datadog.submit-event
        with:
          title: 'Cold Chain Excursion: Shipment {{shipment_id}}'
          text: 'Sensor {{sensor_id}} recorded {{recorded_temp_c}}C (threshold: {{threshold_temp_c}}C) at {{location}}.'
          alert_type: error
          tags: shipment:{{shipment_id}},sensor:{{sensor_id}}
      - name: create-quality-notif
        type: call
        call: sap.create-notification
        with:
          notification_type: Q1
          short_text: 'Temperature excursion: Shipment {{shipment_id}}'
          long_text: 'Temp {{recorded_temp_c}}C exceeded {{threshold_temp_c}}C threshold at {{location}}. Sensor: {{sensor_id}}.'
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Cold chain excursion: {{shipment_id}} at {{location}}'
          category: supply_chain
          urgency: '1'
          description: 'Temperature excursion detected. SAP QN: {{create-quality-notif.notification_number}}. Product at risk.'
      - name: escalate
        type: call
        call: msteams.send-message
        with:
          channel_id: supply-chain-ops
          text: 'CRITICAL: Cold chain excursion on shipment {{shipment_id}} at {{location}}. Temp: {{recorded_temp_c}}C (limit: {{threshold_temp_c}}C). SAP QN: {{create-quality-notif.notification_number}}. SNOW: {{open-incident.number}}.'
  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: events
      path: /events
      operations:
      - name: submit-event
        method: POST
  - type: http
    namespace: sap
    baseUri: https://moderna-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: notifications
      path: /A_QualityNotification
      operations:
      - name: create-notification
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cold-chain-temperature-alert-pipeline.yml

Creates a distribution order in SAP, reserves cold-chain logistics via the supply chain platform, generates the shipping label in the warehouse system, and notifies the distribution team in Teams.

naftiko: '0.5'
info:
  label: Vaccine Distribution Order Pipeline
  description: Creates a distribution order in SAP, reserves cold-chain logistics via the supply chain platform, generates the shipping label in the warehouse system, and notifies the distribution team in Teams.
  tags:
  - supply-chain
  - distribution
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: distribution
    port: 8080
    tools:
    - name: create-distribution-order
      description: Given destination, product, quantity, and required delivery date, create the SAP delivery, reserve logistics, and notify distribution ops.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: SAP customer/ship-to ID.
      - name: product_code
        in: body
        type: string
        description: SAP material number for the vaccine product.
      - name: quantity
        in: body
        type: number
        description: Number of doses to ship.
      - name: delivery_date
        in: body
        type: string
        description: Required delivery date in YYYY-MM-DD format.
      steps:
      - name: create-delivery
        type: call
        call: sap.create-delivery
        with:
          customer: '{{customer_id}}'
          material: '{{product_code}}'
          quantity: '{{quantity}}'
          requested_date: '{{delivery_date}}'
      - name: log-shipment
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Distribution order: {{product_code}} x{{quantity}} to {{customer_id}}'
          category: supply_chain
          description: SAP delivery {{create-delivery.delivery_number}} created. Required by {{delivery_date}}.
      - name: notify-distribution
        type: call
        call: msteams.send-message
        with:
          channel_id: distribution-ops
          text: 'New distribution order: {{product_code}} x{{quantity}} doses to {{customer_id}}. Delivery: {{create-delivery.delivery_number}}. Ship by: {{delivery_date}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://moderna-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_OutboundDeliveryHeader
      operations:
      - name: create-delivery
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vaccine-distribution-order-pipeline.yml

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

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

Retrieves equipment calibration status from ServiceNow CMDB, checks the next calibration date, and if overdue, creates a maintenance work order and alerts the lab operations team in Teams.

naftiko: '0.5'
info:
  label: Lab Equipment Calibration Tracker
  description: Retrieves equipment calibration status from ServiceNow CMDB, checks the next calibration date, and if overdue, creates a maintenance work order and alerts the lab operations team in Teams.
  tags:
  - lab-operations
  - equipment
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lab-equipment
    port: 8080
    tools:
    - name: check-calibration-status
      description: Given an equipment asset tag, check calibration status in ServiceNow CMDB. If overdue, create a work order and notify lab ops.
      inputParameters:
      - name: asset_tag
        in: body
        type: string
        description: Equipment asset tag identifier.
      - name: lab_location
        in: body
        type: string
        description: Lab location code.
      steps:
      - name: get-equipment
        type: call
        call: servicenow.get-ci
        with:
          asset_tag: '{{asset_tag}}'
      - name: create-work-order
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Calibration due: {{get-equipment.name}} ({{asset_tag}})'
          category: lab_maintenance
          description: 'Equipment {{get-equipment.name}} at {{lab_location}} requires calibration. Last calibrated: {{get-equipment.last_calibration_date}}. Due: {{get-equipment.next_calibration_date}}.'
      - name: alert-lab-ops
        type: call
        call: msteams.send-message
        with:
          channel_id: lab-operations
          text: 'Calibration alert: {{get-equipment.name}} ({{asset_tag}}) at {{lab_location}} is due for calibration. Work order: {{create-work-order.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci?sysparm_query=asset_tag={{asset_tag}}
      inputParameters:
      - name: asset_tag
        in: query
      operations:
      - name: get-ci
        method: GET
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → lab-equipment-calibration-tracker.yml

Orchestrates a manufacturing line changeover by closing the current batch in SAP, cleaning equipment via the MES system, running environmental monitoring checks, logging the changeover in ServiceNow, and notifying the production team in Teams.

naftiko: '0.5'
info:
  label: Manufacturing Changeover Orchestrator
  description: Orchestrates a manufacturing line changeover by closing the current batch in SAP, cleaning equipment via the MES system, running environmental monitoring checks, logging the changeover in ServiceNow, and notifying the production team in Teams.
  tags:
  - manufacturing
  - changeover
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-ops
    port: 8080
    tools:
    - name: execute-changeover
      description: Given current and next batch details, close the current batch, initiate cleaning, verify environmental monitoring, log the changeover, and notify production.
      inputParameters:
      - name: current_batch
        in: body
        type: string
        description: Current batch number being completed.
      - name: next_batch
        in: body
        type: string
        description: Next batch number to start.
      - name: production_line
        in: body
        type: string
        description: Manufacturing line identifier.
      - name: plant_code
        in: body
        type: string
        description: SAP plant code.
      steps:
      - name: close-batch
        type: call
        call: sap.update-batch-status
        with:
          batch_number: '{{current_batch}}'
          plant: '{{plant_code}}'
          status: COMPLETED
      - name: log-changeover
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Line changeover: {{production_line}} - {{current_batch}} to {{next_batch}}'
          category: manufacturing
          description: Changeover on line {{production_line}} at plant {{plant_code}}. Batch {{current_batch}} completed. Preparing for batch {{next_batch}}.
      - name: notify-production
        type: call
        call: msteams.send-message
        with:
          channel_id: production-floor
          text: 'Changeover initiated on line {{production_line}}: Batch {{current_batch}} closed. Next: {{next_batch}}. Changeover ticket: {{log-changeover.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://moderna-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch(Batch='{{batch_number}}',Plant='{{plant}}')
      inputParameters:
      - name: batch_number
        in: path
      - name: plant
        in: path
      operations:
      - name: update-batch-status
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → manufacturing-changeover-orchestrator.yml

Submits a target protein sequence to the internal mRNA design platform, runs codon optimization via the AI engine, stores the candidate construct in Benchling, and notifies the research team in Microsoft Teams.

naftiko: '0.5'
info:
  label: mRNA Sequence Design Orchestrator
  description: Submits a target protein sequence to the internal mRNA design platform, runs codon optimization via the AI engine, stores the candidate construct in Benchling, and notifies the research team in Microsoft Teams.
  tags:
  - drug-development
  - mrna
  - benchling
  - azure-machine-learning
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mrna-design
    port: 8080
    tools:
    - name: design-mrna-construct
      description: Given a target protein sequence and optimization parameters, run codon optimization, register the construct in Benchling, and notify the research team.
      inputParameters:
      - name: protein_sequence
        in: body
        type: string
        description: Amino acid sequence of the target protein.
      - name: optimization_strategy
        in: body
        type: string
        description: Codon optimization strategy (e.g., max-expression, gc-balanced).
      - name: project_id
        in: body
        type: string
        description: Benchling project ID to register the construct under.
      steps:
      - name: optimize-codons
        type: call
        call: azureml.invoke-endpoint
        with:
          deployment_name: codon-optimizer-v3
          payload:
            protein_sequence: '{{protein_sequence}}'
            strategy: '{{optimization_strategy}}'
      - name: register-construct
        type: call
        call: benchling.create-dna-sequence
        with:
          folder_id: '{{project_id}}'
          name: mRNA-{{optimize-codons.construct_id}}
          bases: '{{optimize-codons.optimized_sequence}}'
          annotations: '{{optimize-codons.annotations}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: mrna-design-team
          text: 'New mRNA construct {{register-construct.entity_id}} registered. Optimization: {{optimization_strategy}}. GC content: {{optimize-codons.gc_content}}%. View: {{register-construct.web_url}}'
  consumes:
  - type: http
    namespace: azureml
    baseUri: https://moderna-ml.eastus2.inference.ml.azure.com
    authentication:
      type: bearer
      token: $secrets.azureml_token
    resources:
    - name: deployments
      path: /score
      operations:
      - name: invoke-endpoint
        method: POST
  - type: http
    namespace: benchling
    baseUri: https://moderna.benchling.com/api/v2
    authentication:
      type: bearer
      token: $secrets.benchling_token
    resources:
    - name: dna-sequences
      path: /dna-sequences
      operations:
      - name: create-dna-sequence
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → mrna-sequence-design-orchestrator.yml

Queries Datadog for the current health status of Moderna's mRNA digital platform, and if error rates exceed thresholds, creates a ServiceNow incident and alerts the platform team in Teams.

naftiko: '0.5'
info:
  label: Datadog mRNA Platform Health Check
  description: Queries Datadog for the current health status of Moderna's mRNA digital platform, and if error rates exceed thresholds, creates a ServiceNow incident and alerts the platform team in Teams.
  tags:
  - monitoring
  - infrastructure
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: platform-monitoring
    port: 8080
    tools:
    - name: get-platform-health
      description: Query Datadog for service health metrics. If degraded, create a ServiceNow incident and alert the platform team.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name (e.g., mrna-design-api, lims-gateway).
      - name: time_range
        in: body
        type: string
        description: Time range for metrics (e.g., 1h, 24h, 7d).
      steps:
      - name: query-health
        type: call
        call: datadog.query-metrics
        with:
          query: avg:trace.http.request.duration{service:{{service_name}}}
          from: '{{time_range}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Platform health check: {{service_name}}'
          category: infrastructure
          description: 'Service: {{service_name}}. Avg latency: {{query-health.avg_latency_ms}}ms. Error rate: {{query-health.error_rate}}%.'
      - name: alert-platform-team
        type: call
        call: msteams.send-message
        with:
          channel_id: platform-engineering
          text: 'Health check for {{service_name}}: Latency {{query-health.avg_latency_ms}}ms, Error rate {{query-health.error_rate}}%. SNOW: {{create-incident.number}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-mrna-platform-health-check.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 22
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-22
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://moderna.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → moderna-workflow-22.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 4
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-4
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: PHARMA
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moderna.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → moderna-workflow-4.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 1
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-1.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 5
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-5
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-5
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_5
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → moderna-workflow-5.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 23
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-23
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-23
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 23 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → moderna-workflow-23.yml

Retrieves LNP formulation data from Benchling by experiment ID, pulls the associated analytical results from the LIMS, and updates the formulation dashboard in Power BI.

naftiko: '0.5'
info:
  label: Lipid Nanoparticle Formulation Tracker
  description: Retrieves LNP formulation data from Benchling by experiment ID, pulls the associated analytical results from the LIMS, and updates the formulation dashboard in Power BI.
  tags:
  - drug-development
  - formulation
  - benchling
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: formulation-tracking
    port: 8080
    tools:
    - name: track-lnp-formulation
      description: Given an experiment ID, pull formulation parameters from Benchling, retrieve analytical data, and refresh the Power BI dashboard.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: Benchling experiment ID for the LNP formulation.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the formulation dashboard.
      steps:
      - name: get-experiment
        type: call
        call: benchling.get-experiment
        with:
          experiment_id: '{{experiment_id}}'
      - name: get-results
        type: call
        call: benchling.list-results
        with:
          experiment_id: '{{experiment_id}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: benchling
    baseUri: https://moderna.benchling.com/api/v2
    authentication:
      type: bearer
      token: $secrets.benchling_token
    resources:
    - name: experiments
      path: /experiments/{{experiment_id}}
      inputParameters:
      - name: experiment_id
        in: path
      operations:
      - name: get-experiment
        method: GET
    - name: results
      path: /experiments/{{experiment_id}}/results
      inputParameters:
      - name: experiment_id
        in: path
      operations:
      - name: list-results
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → lipid-nanoparticle-formulation-tracker.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 15
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-15.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 21
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-21
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → moderna-workflow-21.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 35
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-35
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-35
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 35 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → moderna-workflow-35.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 2
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-2.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 7
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-7
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: pharma
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → moderna-workflow-7.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 6
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-6
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PHAR
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moderna.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → moderna-workflow-6.yml

Activates pandemic response manufacturing by scaling Kubernetes clusters via Terraform, provisioning additional SAP production orders, alerting the global supply chain team in Teams, and creating an executive dashboard in Power BI.

naftiko: '0.5'
info:
  label: Pandemic Response Scale-Up Orchestrator
  description: Activates pandemic response manufacturing by scaling Kubernetes clusters via Terraform, provisioning additional SAP production orders, alerting the global supply chain team in Teams, and creating an executive dashboard in Power BI.
  tags:
  - pandemic-response
  - manufacturing
  - scale-up
  - terraform
  - sap
  - microsoft-teams
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: pandemic-response
    port: 8080
    tools:
    - name: activate-scale-up
      description: Given a product code and target production volume, scale infrastructure, create production orders, alert supply chain, and provision the executive dashboard.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Vaccine product material number.
      - name: target_volume
        in: body
        type: number
        description: Target production volume in doses.
      - name: workspace_id
        in: body
        type: string
        description: Terraform workspace for manufacturing infrastructure.
      - name: dashboard_dataset_id
        in: body
        type: string
        description: Power BI dataset for the response dashboard.
      steps:
      - name: scale-infra
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: 'Pandemic scale-up: {{product_code}} target {{target_volume}} doses'
      - name: create-production-orders
        type: call
        call: sap.create-production-order
        with:
          material: '{{product_code}}'
          target_quantity: '{{target_volume}}'
          priority: urgent
      - name: alert-supply-chain
        type: call
        call: msteams.send-message
        with:
          channel_id: global-supply-chain
          text: 'PANDEMIC RESPONSE ACTIVATED: {{product_code}} scale-up to {{target_volume}} doses. Infra scaling initiated (run: {{scale-infra.run_id}}). Production order: {{create-production-orders.order_number}}.'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dashboard_dataset_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: sap
    baseUri: https://moderna-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: create-production-order
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → pandemic-response-scale-up-orchestrator.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 3
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-3.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 34
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-34
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://moderna.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → moderna-workflow-34.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 20
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-20
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-20
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_20
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://moderna-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → moderna-workflow-20.yml

Pulls randomization records from the IRT system, cross-references enrollment data in Veeva CTMS, checks for protocol deviations in the EDC system, and publishes an audit summary to Confluence with a Teams notification to the data management team.

naftiko: '0.5'
info:
  label: Clinical Trial Randomization Audit
  description: Pulls randomization records from the IRT system, cross-references enrollment data in Veeva CTMS, checks for protocol deviations in the EDC system, and publishes an audit summary to Confluence with a Teams notification to the data management team.
  tags:
  - clinical-trials
  - data-management
  - veeva
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-audit
    port: 8080
    tools:
    - name: audit-randomization
      description: Given a study ID and site range, pull randomization records, cross-reference enrollment, check for deviations, and publish audit results.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: site_numbers
        in: body
        type: string
        description: Comma-separated list of site numbers to audit.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID for the audit report.
      steps:
      - name: get-randomization
        type: call
        call: veeva.get-randomization
        with:
          study_id: '{{study_id}}'
          sites: '{{site_numbers}}'
      - name: get-enrollment
        type: call
        call: veeva.get-enrollment
        with:
          study_id: '{{study_id}}'
      - name: publish-audit
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          body: 'Randomization Audit: {{study_id}}


            Sites Audited: {{site_numbers}}

            Total Randomized: {{get-randomization.total_randomized}}

            Total Enrolled: {{get-enrollment.total_enrolled}}

            Discrepancies: {{get-randomization.discrepancy_count}}

            Protocol Deviations: {{get-randomization.deviation_count}}'
      - name: notify-data-mgmt
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-data-mgmt
          text: 'Randomization audit complete for {{study_id}} (sites: {{site_numbers}}). {{get-randomization.discrepancy_count}} discrepancies found. Report: {{publish-audit.url}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://moderna.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: randomization
      path: /objects/studies/{{study_id}}/randomization?sites={{sites}}
      inputParameters:
      - name: study_id
        in: path
      - name: sites
        in: query
      operations:
      - name: get-randomization
        method: GET
    - name: enrollment
      path: /objects/studies/{{study_id}}/enrollment
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-enrollment
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://moderna.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: update-page
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-randomization-audit.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 14
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-14.yml

Triggers a refresh of a specified Power BI dataset used for Moderna operational reporting and returns the refresh status.

naftiko: '0.5'
info:
  label: Power BI Report Refresh
  description: Triggers a refresh of a specified Power BI dataset used for Moderna operational reporting and returns the refresh status.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-report
      description: Trigger a Power BI dataset refresh by dataset ID. Returns the refresh request ID and status.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset identifier.
      call: powerbi.refresh-dataset
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: request_id
        type: string
        mapping: $.requestId
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-report-refresh.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 10
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-10.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 24
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-24
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: pharma.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → moderna-workflow-24.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 30
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-30
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PHAR
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moderna.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → moderna-workflow-30.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 18
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-18
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PHAR
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://moderna.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → moderna-workflow-18.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 7
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-7.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 2
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-2
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → moderna-workflow-2.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 3
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-3
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#pharma'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → moderna-workflow-3.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 6
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-6.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 19
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-19
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: pharma
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → moderna-workflow-19.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 31
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-31
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: pharma
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → moderna-workflow-31.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 25
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-25
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moderna.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → moderna-workflow-25.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 11
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-11.yml

Receives an adverse event report, creates a safety case in Argus Enterprise, logs a pharmacovigilance ticket in ServiceNow, and sends an urgent alert to the safety team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Adverse Event Intake Pipeline
  description: Receives an adverse event report, creates a safety case in Argus Enterprise, logs a pharmacovigilance ticket in ServiceNow, and sends an urgent alert to the safety team via Microsoft Teams.
  tags:
  - pharmacovigilance
  - safety
  - argus-enterprise
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: intake-adverse-event
      description: Given adverse event details and patient demographics, create the safety case in Argus, open a ServiceNow ticket, and alert the safety team.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Product associated with the adverse event.
      - name: event_description
        in: body
        type: string
        description: Description of the adverse event.
      - name: severity
        in: body
        type: string
        description: Severity classification (mild, moderate, severe, life-threatening).
      - name: reporter_id
        in: body
        type: string
        description: ID of the reporting healthcare professional.
      steps:
      - name: create-case
        type: call
        call: argus.create-case
        with:
          product: '{{product_name}}'
          narrative: '{{event_description}}'
          seriousness: '{{severity}}'
          reporter: '{{reporter_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'AE Report: {{product_name}} - {{severity}}'
          category: pharmacovigilance
          urgency: '1'
          description: Argus case {{create-case.case_number}} created. {{event_description}}
      - name: alert-safety-team
        type: call
        call: msteams.send-message
        with:
          channel_id: drug-safety-ops
          text: 'URGENT: New {{severity}} AE for {{product_name}}. Case: {{create-case.case_number}}. SNOW: {{open-ticket.number}}. Immediate review required.'
  consumes:
  - type: http
    namespace: argus
    baseUri: https://moderna-argus.oracle.com/argus-safety/api/v1
    authentication:
      type: bearer
      token: $secrets.argus_token
    resources:
    - name: cases
      path: /cases
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → adverse-event-intake-pipeline.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 13
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-13.yml

Looks up a SAP S/4HANA purchase order, cross-references the vendor qualification status in SAP Ariba, and notifies the procurement team in Teams if vendor qualification has lapsed.

naftiko: '0.5'
info:
  label: SAP Purchase Order Status and Vendor Check
  description: Looks up a SAP S/4HANA purchase order, cross-references the vendor qualification status in SAP Ariba, and notifies the procurement team in Teams if vendor qualification has lapsed.
  tags:
  - procurement
  - sap
  - sap-s4hana
  - sap-ariba
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a PO in SAP, check vendor qualification in Ariba, and notify procurement if there are issues.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number (10-digit).
      steps:
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: check-vendor
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{get-po.Supplier.SupplierID}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement-ops
          text: 'PO {{po_number}}: {{get-po.OverallStatus}}. Vendor: {{get-po.Supplier.CompanyName}} (${{get-po.TotalAmount}}). Qualification: {{check-vendor.qualification_status}}. Delivery: {{get-po.DeliveryDate}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://moderna-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-purchase-order-status-and-vendor-check.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 33
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-33
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → moderna-workflow-33.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 27
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-27
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#pharma'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → moderna-workflow-27.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 1
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-1
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moderna.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → moderna-workflow-1.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 4
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-4.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 5
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-5.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 26
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-26
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → moderna-workflow-26.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 32
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-32
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-32
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_32
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://moderna-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → moderna-workflow-32.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 12
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-12.yml

Retrieves a clinical trial protocol document from Veeva Vault by study ID, pulls enrollment status from the CTMS, and posts a protocol summary to the clinical operations Teams channel.

naftiko: '0.5'
info:
  label: Clinical Trial Protocol Lookup and Summary
  description: Retrieves a clinical trial protocol document from Veeva Vault by study ID, pulls enrollment status from the CTMS, and posts a protocol summary to the clinical operations Teams channel.
  tags:
  - clinical-trials
  - regulatory
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: get-trial-protocol
      description: Look up a clinical trial protocol by study ID, enrich with enrollment data, and post summary to Teams.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The Moderna study identifier (e.g., mRNA-1273-P301).
      steps:
      - name: get-protocol
        type: call
        call: veeva.get-document
        with:
          study_id: '{{study_id}}'
      - name: get-enrollment
        type: call
        call: veeva.get-enrollment
        with:
          study_id: '{{study_id}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-ops
          text: 'Protocol: {{get-protocol.name__v}} ({{get-protocol.phase__c}}). Indication: {{get-protocol.indication__c}}. Status: {{get-protocol.status__v}}. Enrolled: {{get-enrollment.total_enrolled}}/{{get-enrollment.target_enrollment}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://moderna.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: documents
      path: /objects/documents/search?q=study_id__c={{study_id}}
      inputParameters:
      - name: study_id
        in: query
      operations:
      - name: get-document
        method: GET
    - name: enrollment
      path: /objects/studies/{{study_id}}/enrollment
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-enrollment
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-protocol-lookup-and-summary.yml

Triggers a refresh of a specified Tableau workbook used for Moderna operational and clinical reporting.

naftiko: '0.5'
info:
  label: Tableau Dashboard Refresh
  description: Triggers a refresh of a specified Tableau workbook used for Moderna operational and clinical reporting.
  tags:
  - analytics
  - tableau
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bi-tableau
    port: 8080
    tools:
    - name: refresh-tableau-workbook
      description: Trigger a Tableau workbook refresh by workbook ID. Returns the refresh job ID.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook identifier.
      call: tableau.refresh-workbook
      with:
        workbook_id: '{{workbook_id}}'
      outputParameters:
      - name: job_id
        type: string
        mapping: $.job.id
      - name: status
        type: string
        mapping: $.job.status
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://moderna-tableau.online.tableau.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/moderna/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
Open in Framework → View in Fleet → tableau-dashboard-refresh.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 17
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-17
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-17
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_17
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → moderna-workflow-17.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 8
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-8.yml

Retrieves operational data for Moderna pharma workflows.

naftiko: '0.5'
info:
  label: Moderna Data Lookup 9
  description: Retrieves operational data for Moderna pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: moderna-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Moderna pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: moderna-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: moderna-data
    baseUri: https://api.moderna.com/data/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → moderna-data-lookup-9.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 16
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-16
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: PHARMA
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moderna.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → moderna-workflow-16.yml

Queries the patent database via OpenAI for prior art analysis, cross-references Moderna IP records in Confluence, generates a landscape summary, and creates a Jira task for the IP legal team to review.

naftiko: '0.5'
info:
  label: AI-Driven Patent Landscape Analysis
  description: Queries the patent database via OpenAI for prior art analysis, cross-references Moderna IP records in Confluence, generates a landscape summary, and creates a Jira task for the IP legal team to review.
  tags:
  - intellectual-property
  - legal
  - openai
  - confluence
  - jira
capability:
  exposes:
  - type: mcp
    namespace: ip-analysis
    port: 8080
    tools:
    - name: analyze-patent-landscape
      description: Given a technology area and key claims, use AI to analyze the patent landscape, cross-reference internal IP, and create a review task.
      inputParameters:
      - name: technology_area
        in: body
        type: string
        description: Technology area (e.g., mRNA delivery, LNP formulation, codon optimization).
      - name: key_claims
        in: body
        type: string
        description: Description of key claims to analyze.
      - name: confluence_space
        in: body
        type: string
        description: Confluence space key for IP records.
      steps:
      - name: ai-analysis
        type: call
        call: openai.create-completion
        with:
          model: gpt-4
          messages:
          - role: system
            content: You are a patent landscape analyst specializing in mRNA therapeutics and vaccine technology.
          - role: user
            content: 'Analyze the patent landscape for {{technology_area}} with focus on these claims: {{key_claims}}. Identify key competitors, freedom-to-operate risks, and white space opportunities.'
      - name: search-internal-ip
        type: call
        call: confluence.search
        with:
          cql: type=page AND space={{confluence_space}} AND text~"{{technology_area}}"
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: IPLEGAL
          issue_type: Task
          summary: 'Patent landscape review: {{technology_area}}'
          description: AI analysis complete. {{search-internal-ip.totalSize}} internal IP records found. Review AI landscape analysis and update FTO assessment.
  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: create-completion
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moderna.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search
        method: GET
  - type: http
    namespace: jira
    baseUri: https://moderna.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → ai-driven-patent-landscape-analysis.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 28
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-28
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: PHARMA
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moderna.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → moderna-workflow-28.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 14
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-14
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → moderna-workflow-14.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 15
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-15
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#pharma'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → moderna-workflow-15.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 29
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-29
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-29
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_29
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → moderna-workflow-29.yml

Retrieves a manufacturing batch record from SAP S/4HANA, pulls associated quality inspection results, and logs the batch review in ServiceNow for production traceability.

naftiko: '0.5'
info:
  label: SAP Manufacturing Batch Record and Quality Check
  description: Retrieves a manufacturing batch record from SAP S/4HANA, pulls associated quality inspection results, and logs the batch review in ServiceNow for production traceability.
  tags:
  - manufacturing
  - sap
  - sap-s4hana
  - batch-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: get-batch-record
      description: Look up a manufacturing batch, pull quality inspection results, and log the review in ServiceNow.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number (10-digit).
      - name: plant_code
        in: body
        type: string
        description: SAP plant code (e.g., 1000 for Norwood).
      steps:
      - name: get-batch
        type: call
        call: sap.get-batch
        with:
          batch_number: '{{batch_number}}'
          plant_code: '{{plant_code}}'
      - name: get-inspection
        type: call
        call: sap.get-inspection-lot
        with:
          batch: '{{batch_number}}'
          plant: '{{plant_code}}'
      - name: log-review
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Batch review: {{batch_number}} at plant {{plant_code}}'
          category: manufacturing
          description: 'Batch {{batch_number}} status: {{get-batch.BatchStatus}}. Yield: {{get-batch.YieldPercentage}}%. QA disposition: {{get-inspection.disposition}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://moderna-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: batches
      path: /A_Batch(Batch='{{batch_number}}',Plant='{{plant_code}}')
      inputParameters:
      - name: batch_number
        in: path
      - name: plant_code
        in: path
      operations:
      - name: get-batch
        method: GET
  - type: http
    namespace: sap-qm
    baseUri: https://moderna-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?$filter=Batch eq '{{batch}}' and Plant eq '{{plant}}'
      inputParameters:
      - name: batch
        in: query
      - name: plant
        in: query
      operations:
      - name: get-inspection-lot
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sap-manufacturing-batch-record-and-quality-check.yml

Retrieves calendar events for a specified user from Microsoft Graph, returning meeting titles, times, attendees, and Teams join links for scheduling coordination.

naftiko: '0.5'
info:
  label: Microsoft Outlook Calendar Event Lookup
  description: Retrieves calendar events for a specified user from Microsoft Graph, returning meeting titles, times, attendees, and Teams join links for scheduling coordination.
  tags:
  - collaboration
  - microsoft-outlook
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: calendar
    port: 8080
    tools:
    - name: get-calendar-events
      description: Retrieve calendar events for a user in a date range. Returns event titles, times, and join links.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: User email address.
      - name: start_date
        in: body
        type: string
        description: Start date (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: End date (YYYY-MM-DD).
      call: msgraph.get-events
      with:
        user_email: '{{user_email}}'
        start: '{{start_date}}'
        end: '{{end_date}}'
      outputParameters:
      - name: events
        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: calendar-events
      path: /users/{{user_email}}/calendarView?startDateTime={{start}}&endDateTime={{end}}
      inputParameters:
      - name: user_email
        in: path
      - name: start
        in: query
      - name: end
        in: query
      operations:
      - name: get-events
        method: GET
Open in Framework → View in Fleet → microsoft-outlook-calendar-event-lookup.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 11
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-11
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-11
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 11 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → moderna-workflow-11.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 10
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-10
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://moderna.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → moderna-workflow-10.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 12
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-12
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: pharma.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → moderna-workflow-12.yml

Creates a stability study protocol in Benchling, schedules time-point samples in SAP QM, sets up the data collection template in the LIMS, and notifies the analytical development team via Teams.

naftiko: '0.5'
info:
  label: Vaccine Stability Study Orchestrator
  description: Creates a stability study protocol in Benchling, schedules time-point samples in SAP QM, sets up the data collection template in the LIMS, and notifies the analytical development team via Teams.
  tags:
  - quality
  - stability
  - benchling
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: stability-studies
    port: 8080
    tools:
    - name: initiate-stability-study
      description: Given product details and storage conditions, create the stability protocol, schedule samples in SAP, and notify the analytical team.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: Material number for the vaccine product.
      - name: batch_number
        in: body
        type: string
        description: Batch number to place on stability.
      - name: storage_conditions
        in: body
        type: string
        description: Storage conditions (e.g., -20C, 2-8C, 25C/60%RH).
      - name: duration_months
        in: body
        type: number
        description: Planned study duration in months.
      steps:
      - name: create-protocol
        type: call
        call: benchling.create-experiment
        with:
          name: 'Stability Study: {{product_code}} Batch {{batch_number}} at {{storage_conditions}}'
          schema_id: stability_protocol
          fields:
            product_code: '{{product_code}}'
            batch_number: '{{batch_number}}'
            conditions: '{{storage_conditions}}'
            duration: '{{duration_months}}'
      - name: schedule-samples
        type: call
        call: sap.create-inspection-lot
        with:
          material: '{{product_code}}'
          batch: '{{batch_number}}'
          inspection_type: stability
          plan_duration: '{{duration_months}}'
      - name: notify-analytical
        type: call
        call: msteams.send-message
        with:
          channel_id: analytical-development
          text: 'Stability study initiated: {{product_code}} Batch {{batch_number}} at {{storage_conditions}} for {{duration_months}} months. Protocol: {{create-protocol.web_url}}. SAP Inspection Lot: {{schedule-samples.lot_number}}.'
  consumes:
  - type: http
    namespace: benchling
    baseUri: https://moderna.benchling.com/api/v2
    authentication:
      type: bearer
      token: $secrets.benchling_token
    resources:
    - name: experiments
      path: /experiments
      operations:
      - name: create-experiment
        method: POST
  - type: http
    namespace: sap
    baseUri: https://moderna-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
      operations:
      - name: create-inspection-lot
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vaccine-stability-study-orchestrator.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 8
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-8
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-8
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_8
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://moderna-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → moderna-workflow-8.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 9
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-9
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → moderna-workflow-9.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.

naftiko: '0.5'
info:
  label: Moderna Workflow 13
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
  tags:
  - pharma
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: moderna-workflow-13
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Moderna.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: moderna-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: moderna-ops
    baseUri: https://api.moderna.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.moderna_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://moderna.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → moderna-workflow-13.yml

Queries the Moderna research data lake in Elasticsearch for indexed experimental results matching a search query, returning aggregated hit counts and sample records.

naftiko: '0.5'
info:
  label: Elasticsearch Research Data Query
  description: Queries the Moderna research data lake in Elasticsearch for indexed experimental results matching a search query, returning aggregated hit counts and sample records.
  tags:
  - research
  - data-lake
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: research-data
    port: 8080
    tools:
    - name: search-research-data
      description: Query the Elasticsearch research data lake with a search term and index pattern. Returns total hits and sample documents.
      inputParameters:
      - name: index_pattern
        in: body
        type: string
        description: Elasticsearch index pattern (e.g., preclinical-*, clinical-trial-data).
      - name: query
        in: body
        type: string
        description: Search query string.
      call: elasticsearch.search
      with:
        index: '{{index_pattern}}'
        query: '{{query}}'
      outputParameters:
      - name: total_hits
        type: number
        mapping: $.hits.total.value
      - name: results
        type: array
        mapping: $.hits.hits
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://moderna-es.eastus2.azure.elastic-cloud.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → elasticsearch-research-data-query.yml

When a new GMP training requirement is identified, assigns the course in the LMS via Workday, creates a tracking record in ServiceNow, and sends a reminder to the employee and their manager in Teams.

naftiko: '0.5'
info:
  label: Compliance Training Assignment Pipeline
  description: When a new GMP training requirement is identified, assigns the course in the LMS via Workday, creates a tracking record in ServiceNow, and sends a reminder to the employee and their manager in Teams.
  tags:
  - compliance
  - training
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: assign-compliance-training
      description: Given an employee ID, course ID, and due date, assign the training in Workday, log in ServiceNow, and notify the employee and manager.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday worker ID of the employee.
      - name: course_id
        in: body
        type: string
        description: Training course identifier.
      - name: due_date
        in: body
        type: string
        description: Training completion due date (YYYY-MM-DD).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: assign-course
        type: call
        call: workday.assign-learning
        with:
          worker_id: '{{employee_id}}'
          course_id: '{{course_id}}'
          due_date: '{{due_date}}'
      - name: log-assignment
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'GMP Training: {{get-employee.full_name}} - Course {{course_id}}'
          category: compliance_training
          description: 'Assigned course {{course_id}} to {{get-employee.full_name}}. Due: {{due_date}}.'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'You have been assigned GMP training course {{course_id}}. Due date: {{due_date}}. Please complete in Workday Learning.'
  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
    - name: learning
      path: /workers/{{worker_id}}/learningAssignments
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: assign-learning
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-training-assignment-pipeline.yml

Retrieves a healthcare professional account from Salesforce, pulls recent engagement activities, and logs a summary report in Confluence for the medical affairs team.

naftiko: '0.5'
info:
  label: Salesforce HCP Account and Engagement Report
  description: Retrieves a healthcare professional account from Salesforce, pulls recent engagement activities, and logs a summary report in Confluence for the medical affairs team.
  tags:
  - commercial
  - salesforce
  - hcp-engagement
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: commercial-crm
    port: 8080
    tools:
    - name: get-hcp-account
      description: Look up an HCP account in Salesforce, pull engagement activities, and publish a summary to Confluence.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID for the HCP.
      - name: confluence_space
        in: body
        type: string
        description: Confluence space key for medical affairs.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-activities
        type: call
        call: salesforce.get-activities
        with:
          account_id: '{{account_id}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space}}'
          title: 'HCP Engagement: {{get-account.Name}}'
          body: 'HCP: {{get-account.Name}}

            Specialty: {{get-account.Specialty__c}}

            Institution: {{get-account.Institution__c}}

            Territory: {{get-account.Territory__c}}

            Recent Activities: {{get-activities.totalSize}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://moderna.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
    - name: activities
      path: /sobjects/Account/{{account_id}}/Activities
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-activities
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://moderna.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → salesforce-hcp-account-and-engagement-report.yml

Sends a formatted notification message to a specified Microsoft Teams channel. Used as a building block for alerting across Moderna workflows.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Notification
  description: Sends a formatted notification message to a specified Microsoft Teams channel. Used as a building block for alerting across Moderna workflows.
  tags:
  - communication
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: notifications
    port: 8080
    tools:
    - name: send-teams-notification
      description: Send a message to a Microsoft Teams channel by channel ID.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Teams channel identifier.
      - name: message
        in: body
        type: string
        description: The notification message text.
      call: msteams.send-message
      with:
        channel_id: '{{channel_id}}'
        text: '{{message}}'
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-notification.yml

Retrieves a Benchling entity (DNA sequence, protein, or custom entity) by ID and returns the name, schema, folder, creator, and creation date.

naftiko: '0.5'
info:
  label: Benchling Entity Lookup
  description: Retrieves a Benchling entity (DNA sequence, protein, or custom entity) by ID and returns the name, schema, folder, creator, and creation date.
  tags:
  - research
  - benchling
  - entity-management
capability:
  exposes:
  - type: mcp
    namespace: lab-informatics
    port: 8080
    tools:
    - name: get-benchling-entity
      description: Look up a Benchling entity by ID. Returns name, schema, folder, creator, and created date.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Benchling entity ID.
      call: benchling.get-entity
      with:
        entity_id: '{{entity_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: schema
        type: string
        mapping: $.schema.name
      - name: folder
        type: string
        mapping: $.folder.name
      - name: creator
        type: string
        mapping: $.creator.name
  consumes:
  - type: http
    namespace: benchling
    baseUri: https://moderna.benchling.com/api/v2
    authentication:
      type: bearer
      token: $secrets.benchling_token
    resources:
    - name: entities
      path: /custom-entities/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-entity
        method: GET
Open in Framework → View in Fleet → benchling-entity-lookup.yml

Orchestrates drug product release by verifying batch quality in SAP QM, confirming analytical results in Benchling LIMS, generating a Certificate of Analysis document in Veeva Vault, and notifying the QA release team and distribution in Teams.

naftiko: '0.5'
info:
  label: Drug Product Release Pipeline
  description: Orchestrates drug product release by verifying batch quality in SAP QM, confirming analytical results in Benchling LIMS, generating a Certificate of Analysis document in Veeva Vault, and notifying the QA release team and distribution in Teams.
  tags:
  - quality
  - manufacturing
  - release
  - sap
  - benchling
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-release
    port: 8080
    tools:
    - name: release-drug-product
      description: Given a batch number and product code, verify quality data, confirm analytical results, generate the CoA in Veeva, and notify QA and distribution.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: Manufacturing batch number.
      - name: product_code
        in: body
        type: string
        description: SAP material number.
      - name: plant_code
        in: body
        type: string
        description: SAP plant code.
      steps:
      - name: get-quality-status
        type: call
        call: sap.get-inspection-lot
        with:
          batch: '{{batch_number}}'
          plant: '{{plant_code}}'
      - name: get-analytical-results
        type: call
        call: benchling.list-results
        with:
          batch_number: '{{batch_number}}'
      - name: generate-coa
        type: call
        call: veeva.create-document
        with:
          document_type: certificate_of_analysis
          study_id: '{{product_code}}'
          name: CoA - {{product_code}} Batch {{batch_number}}
          properties:
            batch_number: '{{batch_number}}'
            quality_disposition: '{{get-quality-status.disposition}}'
            results_summary: '{{get-analytical-results.summary}}'
      - name: notify-release
        type: call
        call: msteams.send-message
        with:
          channel_id: qa-release
          text: 'Drug product release: {{product_code}} Batch {{batch_number}}. QA Status: {{get-quality-status.disposition}}. CoA: {{generate-coa.web_url}}. Ready for distribution.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://moderna-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?$filter=Batch eq '{{batch}}' and Plant eq '{{plant}}'
      inputParameters:
      - name: batch
        in: query
      - name: plant
        in: query
      operations:
      - name: get-inspection-lot
        method: GET
  - type: http
    namespace: benchling
    baseUri: https://moderna.benchling.com/api/v2
    authentication:
      type: bearer
      token: $secrets.benchling_token
    resources:
    - name: results
      path: /assay-results?batch_number={{batch_number}}
      inputParameters:
      - name: batch_number
        in: query
      operations:
      - name: list-results
        method: GET
  - type: http
    namespace: veeva
    baseUri: https://moderna.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → drug-product-release-pipeline.yml

Retrieves a Moderna GitHub repository status, checks the latest GitHub Actions workflow run, and posts a CI health summary to the engineering Teams channel.

naftiko: '0.5'
info:
  label: GitHub Repository Status and CI Summary
  description: Retrieves a Moderna GitHub repository status, checks the latest GitHub Actions workflow run, and posts a CI health summary to the engineering Teams channel.
  tags:
  - engineering
  - github
  - github-actions
  - ci-cd
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dev-ops
    port: 8080
    tools:
    - name: get-repo-status
      description: Look up a GitHub repository, check CI status, and post summary to Teams.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: Repository name under the Moderna GitHub org.
      steps:
      - name: get-repo
        type: call
        call: github.get-repo
        with:
          repo_name: '{{repo_name}}'
      - name: get-workflows
        type: call
        call: github.get-workflow-runs
        with:
          repo_name: '{{repo_name}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: engineering
          text: 'Repo: {{repo_name}}. Branch: {{get-repo.default_branch}}. Open issues: {{get-repo.open_issues_count}}. Last CI run: {{get-workflows.workflow_runs[0].conclusion}}. Updated: {{get-repo.updated_at}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com/repos/ModernaTx
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /{{repo_name}}
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-repo
        method: GET
    - name: workflow-runs
      path: /{{repo_name}}/actions/runs?per_page=1
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → github-repository-status-and-ci-summary.yml

Pulls latest patient enrollment counts from the CTMS in Veeva, aggregates safety signals from Argus, and publishes an updated trial status dashboard in Power BI with a Confluence summary page.

naftiko: '0.5'
info:
  label: Clinical Data Monitoring Pipeline
  description: Pulls latest patient enrollment counts from the CTMS in Veeva, aggregates safety signals from Argus, and publishes an updated trial status dashboard in Power BI with a Confluence summary page.
  tags:
  - clinical-trials
  - data-monitoring
  - veeva
  - argus-enterprise
  - power-bi
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-monitoring
    port: 8080
    tools:
    - name: refresh-trial-dashboard
      description: Given a study ID, pull enrollment data from Veeva CTMS, aggregate safety signals from Argus, refresh the Power BI dashboard, and update the Confluence status page.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: Clinical study identifier.
      - name: dashboard_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the trial dashboard.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID for the study status page.
      steps:
      - name: get-enrollment
        type: call
        call: veeva.get-enrollment
        with:
          study_id: '{{study_id}}'
      - name: get-safety-signals
        type: call
        call: argus.get-case-series
        with:
          study_id: '{{study_id}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dashboard_dataset_id}}'
      - name: update-status-page
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          body: 'Study {{study_id}} Status Update


            Enrolled: {{get-enrollment.total_enrolled}}/{{get-enrollment.target_enrollment}}

            Active Sites: {{get-enrollment.active_sites}}

            Safety Cases: {{get-safety-signals.total_cases}}

            Serious AEs: {{get-safety-signals.serious_count}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://moderna.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_session_id
    resources:
    - name: enrollment
      path: /objects/studies/{{study_id}}/enrollment
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-enrollment
        method: GET
  - type: http
    namespace: argus
    baseUri: https://moderna-argus.oracle.com/argus-safety/api/v1
    authentication:
      type: bearer
      token: $secrets.argus_token
    resources:
    - name: case-series
      path: /case-series?study_id={{study_id}}
      inputParameters:
      - name: study_id
        in: query
      operations:
      - name: get-case-series
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://moderna.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: update-page
        method: PUT
Open in Framework → View in Fleet → clinical-data-monitoring-pipeline.yml

Qualifies a new raw material vendor by pulling vendor details from SAP Ariba, creating a quality audit record in ServiceNow, provisioning a document repository in SharePoint, and notifying the quality and procurement teams in Teams.

naftiko: '0.5'
info:
  label: Vendor Qualification Pipeline
  description: Qualifies a new raw material vendor by pulling vendor details from SAP Ariba, creating a quality audit record in ServiceNow, provisioning a document repository in SharePoint, and notifying the quality and procurement teams in Teams.
  tags:
  - procurement
  - quality
  - vendor-management
  - sap-ariba
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-qualification
    port: 8080
    tools:
    - name: qualify-vendor
      description: Given a vendor ID and material category, pull vendor data from Ariba, create a quality audit in ServiceNow, set up a document folder in SharePoint, and notify stakeholders.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: SAP Ariba vendor/supplier ID.
      - name: material_category
        in: body
        type: string
        description: Material category the vendor will supply (e.g., lipids, excipients, packaging).
      - name: audit_type
        in: body
        type: string
        description: Type of qualification audit (desktop, on-site, virtual).
      steps:
      - name: get-vendor
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{vendor_id}}'
      - name: create-audit
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Vendor qualification: {{get-vendor.supplier_name}} - {{material_category}}'
          category: quality_audit
          description: '{{audit_type}} audit for {{get-vendor.supplier_name}} ({{vendor_id}}). Category: {{material_category}}. Country: {{get-vendor.country}}.'
      - name: provision-docs
        type: call
        call: sharepoint.create-folder
        with:
          site_id: vendor-management
          folder_path: Qualifications/{{get-vendor.supplier_name}}_{{material_category}}
      - name: notify-teams
        type: call
        call: msteams.send-message
        with:
          channel_id: vendor-qualification
          text: 'Vendor qualification initiated: {{get-vendor.supplier_name}} for {{material_category}}. Audit type: {{audit_type}}. SNOW: {{create-audit.number}}. Docs: {{provision-docs.url}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/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: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-qualification-pipeline.yml

Queries Splunk for security events, correlates with Microsoft Entra sign-in logs, and creates a ServiceNow security incident with findings for the SOC team.

naftiko: '0.5'
info:
  label: Splunk Security Incident Investigation
  description: Queries Splunk for security events, correlates with Microsoft Entra sign-in logs, and creates a ServiceNow security incident with findings for the SOC team.
  tags:
  - security
  - splunk
  - microsoft-entra
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: investigate-security-event
      description: Search Splunk for security events, correlate with Entra sign-in data, and create a ServiceNow security incident.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Splunk search query (SPL syntax).
      - name: earliest_time
        in: body
        type: string
        description: Earliest time for the search (e.g., -24h, -7d).
      - name: user_principal_name
        in: body
        type: string
        description: UPN of the user to correlate sign-in logs.
      steps:
      - name: search-logs
        type: call
        call: splunk.create-search
        with:
          search: '{{search_query}}'
          earliest_time: '{{earliest_time}}'
      - name: get-signin-logs
        type: call
        call: entra.get-signins
        with:
          user_principal_name: '{{user_principal_name}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Security investigation: {{user_principal_name}}'
          category: security
          urgency: '2'
          description: 'Splunk results: {{search-logs.resultCount}} events. Entra sign-ins: {{get-signin-logs.value.length}} in period. Query: {{search_query}}.'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://moderna-splunk.splunkcloud.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: entra
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: signins
      path: /auditLogs/signIns?$filter=userPrincipalName eq '{{user_principal_name}}'
      inputParameters:
      - name: user_principal_name
        in: query
      operations:
      - name: get-signins
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://moderna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → splunk-security-incident-investigation.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 9
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-9
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-9.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 15
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-15
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#healthcare'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-15.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 29
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-29
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-29
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_29
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-29.yml

Schedules a telehealth visit for a member by creating the appointment in Salesforce, generating a Zoom meeting link, and sending the details to the member's care coordinator via Microsoft Teams.

naftiko: '0.5'
info:
  label: Telehealth Visit Scheduling
  description: Schedules a telehealth visit for a member by creating the appointment in Salesforce, generating a Zoom meeting link, and sending the details to the member's care coordinator via Microsoft Teams.
  tags:
  - telehealth
  - scheduling
  - salesforce
  - zoom
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: telehealth-scheduling
    port: 8080
    tools:
    - name: schedule-telehealth-visit
      description: Given member and appointment details, create a Salesforce appointment, Zoom meeting, and notify the care coordinator.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: provider_name
        in: body
        type: string
        description: The provider's name.
      - name: visit_type
        in: body
        type: string
        description: Type of visit (e.g., PCP follow-up, specialist consult).
      - name: appointment_time
        in: body
        type: string
        description: Requested appointment date and time in ISO 8601 format.
      steps:
      - name: create-appointment
        type: call
        call: salesforce.create-appointment
        with:
          member_id: '{{member_id}}'
          provider_name: '{{provider_name}}'
          visit_type: '{{visit_type}}'
          appointment_time: '{{appointment_time}}'
      - name: create-zoom-link
        type: call
        call: zoom.create-meeting
        with:
          topic: 'Telehealth: {{visit_type}} - {{member_id}} with {{provider_name}}'
          start_time: '{{appointment_time}}'
          duration: '30'
      - name: notify-coordinator
        type: call
        call: msteams.post-message
        with:
          team_id: care-coordination
          channel_id: appointments
          message: 'Telehealth scheduled: {{visit_type}} for member {{member_id}} with {{provider_name}} at {{appointment_time}}. Zoom: {{create-zoom-link.join_url}}. Salesforce: {{create-appointment.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: appointments
      path: /sobjects/Appointment__c
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → telehealth-visit-scheduling.yml

Processes a member disenrollment by updating Salesforce records, terminating eligibility in Oracle EBS, closing open care cases in ServiceNow, and sending a confirmation via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Member Disenrollment Processor
  description: Processes a member disenrollment by updating Salesforce records, terminating eligibility in Oracle EBS, closing open care cases in ServiceNow, and sending a confirmation via Microsoft Outlook.
  tags:
  - enrollment
  - disenrollment
  - salesforce
  - oracle-e-business-suite
  - servicenow
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: disenrollment
    port: 8080
    tools:
    - name: process-disenrollment
      description: Given a member ID and termination date, update all systems and send confirmation.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: termination_date
        in: body
        type: string
        description: The coverage termination date in YYYY-MM-DD format.
      - name: reason
        in: body
        type: string
        description: The reason for disenrollment.
      steps:
      - name: update-salesforce
        type: call
        call: salesforce.update-member-status
        with:
          member_id: '{{member_id}}'
          status: Terminated
          termination_date: '{{termination_date}}'
          reason: '{{reason}}'
      - name: terminate-eligibility
        type: call
        call: oracle-ebs.terminate-eligibility
        with:
          member_id: '{{member_id}}'
          termination_date: '{{termination_date}}'
      - name: close-cases
        type: call
        call: servicenow.close-member-cases
        with:
          member_id: '{{member_id}}'
          close_reason: 'Member disenrolled: {{reason}}'
      - name: send-confirmation
        type: call
        call: outlook.send-mail
        with:
          recipient: '{{member_id}}@members.molina.com'
          subject: Coverage Termination Confirmation
          body: 'Your Molina Healthcare coverage will end on {{termination_date}}. Reason: {{reason}}. Please contact us with questions.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: update-member-status
        method: PATCH
  - type: http
    namespace: oracle-ebs
    baseUri: https://molina-ebs.oraclecloud.com/webservices/rest
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: eligibility
      path: /eligibility/{{member_id}}/terminate
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: terminate-eligibility
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: member-cases
      path: /table/sn_customerservice_case?sysparm_query=member_id={{member_id}}^state!=closed
      inputParameters:
      - name: member_id
        in: query
      operations:
      - name: close-member-cases
        method: PATCH
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/noreply@molina.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → member-disenrollment-processor.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 28
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-28
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: HEALTH
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://molinahealthcare.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-28.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 14
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-14
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molinahealthcare.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-14.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 8
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-8
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-8
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_8
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://molinahealthcare-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-8.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 16
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-16
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: HEALTH
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://molinahealthcare.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-16.yml

Updates a member's communication preferences in Salesforce and syncs the change to the email marketing platform, then confirms the update via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Member Communication Preferences Update
  description: Updates a member's communication preferences in Salesforce and syncs the change to the email marketing platform, then confirms the update via Microsoft Outlook.
  tags:
  - member-services
  - communications
  - salesforce
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: member-preferences
    port: 8080
    tools:
    - name: update-communication-preferences
      description: Given a member ID and preferences, update Salesforce and confirm via email.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: email_opt_in
        in: body
        type: string
        description: Email opt-in preference (true/false).
      - name: sms_opt_in
        in: body
        type: string
        description: SMS opt-in preference (true/false).
      steps:
      - name: update-preferences
        type: call
        call: salesforce.update-preferences
        with:
          member_id: '{{member_id}}'
          email_opt_in: '{{email_opt_in}}'
          sms_opt_in: '{{sms_opt_in}}'
      - name: send-confirmation
        type: call
        call: outlook.send-mail
        with:
          recipient: '{{member_id}}@members.molina.com'
          subject: Communication Preferences Updated
          body: 'Your communication preferences have been updated. Email: {{email_opt_in}}, SMS: {{sms_opt_in}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: preferences
      path: /sobjects/Member__c/{{member_id}}
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: update-preferences
        method: PATCH
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/noreply@molina.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → member-communication-preferences-update.yml

Captures a member grievance from Salesforce, creates a tracking case in ServiceNow, uploads supporting documents to SharePoint, and sends a confirmation to the member via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Member Grievance Intake Pipeline
  description: Captures a member grievance from Salesforce, creates a tracking case in ServiceNow, uploads supporting documents to SharePoint, and sends a confirmation to the member via Microsoft Outlook.
  tags:
  - grievance
  - member-services
  - salesforce
  - servicenow
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: grievance-intake
    port: 8080
    tools:
    - name: submit-grievance
      description: Given member ID and grievance details, create records across Salesforce, ServiceNow, and SharePoint, then confirm via email.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: grievance_type
        in: body
        type: string
        description: The type of grievance.
      - name: description
        in: body
        type: string
        description: Description of the grievance.
      steps:
      - name: create-grievance
        type: call
        call: salesforce.create-grievance
        with:
          member_id: '{{member_id}}'
          grievance_type: '{{grievance_type}}'
          description: '{{description}}'
      - name: create-tracking-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Grievance: {{grievance_type}} - Member {{member_id}}'
          category: grievance
          description: '{{description}}'
      - name: upload-docs
        type: call
        call: sharepoint.create-folder
        with:
          site_id: grievances_site
          folder_path: Grievances/{{create-grievance.id}}
      - name: send-confirmation
        type: call
        call: outlook.send-mail
        with:
          recipient: '{{member_id}}@members.molina.com'
          subject: Grievance Received - {{create-grievance.id}}
          body: 'Your grievance ({{create-grievance.id}}) has been received and is being reviewed. Case: {{create-tracking-case.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: grievances
      path: /sobjects/Grievance__c
      operations:
      - name: create-grievance
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/noreply@molina.com/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → member-grievance-intake-pipeline.yml

Submits a member grievance by creating a grievance case in Salesforce and a ServiceNow incident for regulatory tracking, then notifying the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Member Grievance Submission
  description: Submits a member grievance by creating a grievance case in Salesforce and a ServiceNow incident for regulatory tracking, then notifying the compliance team via Microsoft Teams.
  tags:
  - grievance
  - compliance
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: member-grievances
    port: 8080
    tools:
    - name: submit-grievance
      description: Given member and grievance details, create a Salesforce case, ServiceNow incident, and notify compliance.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: grievance_type
        in: body
        type: string
        description: Type of grievance (e.g., quality of care, access, billing).
      - name: description
        in: body
        type: string
        description: Detailed description of the grievance.
      steps:
      - name: create-grievance-case
        type: call
        call: salesforce.create-grievance
        with:
          member_id: '{{member_id}}'
          grievance_type: '{{grievance_type}}'
          description: '{{description}}'
      - name: create-regulatory-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Member Grievance: {{grievance_type}} - {{member_id}}'
          category: grievance
          description: 'Grievance for member {{member_id}}. Type: {{grievance_type}}. Detail: {{description}}. Salesforce case: {{create-grievance-case.id}}.'
      - name: notify-compliance
        type: call
        call: msteams.post-message
        with:
          team_id: compliance-team
          channel_id: grievances
          message: 'New grievance filed by member {{member_id}}. Type: {{grievance_type}}. Salesforce: {{create-grievance-case.id}}. ServiceNow: {{create-regulatory-ticket.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: grievances
      path: /sobjects/Grievance__c
      operations:
      - name: create-grievance
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → member-grievance-submission.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 17
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-17
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-17
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_17
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-17.yml

Creates a behavioral health referral by logging the request in Salesforce, scheduling a telehealth intake with Zoom, creating a ServiceNow case for tracking, and notifying the behavioral health team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Behavioral Health Referral Intake
  description: Creates a behavioral health referral by logging the request in Salesforce, scheduling a telehealth intake with Zoom, creating a ServiceNow case for tracking, and notifying the behavioral health team via Microsoft Teams.
  tags:
  - behavioral-health
  - referral
  - salesforce
  - zoom
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: behavioral-health
    port: 8080
    tools:
    - name: create-bh-referral
      description: Given member and referral details, create a behavioral health referral across Salesforce, Zoom, ServiceNow, and Teams.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: referral_type
        in: body
        type: string
        description: Type of behavioral health referral (e.g., outpatient therapy, substance use, crisis).
      - name: urgency
        in: body
        type: string
        description: Urgency level (routine, urgent, emergent).
      steps:
      - name: create-referral
        type: call
        call: salesforce.create-bh-referral
        with:
          member_id: '{{member_id}}'
          referral_type: '{{referral_type}}'
          urgency: '{{urgency}}'
      - name: schedule-intake
        type: call
        call: zoom.create-meeting
        with:
          topic: BH Intake - {{member_id}} - {{referral_type}}
          start_time: '2026-04-02T10:00:00Z'
          duration: '60'
      - name: create-tracking-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'BH Referral: {{referral_type}} - {{member_id}}'
          category: behavioral_health
          urgency: '{{urgency}}'
          description: 'Behavioral health referral for member {{member_id}}. Type: {{referral_type}}. Salesforce: {{create-referral.id}}. Intake: {{schedule-intake.join_url}}.'
      - name: notify-bh-team
        type: call
        call: msteams.post-message
        with:
          team_id: behavioral-health-team
          channel_id: referrals
          message: 'New BH referral for member {{member_id}}. Type: {{referral_type}}. Urgency: {{urgency}}. Case: {{create-tracking-case.number}}. Intake: {{schedule-intake.join_url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: bh-referrals
      path: /sobjects/BH_Referral__c
      operations:
      - name: create-bh-referral
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → behavioral-health-referral-intake.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 13
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-13
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://molinahealthcare.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-13.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 12
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-12
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: healthcare.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-12.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 10
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-10
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://molinahealthcare.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-10.yml

Monitors SLA compliance for open ServiceNow incidents, escalates breached SLAs by updating priority, creating a Jira escalation task, and alerting the operations team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SLA Monitoring and Escalation
  description: Monitors SLA compliance for open ServiceNow incidents, escalates breached SLAs by updating priority, creating a Jira escalation task, and alerting the operations team via Microsoft Teams.
  tags:
  - it-service
  - sla
  - servicenow
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sla-monitoring
    port: 8080
    tools:
    - name: check-and-escalate-sla
      description: Given a service category, check for SLA breaches and escalate as needed.
      inputParameters:
      - name: service_category
        in: body
        type: string
        description: The service category to check SLAs for.
      steps:
      - name: check-breaches
        type: call
        call: servicenow.query-sla-breaches
        with:
          service_category: '{{service_category}}'
      - name: create-escalation
        type: call
        call: jira.create-issue
        with:
          project_key: ITOPS
          summary: 'SLA breach escalation: {{service_category}}'
          description: '{{check-breaches.count}} SLA breaches detected for {{service_category}}.'
          issue_type: Bug
      - name: alert-ops
        type: call
        call: msteams.post-message
        with:
          team_id: it-operations-team
          channel_id: sla-alerts
          message: 'SLA BREACH: {{check-breaches.count}} incidents in {{service_category}} exceeded SLA. Escalation: {{create-escalation.key}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: sla-breaches
      path: /table/incident?sysparm_query=category={{service_category}}^sla_due<javascript:gs.now()^state!=closed
      inputParameters:
      - name: service_category
        in: query
      operations:
      - name: query-sla-breaches
        method: GET
  - type: http
    namespace: jira
    baseUri: https://molina.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sla-monitoring-and-escalation.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 11
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-11
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-11
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 11 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-11.yml

Retrieves expiring provider contracts from Salesforce, generates renewal documentation in SharePoint, creates a Jira task for contract review, and notifies the provider network team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Provider Contract Renewal Pipeline
  description: Retrieves expiring provider contracts from Salesforce, generates renewal documentation in SharePoint, creates a Jira task for contract review, and notifies the provider network team via Microsoft Teams.
  tags:
  - provider
  - contracts
  - salesforce
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: provider-contracts
    port: 8080
    tools:
    - name: initiate-contract-renewal
      description: Given a provider contract ID, pull contract details, generate renewal docs, create a review task, and notify the team.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The Salesforce provider contract ID.
      steps:
      - name: get-contract
        type: call
        call: salesforce.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: create-renewal-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: provider_contracts_site
          folder_path: Renewals/{{get-contract.Provider_Name__c}}_{{get-contract.Expiry_Date__c}}
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: PROV
          summary: 'Contract renewal: {{get-contract.Provider_Name__c}}'
          description: 'Contract {{contract_id}} expires {{get-contract.Expiry_Date__c}}. Renewal docs: {{create-renewal-folder.webUrl}}.'
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: provider-network-team
          channel_id: contracts
          message: 'Contract renewal initiated for {{get-contract.Provider_Name__c}}. Jira: {{create-review-task.key}}. Docs: {{create-renewal-folder.webUrl}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /sobjects/Provider_Contract__c/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://molina.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → provider-contract-renewal-pipeline.yml

Pulls a batch of unprocessed claims from Snowflake, validates them against eligibility in Salesforce, updates adjudication status, and sends a summary report to the claims team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Claims Batch Processing Pipeline
  description: Pulls a batch of unprocessed claims from Snowflake, validates them against eligibility in Salesforce, updates adjudication status, and sends a summary report to the claims team via Microsoft Teams.
  tags:
  - claims
  - batch-processing
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: claims-batch
    port: 8080
    tools:
    - name: process-claims-batch
      description: Given a batch date, pull unprocessed claims from Snowflake, validate eligibility, and report results.
      inputParameters:
      - name: batch_date
        in: body
        type: string
        description: The batch processing date in YYYY-MM-DD format.
      steps:
      - name: pull-claims
        type: call
        call: snowflake.execute-query
        with:
          batch_date: '{{batch_date}}'
      - name: validate-eligibility
        type: call
        call: salesforce.validate-batch
        with:
          batch_date: '{{batch_date}}'
          claim_count: '{{pull-claims.rowCount}}'
      - name: report-results
        type: call
        call: msteams.post-message
        with:
          team_id: claims-team
          channel_id: batch-processing
          message: 'Batch {{batch_date}} complete. {{pull-claims.rowCount}} claims processed. Validation: {{validate-eligibility.status}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://molina.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: batch-validation
      path: /services/apexrest/claims/validate
      operations:
      - name: validate-batch
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → claims-batch-processing-pipeline.yml

Checks the status of a prior authorization request in the utilization management system, returning approval state and review notes.

naftiko: '0.5'
info:
  label: Prior Authorization Status
  description: Checks the status of a prior authorization request in the utilization management system, returning approval state and review notes.
  tags:
  - prior-authorization
  - utilization-management
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: prior-auth
    port: 8080
    tools:
    - name: get-prior-auth-status
      description: Look up a prior authorization by auth ID. Returns approval status, reviewer, decision date, and clinical notes.
      inputParameters:
      - name: auth_id
        in: body
        type: string
        description: The prior authorization request ID.
      call: salesforce.get-auth
      with:
        auth_id: '{{auth_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.records[0].Auth_Status__c
      - name: reviewer
        type: string
        mapping: $.records[0].Reviewer__c
      - name: decision_date
        type: string
        mapping: $.records[0].Decision_Date__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: authorizations
      path: /query/?q=SELECT+Auth_Status__c,Reviewer__c,Decision_Date__c+FROM+Prior_Auth__c+WHERE+Auth_ID__c='{{auth_id}}'
      inputParameters:
      - name: auth_id
        in: query
      operations:
      - name: get-auth
        method: GET
Open in Framework → View in Fleet → prior-authorization-status.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 10
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-10.yml

Enrolls a member in a disease management program by creating a program record in Salesforce, scheduling an initial assessment via Zoom, assigning a care manager in ServiceNow, and notifying the DM team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Disease Management Program Enrollment
  description: Enrolls a member in a disease management program by creating a program record in Salesforce, scheduling an initial assessment via Zoom, assigning a care manager in ServiceNow, and notifying the DM team via Microsoft Teams.
  tags:
  - disease-management
  - care-coordination
  - salesforce
  - zoom
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: disease-management
    port: 8080
    tools:
    - name: enroll-in-dm-program
      description: Given a member ID and program type, enroll the member, schedule assessment, assign care manager, and notify team.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: program_type
        in: body
        type: string
        description: The disease management program (e.g., diabetes, CHF, COPD).
      steps:
      - name: create-enrollment
        type: call
        call: salesforce.create-dm-enrollment
        with:
          member_id: '{{member_id}}'
          program_type: '{{program_type}}'
      - name: schedule-assessment
        type: call
        call: zoom.create-meeting
        with:
          topic: DM Initial Assessment - {{member_id}} - {{program_type}}
          start_time: '2026-04-01T09:00:00Z'
          duration: '45'
      - name: assign-care-manager
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'DM assignment: {{program_type}} - {{member_id}}'
          category: disease_management
          assigned_group: DM_Care_Managers
          description: 'Assign care manager for member {{member_id}} in {{program_type}} program. Enrollment: {{create-enrollment.id}}. Assessment: {{schedule-assessment.join_url}}.'
      - name: notify-dm-team
        type: call
        call: msteams.post-message
        with:
          team_id: dm-team
          channel_id: enrollments
          message: 'Member {{member_id}} enrolled in {{program_type}} DM program. Case: {{assign-care-manager.number}}. Assessment: {{schedule-assessment.join_url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: dm-enrollments
      path: /sobjects/DM_Enrollment__c
      operations:
      - name: create-dm-enrollment
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → disease-management-program-enrollment.yml

Retrieves the current status of an IT incident from ServiceNow by incident number, returning priority, assigned group, state, and resolution notes for infrastructure support tracking.

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

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 11
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-11.yml

Runs population health analytics by querying Snowflake for chronic condition prevalence, refreshing Power BI dashboards, and distributing insights to clinical leadership via Microsoft Teams and SharePoint.

naftiko: '0.5'
info:
  label: Population Health Analytics Pipeline
  description: Runs population health analytics by querying Snowflake for chronic condition prevalence, refreshing Power BI dashboards, and distributing insights to clinical leadership via Microsoft Teams and SharePoint.
  tags:
  - population-health
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: population-health
    port: 8080
    tools:
    - name: run-population-analytics
      description: Given a region and condition type, run population health analytics and distribute results.
      inputParameters:
      - name: region
        in: body
        type: string
        description: The geographic region for analysis.
      - name: condition_type
        in: body
        type: string
        description: The chronic condition type (e.g., diabetes, hypertension).
      steps:
      - name: query-population-data
        type: call
        call: snowflake.execute-query
        with:
          region: '{{region}}'
          condition_type: '{{condition_type}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: population-health-dataset
      - name: upload-insights
        type: call
        call: sharepoint.create-folder
        with:
          site_id: clinical_site
          folder_path: PopulationHealth/{{region}}/{{condition_type}}
      - name: notify-leadership
        type: call
        call: msteams.post-message
        with:
          team_id: clinical-leadership
          channel_id: population-health
          message: 'Population health report for {{condition_type}} in {{region}}: {{query-population-data.rowCount}} members affected. Dashboard refreshed. Report: {{upload-insights.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://molina.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
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → population-health-analytics-pipeline.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 13
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-13.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 12
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-12.yml

Creates an IT change request in ServiceNow, attaches implementation documentation from Confluence, creates a Jira tracking task, and notifies the change advisory board via Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Change Request Pipeline
  description: Creates an IT change request in ServiceNow, attaches implementation documentation from Confluence, creates a Jira tracking task, and notifies the change advisory board via Microsoft Teams.
  tags:
  - it-service
  - change-management
  - servicenow
  - confluence
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Given change details, create a ServiceNow change request, link Confluence docs, create a Jira task, and notify the CAB.
      inputParameters:
      - name: change_summary
        in: body
        type: string
        description: Summary of the proposed change.
      - name: change_type
        in: body
        type: string
        description: Type of change (standard, normal, emergency).
      - name: implementation_doc_id
        in: body
        type: string
        description: The Confluence page ID with implementation details.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: '{{change_summary}}'
          type: '{{change_type}}'
      - name: get-doc
        type: call
        call: confluence.get-page
        with:
          page_id: '{{implementation_doc_id}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: ITOPS
          summary: 'Change implementation: {{change_summary}}'
          description: 'ServiceNow change: {{create-change.number}}. Docs: {{get-doc._links.webui}}.'
          issue_type: Task
      - name: notify-cab
        type: call
        call: msteams.post-message
        with:
          team_id: it-operations-team
          channel_id: change-advisory
          message: 'New {{change_type}} change request {{create-change.number}}: {{change_summary}}. Jira: {{create-task.key}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://molina.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: jira
    baseUri: https://molina.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → it-change-request-pipeline.yml

Queries HEDIS measure data from Snowflake, generates a compliance report in Power BI, uploads the summary to SharePoint, and notifies the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: HEDIS Quality Measure Reporting
  description: Queries HEDIS measure data from Snowflake, generates a compliance report in Power BI, uploads the summary to SharePoint, and notifies the quality team via Microsoft Teams.
  tags:
  - quality
  - hedis
  - snowflake
  - power-bi
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-reporting
    port: 8080
    tools:
    - name: generate-hedis-report
      description: Given a reporting period, pull HEDIS data, refresh the Power BI dashboard, upload summary docs, and notify quality team.
      inputParameters:
      - name: measure_year
        in: body
        type: string
        description: The HEDIS measurement year (e.g., 2025).
      - name: measure_set
        in: body
        type: string
        description: The HEDIS measure set (e.g., comprehensive_diabetes_care).
      steps:
      - name: query-hedis-data
        type: call
        call: snowflake.execute-query
        with:
          measure_year: '{{measure_year}}'
          measure_set: '{{measure_set}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: hedis-quality-dataset
      - name: upload-summary
        type: call
        call: sharepoint.create-folder
        with:
          site_id: quality_site
          folder_path: HEDIS/{{measure_year}}/{{measure_set}}
      - name: notify-quality-team
        type: call
        call: msteams.post-message
        with:
          team_id: quality-team
          channel_id: hedis
          message: 'HEDIS report for {{measure_set}} ({{measure_year}}) generated. {{query-hedis-data.rowCount}} records. Dashboard refreshed. Docs: {{upload-summary.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://molina.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
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → hedis-quality-measure-reporting.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 9
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-9.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 8
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-8.yml

Coordinates behavioral health services by pulling member clinical data from Salesforce, creating a care plan in ServiceNow, scheduling a telehealth session via Zoom, and notifying the behavioral health team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Behavioral Health Coordination Pipeline
  description: Coordinates behavioral health services by pulling member clinical data from Salesforce, creating a care plan in ServiceNow, scheduling a telehealth session via Zoom, and notifying the behavioral health team via Microsoft Teams.
  tags:
  - behavioral-health
  - care-coordination
  - salesforce
  - servicenow
  - zoom
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: behavioral-health
    port: 8080
    tools:
    - name: coordinate-behavioral-health
      description: Given a member ID and service type, create a care plan, schedule a telehealth session, and notify the team.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: service_type
        in: body
        type: string
        description: The behavioral health service type.
      - name: preferred_date
        in: body
        type: string
        description: Preferred appointment date in YYYY-MM-DD format.
      steps:
      - name: get-clinical-data
        type: call
        call: salesforce.get-clinical-record
        with:
          member_id: '{{member_id}}'
      - name: create-care-plan
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Behavioral health care plan: {{member_id}}'
          category: behavioral_health
          description: 'Service type: {{service_type}}. Diagnosis: {{get-clinical-data.Primary_Diagnosis__c}}.'
      - name: schedule-telehealth
        type: call
        call: zoom.create-meeting
        with:
          topic: Behavioral Health Session - {{member_id}}
          start_time: '{{preferred_date}}T10:00:00Z'
          duration: '60'
      - name: notify-team
        type: call
        call: msteams.post-message
        with:
          team_id: behavioral-health-team
          channel_id: care-plans
          message: 'New care plan {{create-care-plan.number}} for member {{member_id}}. Telehealth scheduled: {{schedule-telehealth.join_url}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: clinical-records
      path: /query/?q=SELECT+Primary_Diagnosis__c,Chronic_Conditions__c+FROM+Clinical_Record__c+WHERE+Member_ID__c='{{member_id}}'
      inputParameters:
      - name: member_id
        in: query
      operations:
      - name: get-clinical-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/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: 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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → behavioral-health-coordination-pipeline.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 15
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-15.yml

Performs utilization review by pulling clinical data from Salesforce Health Cloud, checking authorization rules, creating a review case in ServiceNow, and notifying the UM nurse team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Utilization Review Orchestrator
  description: Performs utilization review by pulling clinical data from Salesforce Health Cloud, checking authorization rules, creating a review case in ServiceNow, and notifying the UM nurse team via Microsoft Teams.
  tags:
  - utilization-management
  - care-coordination
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: utilization-review
    port: 8080
    tools:
    - name: initiate-utilization-review
      description: Given a member ID and service request, pull clinical data, evaluate authorization, and route for nurse review.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: service_code
        in: body
        type: string
        description: The CPT or HCPCS service code.
      - name: requesting_provider_npi
        in: body
        type: string
        description: The NPI of the requesting provider.
      steps:
      - name: get-clinical-data
        type: call
        call: salesforce.get-clinical-record
        with:
          member_id: '{{member_id}}'
      - name: create-review-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'UM Review: {{service_code}} for member {{member_id}}'
          category: utilization_management
          assigned_group: UM_Nurse_Review
          description: 'Service {{service_code}} requested by NPI {{requesting_provider_npi}} for member {{member_id}}. Diagnosis: {{get-clinical-data.Primary_Diagnosis__c}}.'
      - name: notify-um-team
        type: call
        call: msteams.post-message
        with:
          team_id: um-team
          channel_id: reviews
          message: New UM review case {{create-review-case.number}} for member {{member_id}}, service {{service_code}}.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: clinical-records
      path: /query/?q=SELECT+Primary_Diagnosis__c,Chronic_Conditions__c+FROM+Clinical_Record__c+WHERE+Member_ID__c='{{member_id}}'
      inputParameters:
      - name: member_id
        in: query
      operations:
      - name: get-clinical-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → utilization-review-orchestrator.yml

On new member enrollment, creates a member record in Salesforce, provisions an eligibility entry in the claims system via Oracle EBS, sends a welcome packet notification via Microsoft Teams, and logs the enrollment in ServiceNow.

naftiko: '0.5'
info:
  label: New Member Enrollment Orchestrator
  description: On new member enrollment, creates a member record in Salesforce, provisions an eligibility entry in the claims system via Oracle EBS, sends a welcome packet notification via Microsoft Teams, and logs the enrollment in ServiceNow.
  tags:
  - enrollment
  - care-coordination
  - salesforce
  - oracle-e-business-suite
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: enrollment
    port: 8080
    tools:
    - name: enroll-new-member
      description: Given member demographics, create the member in Salesforce, provision eligibility in Oracle EBS, notify the care team via Teams, and log a ServiceNow ticket.
      inputParameters:
      - name: first_name
        in: body
        type: string
        description: Member first name.
      - name: last_name
        in: body
        type: string
        description: Member last name.
      - name: date_of_birth
        in: body
        type: string
        description: Date of birth in YYYY-MM-DD format.
      - name: plan_id
        in: body
        type: string
        description: The plan ID to enroll the member in.
      steps:
      - name: create-member
        type: call
        call: salesforce.create-member
        with:
          first_name: '{{first_name}}'
          last_name: '{{last_name}}'
          date_of_birth: '{{date_of_birth}}'
          plan_id: '{{plan_id}}'
      - name: provision-eligibility
        type: call
        call: oracle-ebs.create-eligibility
        with:
          member_id: '{{create-member.id}}'
          plan_id: '{{plan_id}}'
          effective_date: '{{date_of_birth}}'
      - name: notify-care-team
        type: call
        call: msteams.post-message
        with:
          team_id: care-coordination-team
          channel_id: new-enrollments
          message: 'New member enrolled: {{first_name}} {{last_name}} ({{create-member.id}}) on plan {{plan_id}}.'
      - name: log-enrollment
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New enrollment: {{first_name}} {{last_name}}'
          category: enrollment
          description: 'Member {{create-member.id}} enrolled in plan {{plan_id}}. Eligibility provisioned: {{provision-eligibility.status}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /sobjects/Member__c
      operations:
      - name: create-member
        method: POST
  - type: http
    namespace: oracle-ebs
    baseUri: https://molina-ebs.oraclecloud.com/webservices/rest
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: eligibility
      path: /eligibility
      operations:
      - name: create-eligibility
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → new-member-enrollment-orchestrator.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 14
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-14.yml

Retrieves member financial account details from Oracle E-Business Suite including balance, payment history, and account status.

naftiko: '0.5'
info:
  label: Oracle E-Business Suite Member Account
  description: Retrieves member financial account details from Oracle E-Business Suite including balance, payment history, and account status.
  tags:
  - finance
  - oracle-e-business-suite
  - member-accounts
capability:
  exposes:
  - type: mcp
    namespace: member-finance
    port: 8080
    tools:
    - name: get-member-account
      description: Look up a member financial account in Oracle EBS by account number.
      inputParameters:
      - name: account_number
        in: body
        type: string
        description: The Oracle EBS account number.
      call: oracle-ebs.get-account
      with:
        account_number: '{{account_number}}'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://molina-ebs.oraclecloud.com/webservices/rest
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: accounts
      path: /accounts/{{account_number}}
      inputParameters:
      - name: account_number
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → oracle-e-business-suite-member-account.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 6
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-6.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 7
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-7.yml

Searches the Salesforce provider directory by specialty and zip code to return in-network providers with addresses and phone numbers.

naftiko: '0.5'
info:
  label: Provider Directory Search
  description: Searches the Salesforce provider directory by specialty and zip code to return in-network providers with addresses and phone numbers.
  tags:
  - provider
  - directory
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: provider-directory
    port: 8080
    tools:
    - name: search-providers
      description: Search for in-network providers by specialty and zip code. Returns provider name, address, phone, and accepting-new-patients status.
      inputParameters:
      - name: specialty
        in: body
        type: string
        description: The medical specialty to search for.
      - name: zip_code
        in: body
        type: string
        description: The zip code for geographic filtering.
      call: salesforce.query-providers
      with:
        specialty: '{{specialty}}'
        zip_code: '{{zip_code}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: providers
      path: /query/?q=SELECT+Name,Address__c,Phone__c,Accepting_New_Patients__c+FROM+Provider__c+WHERE+Specialty__c='{{specialty}}'+AND+Zip_Code__c='{{zip_code}}'
      inputParameters:
      - name: specialty
        in: query
      - name: zip_code
        in: query
      operations:
      - name: query-providers
        method: GET
Open in Framework → View in Fleet → provider-directory-search.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 5
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-5.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 4
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-4.yml

Queries a member's eligibility status by member ID from the claims management system and returns coverage details, plan type, and effective dates.

naftiko: '0.5'
info:
  label: Member Eligibility Lookup
  description: Queries a member's eligibility status by member ID from the claims management system and returns coverage details, plan type, and effective dates.
  tags:
  - claims
  - eligibility
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: member-eligibility
    port: 8080
    tools:
    - name: get-member-eligibility
      description: Look up a Molina member's eligibility by member ID. Returns plan type, coverage status, effective dates, and copay details.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member identification number.
      call: salesforce.get-member
      with:
        member_id: '{{member_id}}'
      outputParameters:
      - name: plan_type
        type: string
        mapping: $.records[0].Plan_Type__c
      - name: coverage_status
        type: string
        mapping: $.records[0].Coverage_Status__c
      - name: effective_date
        type: string
        mapping: $.records[0].Effective_Date__c
      - name: copay
        type: string
        mapping: $.records[0].Copay__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: members
      path: /query/?q=SELECT+Id,Plan_Type__c,Coverage_Status__c,Effective_Date__c,Copay__c+FROM+Member__c+WHERE+Member_ID__c='{{member_id}}'
      inputParameters:
      - name: member_id
        in: query
      operations:
      - name: get-member
        method: GET
Open in Framework → View in Fleet → member-eligibility-lookup.yml

Launches a care gap outreach campaign by querying overdue preventive care members from Salesforce, creating a Jira project to track outreach tasks, and notifying the outreach team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Care Gap Outreach Campaign
  description: Launches a care gap outreach campaign by querying overdue preventive care members from Salesforce, creating a Jira project to track outreach tasks, and notifying the outreach team via Microsoft Teams.
  tags:
  - care-gaps
  - outreach
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: care-gap-outreach
    port: 8080
    tools:
    - name: launch-care-gap-campaign
      description: Given a care measure and region, query overdue members, create Jira tracking, and notify the outreach team.
      inputParameters:
      - name: care_measure
        in: body
        type: string
        description: The HEDIS care measure (e.g., breast cancer screening, A1C testing, well-child visit).
      - name: region
        in: body
        type: string
        description: The geographic region to target.
      steps:
      - name: query-overdue-members
        type: call
        call: salesforce.query-care-gaps
        with:
          care_measure: '{{care_measure}}'
          region: '{{region}}'
      - name: create-campaign-project
        type: call
        call: jira.create-issue
        with:
          project: OUTREACH
          summary: 'Care Gap Campaign: {{care_measure}} - {{region}}'
          description: Outreach campaign for {{care_measure}} in {{region}}. {{query-overdue-members.totalSize}} members identified.
          issuetype: Epic
      - name: notify-outreach-team
        type: call
        call: msteams.post-message
        with:
          team_id: outreach-team
          channel_id: campaigns
          message: 'Care gap campaign launched: {{care_measure}} in {{region}}. {{query-overdue-members.totalSize}} members identified. Jira: {{create-campaign-project.key}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: care-gaps
      path: /query/?q=SELECT+Id,Member_ID__c,Care_Measure__c,Last_Service_Date__c+FROM+Care_Gap__c+WHERE+Care_Measure__c='{{care_measure}}'+AND+Region__c='{{region}}'+AND+Status__c='Open'
      inputParameters:
      - name: care_measure
        in: query
      - name: region
        in: query
      operations:
      - name: query-care-gaps
        method: GET
  - type: http
    namespace: jira
    baseUri: https://molina.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → care-gap-outreach-campaign.yml

Identifies members with care gaps from Salesforce Health Cloud, generates an outreach list, sends personalized reminders via Microsoft Teams, and logs outreach activities in ServiceNow.

naftiko: '0.5'
info:
  label: Care Gap Outreach Orchestrator
  description: Identifies members with care gaps from Salesforce Health Cloud, generates an outreach list, sends personalized reminders via Microsoft Teams, and logs outreach activities in ServiceNow.
  tags:
  - care-coordination
  - care-gaps
  - salesforce
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: care-gaps
    port: 8080
    tools:
    - name: trigger-care-gap-outreach
      description: Given a care gap type and date range, query members with open gaps, send outreach notifications, and log activities.
      inputParameters:
      - name: gap_type
        in: body
        type: string
        description: The type of care gap (e.g., annual_wellness, diabetes_screening).
      - name: region
        in: body
        type: string
        description: The geographic region to target.
      steps:
      - name: find-members
        type: call
        call: salesforce.query-care-gaps
        with:
          gap_type: '{{gap_type}}'
          region: '{{region}}'
      - name: notify-coordinators
        type: call
        call: msteams.post-message
        with:
          team_id: care-coordination-team
          channel_id: care-gaps
          message: 'Care gap outreach for {{gap_type}} in {{region}}: {{find-members.totalSize}} members identified. Please begin outreach.'
      - name: log-outreach
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Care gap outreach: {{gap_type}} - {{region}}'
          category: care_coordination
          description: Outreach initiated for {{find-members.totalSize}} members with {{gap_type}} gaps in {{region}}.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: care-gaps
      path: /query/?q=SELECT+Member_ID__c,Name,Gap_Type__c+FROM+Care_Gap__c+WHERE+Gap_Type__c='{{gap_type}}'+AND+Region__c='{{region}}'+AND+Status__c='Open'
      inputParameters:
      - name: gap_type
        in: query
      - name: region
        in: query
      operations:
      - name: query-care-gaps
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molina.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → care-gap-outreach-orchestrator.yml

Triggers a Power BI dataset refresh for HEDIS quality measure dashboards used by the quality improvement team to track managed care performance metrics.

naftiko: '0.5'
info:
  label: HEDIS Quality Measure Dashboard Refresh
  description: Triggers a Power BI dataset refresh for HEDIS quality measure dashboards used by the quality improvement team to track managed care performance metrics.
  tags:
  - quality
  - hedis
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: quality-dashboards
    port: 8080
    tools:
    - name: refresh-hedis-dashboard
      description: Trigger a Power BI dataset refresh for a HEDIS quality measure dashboard.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the HEDIS dashboard.
      call: powerbi.refresh-dataset
      with:
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → hedis-quality-measure-dashboard-refresh.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 1
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-1.yml

Prepares regulatory filings by querying compliance data from Snowflake, generating filing documents in SharePoint, creating a review task in Jira, and notifying the compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Filing Preparation Workflow
  description: Prepares regulatory filings by querying compliance data from Snowflake, generating filing documents in SharePoint, creating a review task in Jira, and notifying the compliance team via Microsoft Teams.
  tags:
  - compliance
  - regulatory
  - snowflake
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-filing
    port: 8080
    tools:
    - name: prepare-regulatory-filing
      description: Given a filing type and period, compile data, generate documents, and route for review.
      inputParameters:
      - name: filing_type
        in: body
        type: string
        description: The regulatory filing type (e.g., MLR, encounter_data).
      - name: reporting_period
        in: body
        type: string
        description: The reporting period (e.g., Q1-2026).
      steps:
      - name: query-filing-data
        type: call
        call: snowflake.execute-query
        with:
          filing_type: '{{filing_type}}'
          reporting_period: '{{reporting_period}}'
      - name: create-filing-docs
        type: call
        call: sharepoint.create-folder
        with:
          site_id: regulatory_site
          folder_path: Filings/{{filing_type}}/{{reporting_period}}
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: COMP
          summary: 'Regulatory filing review: {{filing_type}} - {{reporting_period}}'
          description: 'Filing data compiled. {{query-filing-data.rowCount}} records. Docs: {{create-filing-docs.webUrl}}.'
          issue_type: Task
      - name: notify-compliance
        type: call
        call: msteams.post-message
        with:
          team_id: compliance-team
          channel_id: regulatory
          message: 'Regulatory filing {{filing_type}} for {{reporting_period}} ready for review. Jira: {{create-review-task.key}}. Docs: {{create-filing-docs.webUrl}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://molina.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: jira
    baseUri: https://molina.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → regulatory-filing-preparation-workflow.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 3
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-3.yml

Retrieves operational data for Molina Healthcare healthcare workflows.

naftiko: '0.5'
info:
  label: Molina Healthcare Data Lookup 2
  description: Retrieves operational data for Molina Healthcare healthcare workflows.
  tags:
  - healthcare
  - operations
capability:
  exposes:
  - type: mcp
    namespace: molinahealthcare-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Molina Healthcare healthcare workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: molinahealthcare-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: molinahealthcare-data
    baseUri: https://api.molinahealthcare.com/data/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → molina-healthcare-data-lookup-2.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 34
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-34
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://molinahealthcare.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-34.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 20
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-20
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-20
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_20
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://molinahealthcare-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-20.yml

Generates a claims trend analysis by querying Snowflake for month-over-month claim volumes, denial rates, and average processing times, then refreshes the Power BI dashboard and notifies leadership.

naftiko: '0.5'
info:
  label: Claims Analytics Trend Report
  description: Generates a claims trend analysis by querying Snowflake for month-over-month claim volumes, denial rates, and average processing times, then refreshes the Power BI dashboard and notifies leadership.
  tags:
  - claims
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: claims-trends
    port: 8080
    tools:
    - name: generate-claims-trend
      description: Given a date range, generate claims trend analytics and refresh the dashboard.
      inputParameters:
      - name: start_month
        in: body
        type: string
        description: Start month in YYYY-MM format.
      - name: end_month
        in: body
        type: string
        description: End month in YYYY-MM format.
      steps:
      - name: query-trends
        type: call
        call: snowflake.execute-query
        with:
          start_month: '{{start_month}}'
          end_month: '{{end_month}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: claims-trends-dataset
      - name: notify-leadership
        type: call
        call: msteams.post-message
        with:
          team_id: executive-team
          channel_id: claims-insights
          message: Claims trend report for {{start_month}} to {{end_month}} generated. {{query-trends.rowCount}} data points analyzed. Dashboard refreshed.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://molina.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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → claims-analytics-trend-report.yml

Fetches an employee's profile from Workday by worker ID, including department, manager, hire date, and job title.

naftiko: '0.5'
info:
  label: Workday Employee Profile
  description: Fetches an employee's profile from Workday by worker ID, including department, manager, hire date, and job title.
  tags:
  - hr
  - workday
  - employee
capability:
  exposes:
  - type: mcp
    namespace: hr-employee
    port: 8080
    tools:
    - name: get-employee-profile
      description: Retrieve a Workday employee profile by worker ID. Returns name, title, department, manager, and hire date.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-worker
      with:
        worker_id: '{{worker_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-profile.yml

Queries provider network adequacy data from Oracle for a given county and specialty, returning provider-to-member ratios and distance-to-care metrics used in regulatory reporting.

naftiko: '0.5'
info:
  label: Network Adequacy Report Query
  description: Queries provider network adequacy data from Oracle for a given county and specialty, returning provider-to-member ratios and distance-to-care metrics used in regulatory reporting.
  tags:
  - network
  - adequacy
  - oracle
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: network-adequacy
    port: 8080
    tools:
    - name: query-network-adequacy
      description: Query network adequacy data by county and specialty. Returns provider-to-member ratio and average distance to care.
      inputParameters:
      - name: county
        in: body
        type: string
        description: The county name.
      - name: specialty
        in: body
        type: string
        description: The medical specialty.
      call: oracle.query-adequacy
      with:
        county: '{{county}}'
        specialty: '{{specialty}}'
      outputParameters:
      - name: provider_member_ratio
        type: string
        mapping: $.items[0].PROVIDER_MEMBER_RATIO
      - name: avg_distance_miles
        type: string
        mapping: $.items[0].AVG_DISTANCE_MILES
      - name: total_providers
        type: string
        mapping: $.items[0].TOTAL_PROVIDERS
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://molina-ords.oraclecloud.com/ords/network
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: adequacy-metrics
      path: /adequacy?county={{county}}&specialty={{specialty}}
      inputParameters:
      - name: county
        in: query
      - name: specialty
        in: query
      operations:
      - name: query-adequacy
        method: GET
Open in Framework → View in Fleet → network-adequacy-report-query.yml

Retrieves the current status of a healthcare claim by claim number, including adjudication state, payment amount, and denial reason if applicable.

naftiko: '0.5'
info:
  label: Claims Status Checker
  description: Retrieves the current status of a healthcare claim by claim number, including adjudication state, payment amount, and denial reason if applicable.
  tags:
  - claims
  - claims-processing
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: claims-status
    port: 8080
    tools:
    - name: get-claim-status
      description: Look up a Molina claim by claim number. Returns adjudication status, billed amount, allowed amount, paid amount, and denial reason.
      inputParameters:
      - name: claim_number
        in: body
        type: string
        description: The claim number to look up.
      call: salesforce.get-claim
      with:
        claim_number: '{{claim_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.records[0].Adjudication_Status__c
      - name: billed_amount
        type: string
        mapping: $.records[0].Billed_Amount__c
      - name: paid_amount
        type: string
        mapping: $.records[0].Paid_Amount__c
      - name: denial_reason
        type: string
        mapping: $.records[0].Denial_Reason__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: claims
      path: /query/?q=SELECT+Id,Adjudication_Status__c,Billed_Amount__c,Paid_Amount__c,Denial_Reason__c+FROM+Claim__c+WHERE+Claim_Number__c='{{claim_number}}'
      inputParameters:
      - name: claim_number
        in: query
      operations:
      - name: get-claim
        method: GET
Open in Framework → View in Fleet → claims-status-checker.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 21
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-21
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-21.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 35
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-35
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-35
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 35 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-35.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 1
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-1
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://molinahealthcare.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-1.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 3
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-3
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#healthcare'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-3.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 23
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-23
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-23
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 23 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-23.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 37
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-37
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-37
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-37
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://molinahealthcare.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-37.yml

Checks the Medicaid redetermination status for a member, returning renewal deadline, submitted documentation, and current review state.

naftiko: '0.5'
info:
  label: Medicaid Redetermination Status
  description: Checks the Medicaid redetermination status for a member, returning renewal deadline, submitted documentation, and current review state.
  tags:
  - medicaid
  - redetermination
  - eligibility
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: medicaid-redetermination
    port: 8080
    tools:
    - name: get-redetermination-status
      description: Look up Medicaid redetermination status for a member. Returns renewal deadline, documents received, and review state.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member identification number.
      call: salesforce.get-redetermination
      with:
        member_id: '{{member_id}}'
      outputParameters:
      - name: renewal_deadline
        type: string
        mapping: $.records[0].Renewal_Deadline__c
      - name: documents_received
        type: string
        mapping: $.records[0].Documents_Received__c
      - name: review_state
        type: string
        mapping: $.records[0].Review_State__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: redeterminations
      path: /query/?q=SELECT+Renewal_Deadline__c,Documents_Received__c,Review_State__c+FROM+Redetermination__c+WHERE+Member_ID__c='{{member_id}}'
      inputParameters:
      - name: member_id
        in: query
      operations:
      - name: get-redetermination
        method: GET
Open in Framework → View in Fleet → medicaid-redetermination-status.yml

Verifies a member's pharmacy benefits by member ID, returning formulary tier, copay amounts, and mail-order eligibility from the pharmacy benefit management system.

naftiko: '0.5'
info:
  label: Pharmacy Benefits Verification
  description: Verifies a member's pharmacy benefits by member ID, returning formulary tier, copay amounts, and mail-order eligibility from the pharmacy benefit management system.
  tags:
  - pharmacy
  - benefits
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-benefits
    port: 8080
    tools:
    - name: verify-pharmacy-benefits
      description: Verify pharmacy benefits for a Molina member. Returns formulary tier, copay, and mail-order eligibility.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member identification number.
      call: salesforce.get-pharmacy-benefits
      with:
        member_id: '{{member_id}}'
      outputParameters:
      - name: formulary_tier
        type: string
        mapping: $.records[0].Formulary_Tier__c
      - name: copay_amount
        type: string
        mapping: $.records[0].Copay_Amount__c
      - name: mail_order_eligible
        type: string
        mapping: $.records[0].Mail_Order_Eligible__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: pharmacy-benefits
      path: /query/?q=SELECT+Formulary_Tier__c,Copay_Amount__c,Mail_Order_Eligible__c+FROM+Pharmacy_Benefit__c+WHERE+Member_ID__c='{{member_id}}'
      inputParameters:
      - name: member_id
        in: query
      operations:
      - name: get-pharmacy-benefits
        method: GET
Open in Framework → View in Fleet → pharmacy-benefits-verification.yml

Executes a parameterized query against the Snowflake claims data warehouse to retrieve aggregate claim counts by status for a given date range.

naftiko: '0.5'
info:
  label: Snowflake Claims Data Query
  description: Executes a parameterized query against the Snowflake claims data warehouse to retrieve aggregate claim counts by status for a given date range.
  tags:
  - data-warehouse
  - snowflake
  - claims
capability:
  exposes:
  - type: mcp
    namespace: claims-warehouse
    port: 8080
    tools:
    - name: query-claims-summary
      description: Query Snowflake for aggregate claim counts by status 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: snowflake.execute-query
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://molina.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-claims-data-query.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 36
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-36
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-36
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: healthcare.workflow_36
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-36
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-36.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 22
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-22
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://molinahealthcare.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-22.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 2
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-2
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molinahealthcare.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-2.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 6
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-6
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: HEAL
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://molinahealthcare.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-6.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 26
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-26
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://molinahealthcare.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-26.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 32
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-32
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-32
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_32
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://molinahealthcare-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-32.yml

Manages specialist referrals by creating the referral in Salesforce, validating network status of the specialist, sending referral details to the specialist via Microsoft Outlook, and notifying the care coordinator via Microsoft Teams.

naftiko: '0.5'
info:
  label: Referral Management Orchestrator
  description: Manages specialist referrals by creating the referral in Salesforce, validating network status of the specialist, sending referral details to the specialist via Microsoft Outlook, and notifying the care coordinator via Microsoft Teams.
  tags:
  - care-coordination
  - referrals
  - salesforce
  - microsoft-outlook
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: referral-mgmt
    port: 8080
    tools:
    - name: create-referral
      description: Given member ID, referring provider, and specialist NPI, create and route a specialist referral.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: The Molina member ID.
      - name: specialist_npi
        in: body
        type: string
        description: The specialist provider NPI.
      - name: referral_reason
        in: body
        type: string
        description: The clinical reason for the referral.
      - name: referring_provider_npi
        in: body
        type: string
        description: The referring provider NPI.
      steps:
      - name: create-referral-record
        type: call
        call: salesforce.create-referral
        with:
          member_id: '{{member_id}}'
          specialist_npi: '{{specialist_npi}}'
          referring_provider_npi: '{{referring_provider_npi}}'
          reason: '{{referral_reason}}'
      - name: send-to-specialist
        type: call
        call: outlook.send-mail
        with:
          recipient: '{{specialist_npi}}@providers.molina.com'
          subject: 'New Referral: {{create-referral-record.id}}'
          body: 'Referral for member {{member_id}} from NPI {{referring_provider_npi}}. Reason: {{referral_reason}}.'
      - name: notify-coordinator
        type: call
        call: msteams.post-message
        with:
          team_id: care-coordination-team
          channel_id: referrals
          message: 'New referral {{create-referral-record.id}} for member {{member_id}} to specialist {{specialist_npi}}. Reason: {{referral_reason}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: referrals
      path: /sobjects/Referral__c
      operations:
      - name: create-referral
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/referrals@molina.com/sendMail
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → referral-management-orchestrator.yml

Analyzes provider network adequacy by querying provider data from Salesforce, running geographic coverage analysis in Snowflake, generating a compliance report in SharePoint, and notifying the network team.

naftiko: '0.5'
info:
  label: Network Adequacy Analysis Pipeline
  description: Analyzes provider network adequacy by querying provider data from Salesforce, running geographic coverage analysis in Snowflake, generating a compliance report in SharePoint, and notifying the network team.
  tags:
  - provider
  - network-adequacy
  - salesforce
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: network-adequacy
    port: 8080
    tools:
    - name: analyze-network-adequacy
      description: Given a region and specialty, analyze network adequacy and generate a compliance report.
      inputParameters:
      - name: region
        in: body
        type: string
        description: The geographic region to analyze.
      - name: specialty
        in: body
        type: string
        description: The provider specialty to assess.
      steps:
      - name: get-provider-counts
        type: call
        call: salesforce.query-providers
        with:
          specialty: '{{specialty}}'
          region: '{{region}}'
      - name: run-coverage-analysis
        type: call
        call: snowflake.execute-query
        with:
          region: '{{region}}'
          specialty: '{{specialty}}'
      - name: create-report
        type: call
        call: sharepoint.create-folder
        with:
          site_id: network_site
          folder_path: Adequacy/{{region}}/{{specialty}}
      - name: notify-network-team
        type: call
        call: msteams.post-message
        with:
          team_id: provider-network-team
          channel_id: adequacy
          message: 'Network adequacy analysis for {{specialty}} in {{region}}: {{get-provider-counts.totalSize}} providers. Coverage score: {{run-coverage-analysis.coverage_score}}. Report: {{create-report.webUrl}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://molina.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: providers
      path: /query/?q=SELECT+COUNT(Id)+FROM+Provider__c+WHERE+Specialty__c='{{specialty}}'+AND+Region__c='{{region}}'
      inputParameters:
      - name: specialty
        in: query
      - name: region
        in: query
      operations:
      - name: query-providers
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://molina.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: folders
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → network-adequacy-analysis-pipeline.yml

Retrieves a Jira issue by key, returning summary, status, assignee, and priority for IT project tracking.

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

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 33
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-33
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-33.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 27
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-27
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#healthcare'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-27.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 7
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-7
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: healthcare
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-7.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 5
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-5
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-5
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_5
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-5.yml

Triggers a dataset refresh in Power BI for the claims analytics dashboard so leadership can view current adjudication metrics.

naftiko: '0.5'
info:
  label: Power BI Claims Dashboard Refresh
  description: Triggers a dataset refresh in Power BI for the claims analytics dashboard so leadership can view current adjudication metrics.
  tags:
  - analytics
  - power-bi
  - claims
capability:
  exposes:
  - type: mcp
    namespace: claims-analytics
    port: 8080
    tools:
    - name: refresh-claims-dashboard
      description: Trigger a Power BI dataset refresh for the claims analytics workspace.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      call: powerbi.refresh-dataset
      with:
        dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-claims-dashboard-refresh.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 19
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-19
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: healthcare
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-19.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 31
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-31
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: healthcare
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-31.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 25
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-25
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://molinahealthcare.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-25.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 24
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-24
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: healthcare.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-24.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 30
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-30
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: HEAL
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://molinahealthcare.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-30.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 18
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-18
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: HEAL
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://molinahealthcare.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-18.yml

Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.

naftiko: '0.5'
info:
  label: Molina Healthcare Workflow 4
  description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
  tags:
  - healthcare
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: molina-healthcare-workflow-4
      description: Orchestrates healthcare operations including data retrieval, processing, and automated notification for Molina Healthcare.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: molinahealthcare-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: HEALTH
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: molinahealthcare-ops
    baseUri: https://api.molinahealthcare.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.molina_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://molinahealthcare.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → molina-healthcare-workflow-4.yml

Generates a financial period close checklist in SAP, verifies all journal entries are posted, and sends the period close confirmation to the CFO team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP S/4HANA Financial Period Close Checklist
  description: Generates a financial period close checklist in SAP, verifies all journal entries are posted, and sends the period close confirmation to the CFO team via Microsoft Teams.
  tags:
  - finance
  - sap
  - period-close
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: period-close
    port: 8080
    tools:
    - name: run-period-close-checklist
      description: Verify SAP journal entry completeness for a fiscal period, fetch unposted entries count, and send the period close status summary to the CFO Microsoft Teams channel. Use at month-end and quarter-end close.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code for the entity (e.g., '1000' for Novartis AG).
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year in YYYY format.
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period number (01-12).
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the CFO finance team.
      steps:
      - name: get-gl-entries
        type: call
        call: sap.get-period-gl-entries
        with:
          company_code: '{{company_code}}'
          fiscal_year: '{{fiscal_year}}'
          fiscal_period: '{{fiscal_period}}'
      - name: notify-cfo-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Period Close Status: {{company_code}} | FY{{fiscal_year}} Period {{fiscal_period}} | GL entries retrieved: {{get-gl-entries.count}}. Please verify all postings are complete before closing the period.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://novartis-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entry-items
      path: /A_JournalEntryItem
      inputParameters:
      - name: company_code
        in: query
      - name: fiscal_year
        in: query
      - name: fiscal_period
        in: query
      operations:
      - name: get-period-gl-entries
        method: GET
        outputRawFormat: xml
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-s-4hana-financial-period-close-checklist.yml

When a vendor contract is approved in Veeva Vault, extracts key terms and creates the corresponding SAP contract record for procurement management.

naftiko: '0.5'
info:
  label: Veeva Vault to SAP Contract Sync
  description: When a vendor contract is approved in Veeva Vault, extracts key terms and creates the corresponding SAP contract record for procurement management.
  tags:
  - procurement
  - veeva
  - sap
  - contract-management
capability:
  exposes:
  - type: mcp
    namespace: contract-sync
    port: 8080
    tools:
    - name: sync-contract-to-sap"
      description: Given a Veeva Vault contract document ID, fetch contract metadata (vendor, value, start/end dates) and create the corresponding vendor contract outline agreement in SAP. Use when a signed contract is approved in Veeva Vault.
      inputParameters:
      - name: vault_document_id
        in: body
        type: string
        description: The Veeva Vault document ID of the approved contract.
      - name: sap_company_code
        in: body
        type: string
        description: The SAP company code for the contract (e.g., '1000').
      steps:
      - name: get-contract-metadata
        type: call
        call: veeva.get-document
        with:
          document_id: '{{vault_document_id}}'
      - name: create-sap-contract
        type: call
        call: sap.create-outline-agreement
        with:
          company_code: '{{sap_company_code}}'
          vendor: '{{get-contract-metadata.vendor_number__c}}'
          start_date: '{{get-contract-metadata.contract_start_date__c}}'
          end_date: '{{get-contract-metadata.contract_end_date__c}}'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://novartis.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: sap
    baseUri: https://novartis-s4.sap.com/sap/opu/odata/sap/MM_PUR_CONTRACT_MAINTAIN_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: outline-agreements
      path: /A_OutlineAgreement
      operations:
      - name: create-outline-agreement
        method: POST
Open in Framework → View in Fleet → veeva-vault-to-sap-contract-sync.yml

When an employee's organizational unit changes in Workday, updates the corresponding cost center assignment in SAP to ensure correct financial allocation.

naftiko: '0.5'
info:
  label: Workday Role Change and SAP Cost Center Update
  description: When an employee's organizational unit changes in Workday, updates the corresponding cost center assignment in SAP to ensure correct financial allocation.
  tags:
  - hr
  - finance
  - workday
  - sap
  - cost-center
capability:
  exposes:
  - type: mcp
    namespace: org-finance-sync
    port: 8080
    tools:
    - name: sync-cost-center-change
      description: Given a Workday employee ID and new cost center, update the employee's cost center assignment in SAP to reflect the organizational change. Use when an employee transfers departments or business units.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the transferring employee.
      - name: new_cost_center
        in: body
        type: string
        description: The new SAP cost center code (e.g., 'CC-1042').
      - name: effective_date
        in: body
        type: string
        description: Date the cost center change is effective in ISO 8601 format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: update-sap-cost-center
        type: call
        call: sap.update-employee-cost-center
        with:
          personnel_number: '{{get-employee.sap_personnel_number}}'
          cost_center: '{{new_cost_center}}'
          start_date: '{{effective_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: /novartis/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: sap
    baseUri: https://novartis-s4.sap.com/sap/opu/odata/sap/API_COSTCENTERASSIGNMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-assignments
      path: /A_CostCenterAssignment
      operations:
      - name: update-employee-cost-center
        method: POST
Open in Framework → View in Fleet → workday-role-change-and-sap-cost-center-update.yml

When a ServiceNow P1 incident is unacknowledged past the SLA, escalates to the on-call manager via Microsoft Teams and updates the incident record.

naftiko: '0.5'
info:
  label: ServiceNow P1 Incident Escalation
  description: When a ServiceNow P1 incident is unacknowledged past the SLA, escalates to the on-call manager via Microsoft Teams and updates the incident record.
  tags:
  - itsm
  - servicenow
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: escalate-p1-incident
      description: Given a ServiceNow incident number and on-call manager UPN, update the incident escalation field and notify the manager via Microsoft Teams. Use when a P1 incident breaches its acknowledgment SLA.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., 'INC0012345').
      - name: manager_upn
        in: body
        type: string
        description: The UPN (email) of the on-call escalation manager.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: update-escalation
        type: call
        call: servicenow-update.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          escalation: '1'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_upn}}'
          text: 'ESCALATED: P1 Incident {{incident_number}} — {{get-incident.short_description}}. Please acknowledge immediately.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://novartis.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: servicenow-update
    baseUri: https://novartis.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident-record
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        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: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-p1-incident-escalation.yml

Executes a data quality SQL assertion against the Novartis genomics Snowflake table and posts pass/fail results to the data science Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Genomics Data Quality Assertion
  description: Executes a data quality SQL assertion against the Novartis genomics Snowflake table and posts pass/fail results to the data science Slack channel.
  tags:
  - data
  - analytics
  - snowflake
  - slack
  - data-quality
  - genomics
capability:
  exposes:
  - type: mcp
    namespace: genomics-data-quality
    port: 8080
    tools:
    - name: run-genomics-data-check
      description: Execute a data quality assertion against a Snowflake genomics table and post pass/fail results to Slack. Use before loading genomics data into downstream ML pipelines or research databases.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Snowflake fully-qualified table name (e.g., 'GENOMICS_DB.PUBLIC.VARIANT_CALLS').
      - name: quality_check_sql
        in: body
        type: string
        description: The SQL assertion to execute. Should return 0 rows on pass.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to post quality check results to.
      steps:
      - name: execute-check
        type: call
        call: snowflake.execute-statement
        with:
          statement: '{{quality_check_sql}}'
      - name: post-result
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Genomics Data Quality Check on {{table_name}}: Query executed. Review results in Snowflake — statement handle: {{execute-check.statementHandle}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://novartis.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-statement
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-genomics-data-quality-assertion.yml

When a candidate is moved to Offer stage in Workday Recruiting, generates an offer summary and routes it to the hiring manager via Microsoft Teams for final approval.

naftiko: '0.5'
info:
  label: Workday Recruiting Offer Letter Workflow
  description: When a candidate is moved to Offer stage in Workday Recruiting, generates an offer summary and routes it to the hiring manager via Microsoft Teams for final approval.
  tags:
  - hr
  - recruiting
  - workday
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: offer-management
    port: 8080
    tools:
    - name: route-offer-approval
      description: Given a Workday candidate ID and hiring manager UPN, fetch candidate and role details from Workday and send an offer approval request to the hiring manager via Microsoft Teams. Use when a candidate reaches the offer stage.
      inputParameters:
      - name: candidate_id
        in: body
        type: string
        description: The Workday candidate ID in the offer stage.
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID for the role.
      - name: hiring_manager_upn
        in: body
        type: string
        description: The UPN (email) of the hiring manager for approval.
      steps:
      - name: get-candidate
        type: call
        call: workday.get-candidate
        with:
          candidate_id: '{{candidate_id}}'
      - name: get-requisition
        type: call
        call: workday-req.get-requisition
        with:
          req_id: '{{requisition_id}}'
      - name: notify-hiring-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{hiring_manager_upn}}'
          text: 'Offer Approval Required: Candidate {{get-candidate.full_name}} for role {{get-requisition.jobRequisitionTitle}}. Please review and approve the offer in Workday.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/recruiting/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: candidates
      path: /candidates/{{candidate_id}}
      inputParameters:
      - name: candidate_id
        in: path
      operations:
      - name: get-candidate
        method: GET
  - type: http
    namespace: workday-req
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/recruiting/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /jobRequisitions/{{req_id}}
      inputParameters:
      - name: req_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-recruiting-offer-letter-workflow.yml

Fetches a vendor invoice from SAP, checks for three-way match against the PO, and routes the invoice to the correct approver via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Invoice Processing and Approval
  description: Fetches a vendor invoice from SAP, checks for three-way match against the PO, and routes the invoice to the correct approver via Microsoft Teams.
  tags:
  - finance
  - accounts-payable
  - sap
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: invoice-ops
    port: 8080
    tools:
    - name: process-invoice-approval
      description: Given a SAP invoice number and approver UPN, retrieve invoice and PO match details from SAP and send an approval request to the approver via Microsoft Teams. Use for accounts payable exception handling.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP invoice document number.
      - name: approver_upn
        in: body
        type: string
        description: The UPN (email) of the designated invoice approver.
      steps:
      - name: get-invoice
        type: call
        call: sap.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Invoice Approval Required: {{invoice_number}} | Vendor: {{get-invoice.SupplierName}} | Amount: {{get-invoice.DocumentAmount}} {{get-invoice.DocumentCurrency}} | Please approve in SAP.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://novartis-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('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
        outputRawFormat: xml
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-invoice-processing-and-approval.yml

Uploads a clinical trial data package to Veeva Vault, triggering a document classification workflow and notifying the regulatory team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Data Batch Upload to Veeva Vault
  description: Uploads a clinical trial data package to Veeva Vault, triggering a document classification workflow and notifying the regulatory team via Microsoft Teams.
  tags:
  - regulatory
  - clinical-trials
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: upload-clinical-trial-data
      description: Given a clinical trial ID and data package URL, upload the data package to Veeva Vault under the correct study folder and notify the regulatory affairs team via Microsoft Teams. Use when submitting clinical trial data for regulatory review.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: The clinical trial identifier (e.g., 'CQGE130A2301').
      - name: vault_folder_id
        in: body
        type: string
        description: The Veeva Vault folder ID for this trial's documents.
      - name: document_name
        in: body
        type: string
        description: Name of the document to create in Veeva Vault.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID to notify regulatory team.
      steps:
      - name: create-vault-document
        type: call
        call: veeva.create-document
        with:
          folder_id: '{{vault_folder_id}}'
          name: '{{document_name}}'
          lifecycle: Clinical_Study_Report_Lifecycle
          type: Clinical_Study_Report
      - name: notify-regulatory-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Clinical trial data uploaded to Veeva Vault for trial {{trial_id}}. Document ID: {{create-vault-document.document_id}}. Awaiting regulatory review.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://novartis.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-data-batch-upload-to-veeva-vault.yml

Creates a ServiceNow change request for a planned SAP system patch, captures the maintenance window, and notifies affected business units via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Request for SAP Patch
  description: Creates a ServiceNow change request for a planned SAP system patch, captures the maintenance window, and notifies affected business units via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap-change-ops
    port: 8080
    tools:
    - name: create-sap-patch-change-request
      description: Given SAP system ID, patch description, and maintenance window, create a ServiceNow change request and notify affected business owners via Microsoft Teams. Use for SAP system patching and maintenance events.
      inputParameters:
      - name: sap_system_id
        in: body
        type: string
        description: The SAP system ID being patched (e.g., 'PRD', 'QAS').
      - name: patch_description
        in: body
        type: string
        description: Description of the SAP patch or maintenance activity.
      - name: maintenance_start
        in: body
        type: string
        description: Planned maintenance window start in ISO 8601 format.
      - name: maintenance_end
        in: body
        type: string
        description: Planned maintenance window end in ISO 8601 format.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID to notify of the planned maintenance.
      steps:
      - name: create-change-request
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'SAP {{sap_system_id}} patch: {{patch_description}}'
          category: Software
          planned_start_date: '{{maintenance_start}}'
          planned_end_date: '{{maintenance_end}}'
      - name: notify-business-owners
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'SAP Maintenance Notice: {{sap_system_id}} will be patched from {{maintenance_start}} to {{maintenance_end}}. Change Request: {{create-change-request.number}}. Plan accordingly.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://novartis.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-for-sap-patch.yml

Queries Tableau Server for all workbooks accessible to a specified user group and publishes a data access audit report to Confluence for governance review.

naftiko: '0.5'
info:
  label: Tableau Workbook Access Audit
  description: Queries Tableau Server for all workbooks accessible to a specified user group and publishes a data access audit report to Confluence for governance review.
  tags:
  - data
  - analytics
  - tableau
  - confluence
  - audit
  - governance
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: audit-tableau-access
      description: Fetch all Tableau workbooks and data sources accessible to a specified user group and publish a data access audit to Confluence. Use for data governance reviews or GDPR access compliance checks.
      inputParameters:
      - name: group_id
        in: body
        type: string
        description: The Tableau user group ID to audit access for.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for the access audit report.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for the audit report.
      steps:
      - name: get-group-workbooks
        type: call
        call: tableau.list-group-workbooks
        with:
          group_id: '{{group_id}}'
      - name: publish-audit
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: Tableau Data Access Audit — Group {{group_id}}
          content: 'Tableau workbook and datasource access audit for group {{group_id}}. Total accessible assets: {{get-group-workbooks.pagination.totalAvailable}}.'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://10ax.online.tableau.com/api/2.8
    authentication:
      type: apikey
      key: X-Tableau-Auth
      value: $secrets.tableau_token
      placement: header
    resources:
    - name: group-workbooks
      path: /sites/{{site_id}}/groups/{{group_id}}/workbooks
      inputParameters:
      - name: site_id
        in: path
      - name: group_id
        in: path
      operations:
      - name: list-group-workbooks
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://novartis.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → tableau-workbook-access-audit.yml

Fetches closed Salesforce opportunities from the past 30 days, categorizes by win/loss, and publishes a sales performance digest to the revenue leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Win/Loss Analysis Digest
  description: Fetches closed Salesforce opportunities from the past 30 days, categorizes by win/loss, and publishes a sales performance digest to the revenue leadership Microsoft Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-reporting
    port: 8080
    tools:
    - name: digest-win-loss-analysis
      description: Query closed Salesforce opportunities from the past 30 days, compute win rate by territory and product line, and post the digest to the revenue leadership Teams channel. Use for monthly sales reviews.
      inputParameters:
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for revenue leadership.
      - name: territory
        in: body
        type: string
        description: Salesforce territory to filter results by (e.g., 'EMEA', 'APAC').
      steps:
      - name: query-closed-opportunities
        type: call
        call: salesforce.query-opportunities
        with:
          soql: SELECT Name, StageName, Amount, CloseDate, Territory2.Name FROM Opportunity WHERE CloseDate = LAST_N_DAYS:30 AND StageName IN ('Closed Won', 'Closed Lost') AND Territory2.Name = '{{territory}}'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Sales Win/Loss Digest (Last 30 Days) — Territory: {{territory}} | Total Closed: {{query-closed-opportunities.totalSize}} opportunities. Review breakdown in Salesforce.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://novartis.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunity-query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-win-loss-analysis-digest.yml

Generates a list of users with privileged Okta group memberships and publishes a quarterly access review report to Confluence for the IT security team.

naftiko: '0.5'
info:
  label: Okta Privileged Access Quarterly Review
  description: Generates a list of users with privileged Okta group memberships and publishes a quarterly access review report to Confluence for the IT security team.
  tags:
  - identity
  - security
  - okta
  - confluence
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: privileged-access-review
    port: 8080
    tools:
    - name: run-privileged-access-review
      description: List all Okta users in privileged admin groups and publish a quarterly review report to Confluence. Use for SOX or ISO 27001 access certification cycles.
      inputParameters:
      - name: privileged_group_ids
        in: body
        type: string
        description: Comma-separated list of Okta group IDs representing privileged access groups.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for the access review report.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for the quarterly review.
      steps:
      - name: list-privileged-users
        type: call
        call: okta.list-group-users
        with:
          group_id: '{{privileged_group_ids}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: Quarterly Privileged Access Review
          content: Privileged Okta group membership report for quarterly access certification. Review and certify or revoke each entry.
  consumes:
  - type: http
    namespace: okta
    baseUri: https://novartis.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-users
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://novartis.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → okta-privileged-access-quarterly-review.yml

Fetches a pending SAP Ariba purchase requisition and routes it to the designated approver via Microsoft Teams with a direct approval link.

naftiko: '0.5'
info:
  label: SAP Ariba Purchase Requisition Approval
  description: Fetches a pending SAP Ariba purchase requisition and routes it to the designated approver via Microsoft Teams with a direct approval link.
  tags:
  - procurement
  - sap-ariba
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: ariba-approvals
    port: 8080
    tools:
    - name: route-requisition-approval
      description: Given an SAP Ariba requisition ID and approver UPN, fetch requisition details and send an approval notification via Microsoft Teams. Use when a purchase requisition exceeds the auto-approve threshold.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba purchase requisition ID.
      - name: approver_upn
        in: body
        type: string
        description: The UPN (email) of the designated approver.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          req_id: '{{requisition_id}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Approval Required: Purchase Requisition {{requisition_id}} | Description: {{get-requisition.description}} | Amount: {{get-requisition.totalCost}} {{get-requisition.currency}} | Please approve in SAP Ariba.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-req/v1
    authentication:
      type: apikey
      key: apiKey
      value: $secrets.ariba_api_key
      placement: query
    resources:
    - name: requisitions
      path: /prod/requisitions/{{req_id}}
      inputParameters:
      - name: req_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-purchase-requisition-approval.yml

Publishes a Novartis employer brand post to the LinkedIn company page and reports the publication to the corporate communications Slack channel.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Campaign Publisher
  description: Publishes a Novartis employer brand post to the LinkedIn company page and reports the publication to the corporate communications Slack channel.
  tags:
  - marketing
  - social
  - linkedin
  - slack
capability:
  exposes:
  - type: mcp
    namespace: brand-publishing
    port: 8080
    tools:
    - name: publish-employer-brand-post
      description: 'Given post content, publish a Novartis employer brand post to the LinkedIn company page and notify the #corporate-comms Slack channel. Use for employer branding campaigns, drug approval announcements, or recruitment marketing.'
      inputParameters:
      - name: post_text
        in: body
        type: string
        description: The text content of the LinkedIn employer brand post.
      - name: visibility
        in: body
        type: string
        description: 'Post visibility setting: ''PUBLIC'' or ''CONNECTIONS''.'
      steps:
      - name: create-post
        type: call
        call: linkedin.create-share
        with:
          text: '{{post_text}}'
          visibility: '{{visibility}}'
      - name: notify-comms
        type: call
        call: slack.post-message
        with:
          channel: corporate-comms
          text: 'LinkedIn post published: Activity ID {{create-post.activity_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_access_token
    resources:
    - name: shares
      path: /ugcPosts
      operations:
      - name: create-share
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-campaign-publisher.yml

Queries Veeva Vault for regulatory documents approaching their submission deadlines and sends reminders to the regulatory affairs team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Submission Deadline Reminder
  description: Queries Veeva Vault for regulatory documents approaching their submission deadlines and sends reminders to the regulatory affairs team via Microsoft Teams.
  tags:
  - regulatory
  - veeva
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reminders
    port: 8080
    tools:
    - name: send-submission-deadline-reminders
      description: Query Veeva Vault for regulatory documents with submission deadlines within the next 14 days and notify the regulatory affairs Microsoft Teams channel. Use to prevent missed submission deadlines.
      inputParameters:
      - name: days_ahead
        in: body
        type: integer
        description: Number of days ahead to look for upcoming deadlines (e.g., 14).
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the regulatory affairs team.
      steps:
      - name: query-upcoming-submissions
        type: call
        call: veeva.query-documents
        with:
          query: SELECT id, name__v, submission_deadline__c, lifecycle_state__v FROM documents WHERE submission_deadline__c BETWEEN today() AND today()+{{days_ahead}} AND lifecycle_state__v != 'Approved'
      - name: notify-regulatory
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Regulatory Deadline Alert: {{query-upcoming-submissions.responseDetails.total}} documents have submission deadlines within the next {{days_ahead}} days. Please review in Veeva Vault.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://novartis.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents-query
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-documents
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-deadline-reminder.yml

Queries Workday Learning for employees who have not completed mandatory compliance training and posts the non-completion report to Confluence.

naftiko: '0.5'
info:
  label: Workday Learning Completion Compliance Report
  description: Queries Workday Learning for employees who have not completed mandatory compliance training and posts the non-completion report to Confluence.
  tags:
  - hr
  - compliance
  - workday
  - confluence
  - training
capability:
  exposes:
  - type: mcp
    namespace: learning-compliance
    port: 8080
    tools:
    - name: report-training-non-completion
      description: Fetch employees who have not completed mandatory compliance training courses from Workday Learning and publish the list to Confluence. Use for quarterly compliance reporting or audit preparation.
      inputParameters:
      - name: course_id
        in: body
        type: string
        description: The Workday Learning course ID for the mandatory training.
      - name: deadline
        in: body
        type: string
        description: Training completion deadline in ISO 8601 format.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for the compliance report.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for the report.
      steps:
      - name: get-non-completions
        type: call
        call: workday.get-learning-non-completions
        with:
          course_id: '{{course_id}}'
          deadline: '{{deadline}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: Mandatory Training Non-Completion Report — Course {{course_id}}
          content: 'Employees who have not completed mandatory training course {{course_id}} by {{deadline}}. Total non-completions: {{get-non-completions.total}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/learning/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: learning-records
      path: /novartis/learningRecords
      inputParameters:
      - name: course_id
        in: query
      - name: deadline
        in: query
      operations:
      - name: get-learning-non-completions
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://novartis.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → workday-learning-completion-compliance-report.yml

Syncs a newly qualified Salesforce lead to HubSpot CRM for marketing automation follow-up, enriching the contact with lead source and qualification data.

naftiko: '0.5'
info:
  label: Salesforce CRM Lead to HubSpot Sync
  description: Syncs a newly qualified Salesforce lead to HubSpot CRM for marketing automation follow-up, enriching the contact with lead source and qualification data.
  tags:
  - sales
  - marketing
  - salesforce
  - hubspot
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: lead-sync
    port: 8080
    tools:
    - name: sync-lead-to-hubspot
      description: Given a Salesforce lead ID, fetch lead details and create or update the corresponding HubSpot contact with lead source, qualification status, and owner info. Use when a lead is qualified in Salesforce and needs to enter HubSpot nurture workflows.
      inputParameters:
      - name: salesforce_lead_id
        in: body
        type: string
        description: The Salesforce lead ID to sync (18-character SFDC ID).
      steps:
      - name: get-salesforce-lead
        type: call
        call: salesforce.get-lead
        with:
          lead_id: '{{salesforce_lead_id}}'
      - name: upsert-hubspot-contact
        type: call
        call: hubspot.upsert-contact
        with:
          email: '{{get-salesforce-lead.Email}}'
          firstname: '{{get-salesforce-lead.FirstName}}'
          lastname: '{{get-salesforce-lead.LastName}}'
          company: '{{get-salesforce-lead.Company}}'
          lead_source: '{{get-salesforce-lead.LeadSource}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://novartis.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
      operations:
      - name: upsert-contact
        method: POST
Open in Framework → View in Fleet → salesforce-crm-lead-to-hubspot-sync.yml

Verifies that all payroll journal entries have been posted and reconciled in SAP before the monthly close, posting a confirmation to the finance Slack channel.

naftiko: '0.5'
info:
  label: Workday Payroll Period Close Verification
  description: Verifies that all payroll journal entries have been posted and reconciled in SAP before the monthly close, posting a confirmation to the finance Slack channel.
  tags:
  - finance
  - payroll
  - workday
  - sap
  - period-close
capability:
  exposes:
  - type: mcp
    namespace: payroll-close
    port: 8080
    tools:
    - name: verify-payroll-period-close
      description: Fetch payroll journal status from Workday and verify reconciliation in SAP for a given pay period. Post the close verification status to the finance Slack channel. Use at month-end payroll close.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: The payroll period identifier (e.g., '2026-03').
      - name: company_code
        in: body
        type: string
        description: The SAP company code for the legal entity (e.g., '1000').
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the close verification status.
      steps:
      - name: get-payroll-journals
        type: call
        call: workday.get-payroll-journals
        with:
          pay_period: '{{pay_period}}'
      - name: verify-sap-posting
        type: call
        call: sap.get-gl-documents
        with:
          company_code: '{{company_code}}'
          posting_period: '{{pay_period}}'
          document_type: PC
      - name: post-status
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Payroll Period Close {{pay_period}}: Workday journals — {{get-payroll-journals.status}}. SAP posting — {{verify-sap-posting.count}} documents found.'
  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-journals
      path: /novartis/payrollResults
      inputParameters:
      - name: pay_period
        in: query
      operations:
      - name: get-payroll-journals
        method: GET
  - type: http
    namespace: sap
    baseUri: https://novartis-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entries
      path: /A_JournalEntryItem
      inputParameters:
      - name: company_code
        in: query
      - name: posting_period
        in: query
      - name: document_type
        in: query
      operations:
      - name: get-gl-documents
        method: GET
        outputRawFormat: xml
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-payroll-period-close-verification.yml

Fetches pending SAP Concur expense reports exceeding the auto-approval limit and routes them to the appropriate manager for approval via Microsoft Teams.

naftiko: '0.5'
info:
  label: Concur Expense Report Approval Routing
  description: Fetches pending SAP Concur expense reports exceeding the auto-approval limit and routes them to the appropriate manager for approval via Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: expense-approvals
    port: 8080
    tools:
    - name: route-expense-approval
      description: Given a Concur expense report ID and approver UPN, fetch report details and send an approval request via Microsoft Teams. Use for expense reports exceeding the auto-approval monetary threshold.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: approver_upn
        in: body
        type: string
        description: The UPN (email) of the designated expense approver.
      steps:
      - name: get-expense-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Expense Approval Required: Report {{report_id}} | Employee: {{get-expense-report.OwnerName}} | Amount: {{get-expense-report.Total}} {{get-expense-report.CurrencyCode}} | Please approve 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: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → concur-expense-report-approval-routing.yml

Monitors Workday for employees with unexpected absence patterns exceeding policy thresholds and notifies their managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Absence Management Alert
  description: Monitors Workday for employees with unexpected absence patterns exceeding policy thresholds and notifies their managers via Microsoft Teams.
  tags:
  - hr
  - absence-management
  - workday
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: absence-monitoring
    port: 8080
    tools:
    - name: alert-absence-threshold
      description: Check Workday for employees whose unplanned absence days exceed the policy threshold in the current quarter and notify their managers via Microsoft Teams. Use for HR compliance monitoring.
      inputParameters:
      - name: absence_threshold_days
        in: body
        type: integer
        description: Number of unplanned absence days that triggers an alert.
      - name: period
        in: body
        type: string
        description: The monitoring period (e.g., 'Q1-2026').
      steps:
      - name: get-absence-data
        type: call
        call: workday.get-absence-entries
        with:
          period: '{{period}}'
          type: unplanned
      - name: notify-hr
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: HR_GENERAL_CHANNEL_ID
          text: 'Absence Alert: Employees exceeding {{absence_threshold_days}} unplanned absence days in {{period}} have been identified. Please review in Workday.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absence-entries
      path: /novartis/absenceEntries
      inputParameters:
      - name: period
        in: query
      - name: type
        in: query
      operations:
      - name: get-absence-entries
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-absence-management-alert.yml

Returns current headcount grouped by department, country, and cost center from Workday, used for workforce planning and executive reporting.

naftiko: '0.5'
info:
  label: Global Headcount Snapshot Report
  description: Returns current headcount grouped by department, country, and cost center from Workday, used for 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 Novartis employees grouped by department, country, and cost center from Workday. Use for global workforce planning, executive headcount reviews, or compliance 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: /novartis/workers
      operations:
      - name: list-workers
        method: GET
Open in Framework → View in Fleet → global-headcount-snapshot-report.yml

Queries SAP cost center actuals versus budget for the current period and sends a Slack alert when variance exceeds the configured threshold.

naftiko: '0.5'
info:
  label: SAP Budget Variance Alert
  description: Queries SAP cost center actuals versus budget for the current period and sends a Slack alert when variance exceeds the configured threshold.
  tags:
  - finance
  - sap
  - slack
  - budget-management
capability:
  exposes:
  - type: mcp
    namespace: budget-monitoring
    port: 8080
    tools:
    - name: check-budget-variance
      description: Given a SAP cost center and variance threshold percentage, fetch actual vs. budget spend and post an alert to Slack if the threshold is exceeded. Use for monthly budget compliance monitoring.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center to check (e.g., 'CC-1042').
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period in YYYY/MM format (e.g., '2026/03').
      - name: variance_threshold_pct
        in: body
        type: number
        description: Variance percentage threshold to trigger alert (e.g., 10 for 10%).
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for budget variance alerts.
      steps:
      - name: get-cost-center-actuals
        type: call
        call: sap.get-cost-center-report
        with:
          cost_center: '{{cost_center}}'
          fiscal_period: '{{fiscal_period}}'
      - name: post-variance-alert
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Budget Variance Alert: Cost Center {{cost_center}} for period {{fiscal_period}} — actual vs. budget variance detected. Please review in SAP.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://novartis-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-reports
      path: /A_CostCenterActuals
      inputParameters:
      - name: cost_center
        in: query
      - name: fiscal_period
        in: query
      operations:
      - name: get-cost-center-report
        method: GET
        outputRawFormat: xml
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-budget-variance-alert.yml

When an IT asset is marked for retirement in ServiceNow, removes the asset's associated Okta application assignments and posts a completion notice to the IT Slack channel.

naftiko: '0.5'
info:
  label: ServiceNow IT Asset Retirement
  description: When an IT asset is marked for retirement in ServiceNow, removes the asset's associated Okta application assignments and posts a completion notice to the IT Slack channel.
  tags:
  - itsm
  - asset-management
  - servicenow
  - okta
  - slack
capability:
  exposes:
  - type: mcp
    namespace: asset-retirement
    port: 8080
    tools:
    - name: retire-it-asset
      description: Given a ServiceNow asset configuration item ID and associated Okta application ID, update the asset state to retired, deactivate the Okta application assignment, and notify the IT Slack channel. Use when decommissioning IT hardware or software.
      inputParameters:
      - name: servicenow_ci_id
        in: body
        type: string
        description: The ServiceNow configuration item sys_id to retire.
      - name: okta_app_id
        in: body
        type: string
        description: The Okta application ID associated with the retiring asset.
      - name: slack_channel
        in: body
        type: string
        description: IT Slack channel to notify on asset retirement completion.
      steps:
      - name: update-asset-state
        type: call
        call: servicenow.update-ci
        with:
          sys_id: '{{servicenow_ci_id}}'
          install_status: '7'
      - name: deactivate-okta-app
        type: call
        call: okta.deactivate-application
        with:
          app_id: '{{okta_app_id}}'
      - name: notify-it-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'IT Asset Retired: CI {{servicenow_ci_id}} marked retired. Okta application {{okta_app_id}} deactivated.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://novartis.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: configuration-items
      path: /table/cmdb_ci/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-ci
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://novartis.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: applications
      path: /apps/{{app_id}}/lifecycle/deactivate
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: deactivate-application
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-asset-retirement.yml

Extracts a Veeva Vault audit trail for a specified document and publishes the report to Confluence for regulatory inspection readiness.

naftiko: '0.5'
info:
  label: Veeva Vault Audit Trail Report
  description: Extracts a Veeva Vault audit trail for a specified document and publishes the report to Confluence for regulatory inspection readiness.
  tags:
  - regulatory
  - veeva
  - confluence
  - audit
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: vault-audit
    port: 8080
    tools:
    - name: generate-vault-audit-trail
      description: Given a Veeva Vault document ID, extract the full audit trail and publish it to Confluence under the inspection readiness space. Use to prepare for regulatory inspections or internal audits.
      inputParameters:
      - name: vault_document_id
        in: body
        type: string
        description: The Veeva Vault document ID for audit trail extraction.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for the audit trail report.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for the audit report.
      steps:
      - name: get-audit-trail
        type: call
        call: veeva.get-document-audit-trail
        with:
          document_id: '{{vault_document_id}}'
      - name: publish-audit-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: Vault Audit Trail — Document {{vault_document_id}}
          content: 'Veeva Vault document audit trail for document ID {{vault_document_id}}. Generated for inspection readiness. Total events: {{get-audit-trail.responseDetails.total}}.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://novartis.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: document-audit-trail
      path: /objects/documents/{{document_id}}/audit_trail
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document-audit-trail
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://novartis.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → veeva-vault-audit-trail-report.yml

Fetches HubSpot campaign email performance metrics and publishes a weekly digest to the marketing Microsoft Teams channel.

naftiko: '0.5'
info:
  label: HubSpot Marketing Campaign Performance Digest
  description: Fetches HubSpot campaign email performance metrics and publishes a weekly digest to the 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 performance for a given campaign ID and post open rate, click rate, and unsubscribe metrics to the marketing Teams channel. Use for weekly 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 to post the digest to.
      steps:
      - name: get-campaign-metrics
        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-metrics.name}} | Sent: {{get-campaign-metrics.numSent}} | Open Rate: {{get-campaign-metrics.openRate}} | Click Rate: {{get-campaign-metrics.clickRate}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaign-stats
      path: /emails/statistics/list
      inputParameters:
      - name: campaign_id
        in: query
      operations:
      - name: get-campaign-stats
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → hubspot-marketing-campaign-performance-digest.yml

Retrieves the current workflow status and reviewer list for a regulatory document in Veeva Vault.

naftiko: '0.5'
info:
  label: Veeva Vault Document Approval Status Check
  description: Retrieves the current workflow status and reviewer list for a regulatory document in Veeva Vault.
  tags:
  - regulatory
  - veeva
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: regulatory-reporting
    port: 8080
    tools:
    - name: get-document-approval-status
      description: Given a Veeva Vault document ID, return the current lifecycle state, workflow status, and list of pending reviewers. Use to check regulatory document approval progress before submission deadlines.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault document ID to check (numeric).
      call: veeva.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: lifecycle_state
        type: string
        mapping: $.document.lifecycle_state__v
      - name: status
        type: string
        mapping: $.document.status__v
      - name: modified_date
        type: string
        mapping: $.document.version_modified_date__v
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://novartis.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → veeva-vault-document-approval-status-check.yml

When a HubSpot contact reaches a qualified lead score, creates a corresponding Salesforce opportunity and assigns it to the correct sales rep.

naftiko: '0.5'
info:
  label: HubSpot Contact to Salesforce Opportunity Promotion
  description: When a HubSpot contact reaches a qualified lead score, creates a corresponding Salesforce opportunity and assigns it to the correct sales rep.
  tags:
  - sales
  - marketing
  - hubspot
  - salesforce
  - lead-qualification
capability:
  exposes:
  - type: mcp
    namespace: mql-to-opportunity
    port: 8080
    tools:
    - name: promote-mql-to-opportunity
      description: Given a HubSpot contact ID and owning sales rep Salesforce user ID, fetch contact details and create a Salesforce opportunity for the MQL. Use when a marketing qualified lead reaches the sales handoff threshold.
      inputParameters:
      - name: hubspot_contact_id
        in: body
        type: string
        description: The HubSpot contact ID of the MQL.
      - name: salesforce_owner_id
        in: body
        type: string
        description: The Salesforce user ID of the assigned sales rep.
      steps:
      - name: get-hubspot-contact
        type: call
        call: hubspot.get-contact
        with:
          contact_id: '{{hubspot_contact_id}}'
      - name: create-salesforce-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: '{{get-hubspot-contact.company}} — Inbound MQL'
          account_name: '{{get-hubspot-contact.company}}'
          stage: Prospecting
          close_date: '2026-06-30'
          owner_id: '{{salesforce_owner_id}}'
  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://novartis.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
Open in Framework → View in Fleet → hubspot-contact-to-salesforce-opportunity-promotion.yml

Retrieves quality control lab results from the LabWare LIMS system by sample ID and returns test results, specifications, and pass/fail status for QC analysts.

naftiko: '0.5'
info:
  label: LIMS Lab Result Retrieval
  description: Retrieves quality control lab results from the LabWare LIMS system by sample ID and returns test results, specifications, and pass/fail status for QC analysts.
  tags:
  - quality
  - lims
  - labware
  - lab-testing
capability:
  exposes:
  - type: mcp
    namespace: qc-lab
    port: 8080
    tools:
    - name: get-lab-result
      description: Look up a QC lab result in LabWare LIMS by sample ID. Returns test name, result value, specification limits, and pass/fail status.
      inputParameters:
      - name: sample_id
        in: body
        type: string
        description: The LabWare LIMS sample identifier.
      call: labware.get-sample-results
      with:
        sample_id: '{{sample_id}}'
      outputParameters:
      - name: test_name
        type: string
        mapping: $.data.test_name
      - name: result_value
        type: string
        mapping: $.data.result_value
      - name: spec_low
        type: string
        mapping: $.data.spec_low_limit
      - name: spec_high
        type: string
        mapping: $.data.spec_high_limit
      - name: disposition
        type: string
        mapping: $.data.disposition
  consumes:
  - type: http
    namespace: labware
    baseUri: https://lims.novonordisk.com/labware/api/v3
    authentication:
      type: bearer
      token: $secrets.labware_token
    resources:
    - name: samples
      path: /samples/{{sample_id}}/results
      inputParameters:
      - name: sample_id
        in: path
      operations:
      - name: get-sample-results
        method: GET
Open in Framework → View in Fleet → lims-lab-result-retrieval.yml

Checks SOP training completion status in Veeva Vault QMS Training, cross-references with Workday employee records, and creates a ServiceNow compliance task for overdue completions.

naftiko: '0.5'
info:
  label: SOP Training Compliance Tracker
  description: Checks SOP training completion status in Veeva Vault QMS Training, cross-references with Workday employee records, and creates a ServiceNow compliance task for overdue completions.
  tags:
  - quality
  - training
  - veeva-vault
  - workday
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: training-compliance
    port: 8080
    tools:
    - name: check-training-compliance
      description: Given a document number and department, check training completion rates, identify overdue employees, and create compliance follow-up tasks.
      inputParameters:
      - name: document_number
        in: body
        type: string
        description: The Veeva Vault QMS SOP document number.
      - name: department
        in: body
        type: string
        description: The department to check training compliance for.
      steps:
      - name: get-training-status
        type: call
        call: veeva-qms.get-training-assignments
        with:
          document_number: '{{document_number}}'
          department: '{{department}}'
      - name: create-compliance-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'SOP training overdue: {{document_number}} — {{department}}'
          description: '{{get-training-status.overdue_count}} employees in {{department}} have overdue training for SOP {{document_number}}. Overdue list: {{get-training-status.overdue_employees}}. Due date was: {{get-training-status.due_date}}.'
          assigned_group: QA_Training
          category: training_compliance
  consumes:
  - type: http
    namespace: veeva-qms
    baseUri: https://novonordisk-qualitydocs.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_qms_token
    resources:
    - name: training-assignments
      path: /objects/training_assignment__v?q=document_number={{document_number}}&department={{department}}
      inputParameters:
      - name: document_number
        in: query
      - name: department
        in: query
      operations:
      - name: get-training-assignments
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → sop-training-compliance-tracker.yml

Retrieves a GxP deviation ticket from ServiceNow by incident number and returns severity, CAPA status, and root cause classification for quality assurance.

naftiko: '0.5'
info:
  label: ServiceNow GxP Deviation Ticket Lookup
  description: Retrieves a GxP deviation ticket from ServiceNow by incident number and returns severity, CAPA status, and root cause classification for quality assurance.
  tags:
  - quality
  - servicenow
  - gxp
  - deviation
capability:
  exposes:
  - type: mcp
    namespace: qa-deviations
    port: 8080
    tools:
    - name: get-deviation-ticket
      description: Look up a GxP deviation ticket in ServiceNow by incident number. Returns severity, current status, CAPA link, root cause, and assigned investigator.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number for the deviation.
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: severity
        type: string
        mapping: $.result.severity
      - name: status
        type: string
        mapping: $.result.state
      - name: root_cause
        type: string
        mapping: $.result.u_root_cause
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-gxp-deviation-ticket-lookup.yml

Retrieves real-world evidence summaries from the medical information API, pulls the prescriber profile from Veeva CRM, and generates a tailored MSL briefing document in SharePoint for the upcoming engagement.

naftiko: '0.5'
info:
  label: Real-World Evidence Request and MSL Briefing
  description: Retrieves real-world evidence summaries from the medical information API, pulls the prescriber profile from Veeva CRM, and generates a tailored MSL briefing document in SharePoint for the upcoming engagement.
  tags:
  - medical-affairs
  - real-world-evidence
  - medical-information
  - veeva-crm
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: rwe
    port: 8080
    tools:
    - name: prepare-msl-briefing
      description: Given a product, therapeutic area, and prescriber NPI, pull RWE data, get the prescriber profile, and create a briefing document in SharePoint.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product name (e.g., semaglutide).
      - name: therapeutic_area
        in: body
        type: string
        description: The therapeutic area (e.g., type-2-diabetes, obesity).
      - name: npi_number
        in: body
        type: string
        description: The prescriber NPI number.
      steps:
      - name: get-rwe
        type: call
        call: med-info.get-rwe
        with:
          product_name: '{{product_name}}'
          therapeutic_area: '{{therapeutic_area}}'
      - name: get-prescriber
        type: call
        call: veeva-crm.get-hcp
        with:
          npi_number: '{{npi_number}}'
      - name: create-briefing
        type: call
        call: sharepoint.create-file
        with:
          site_id: medical-affairs
          file_path: MSL-Briefings/{{get-prescriber.full_name}}_{{product_name}}_briefing.json
          content_type: application/json
  consumes:
  - type: http
    namespace: med-info
    baseUri: https://medinfo.novonordisk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.medinfo_token
    resources:
    - name: rwe
      path: /real-world-evidence?product={{product_name}}&area={{therapeutic_area}}
      inputParameters:
      - name: product_name
        in: query
      - name: therapeutic_area
        in: query
      operations:
      - name: get-rwe
        method: GET
  - type: http
    namespace: veeva-crm
    baseUri: https://novonordisk.veevacrm.com/api/v1
    authentication:
      type: bearer
      token: $secrets.veeva_crm_token
    resources:
    - name: hcps
      path: /accounts?q=npi__v={{npi_number}}
      inputParameters:
      - name: npi_number
        in: query
      operations:
      - name: get-hcp
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
Open in Framework → View in Fleet → real-world-evidence-request-and-msl-briefing.yml

Retrieves an expense report from SAP Concur, validates the submitter against Workday, and creates a ServiceNow compliance task when policy exceptions are detected.

naftiko: '0.5'
info:
  label: Concur Expense Report Review and Escalation
  description: Retrieves an expense report from SAP Concur, validates the submitter against Workday, and creates a ServiceNow compliance task when policy exceptions are detected.
  tags:
  - finance
  - concur
  - sap-concur
  - expense
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: finance-expense
    port: 8080
    tools:
    - name: review-expense-report
      description: Given a Concur report ID and employee ID, fetch the report, validate the submitter, and escalate policy exceptions to ServiceNow.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID of the expense submitter.
      steps:
      - name: get-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Expense policy review: {{get-report.report_name}} — {{get-employee.full_name}}'
          description: 'Report {{report_id}} total: {{get-report.total_amount}} {{get-report.currency}}. Submitter: {{get-employee.full_name}} ({{get-employee.department}}). Policy exceptions: {{get-report.policy_exceptions}}.'
          assigned_group: Finance_Audit
          category: expense_review
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us2.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/novonordisk
    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://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → concur-expense-report-review-and-escalation.yml

Retrieves the latest artwork version from Veeva Vault PromoMats, routes it for regulatory and quality review via ServiceNow, and notifies the labeling manager on Microsoft Teams when approvals are complete.

naftiko: '0.5'
info:
  label: Drug Labeling Artwork Approval Pipeline
  description: Retrieves the latest artwork version from Veeva Vault PromoMats, routes it for regulatory and quality review via ServiceNow, and notifies the labeling manager on Microsoft Teams when approvals are complete.
  tags:
  - regulatory
  - labeling
  - veeva-vault
  - servicenow
  - microsoft-teams
  - packaging
capability:
  exposes:
  - type: mcp
    namespace: labeling-approval
    port: 8080
    tools:
    - name: route-artwork-approval
      description: Given a Veeva Vault PromoMats document ID and labeling manager email, retrieve the artwork, create review tasks, and notify upon completion.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault PromoMats artwork document ID.
      - name: labeling_manager_email
        in: body
        type: string
        description: Email address of the labeling manager.
      - name: product_name
        in: body
        type: string
        description: The product name on the label.
      steps:
      - name: get-artwork
        type: call
        call: veeva-promomats.get-document
        with:
          document_id: '{{document_id}}'
      - name: create-reg-review
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Regulatory review: {{product_name}} label artwork v{{get-artwork.version}}'
          description: 'Review label artwork for {{product_name}}. Document: {{document_id}}, Version: {{get-artwork.version}}. URL: {{get-artwork.document_url}}.'
          assigned_group: Regulatory_Labeling
          category: labeling_review
      - name: create-qa-review
        type: call
        call: servicenow.create-task
        with:
          short_description: 'QA review: {{product_name}} label artwork v{{get-artwork.version}}'
          description: 'Quality review for {{product_name}} label artwork. Document: {{document_id}}, Version: {{get-artwork.version}}.'
          assigned_group: QA_Labeling
          category: labeling_review
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{labeling_manager_email}}'
          text: 'Label artwork for {{product_name}} (v{{get-artwork.version}}) routed for review. Regulatory task: {{create-reg-review.number}}, QA task: {{create-qa-review.number}}.'
  consumes:
  - type: http
    namespace: veeva-promomats
    baseUri: https://novonordisk-promomats.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_promomats_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → drug-labeling-artwork-approval-pipeline.yml

When a new employee joins a GxP area, retrieves their role from Workday, assigns required SOPs in Veeva Vault QMS Training, and sends a training schedule via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee GxP Training Assignment
  description: When a new employee joins a GxP area, retrieves their role from Workday, assigns required SOPs in Veeva Vault QMS Training, and sends a training schedule via Microsoft Teams.
  tags:
  - quality
  - training
  - workday
  - veeva-vault
  - microsoft-teams
  - gxp
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: gxp-training
    port: 8080
    tools:
    - name: assign-gxp-training
      description: Given a Workday worker ID and GxP area, retrieve the employee role, assign required training in Veeva Vault QMS, and notify the employee.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID of the new GxP area employee.
      - name: gxp_area
        in: body
        type: string
        description: The GxP manufacturing or lab area (e.g., aseptic_filling, qc_lab, packaging).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: assign-training
        type: call
        call: veeva-qms.assign-training-curriculum
        with:
          employee_name: '{{get-employee.full_name}}'
          employee_email: '{{get-employee.work_email}}'
          job_role: '{{get-employee.job_title}}'
          gxp_area: '{{gxp_area}}'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Welcome to the {{gxp_area}} area, {{get-employee.first_name}}! Your GxP training has been assigned. {{assign-training.sop_count}} SOPs require completion by {{assign-training.due_date}}. Access your training: {{assign-training.training_url}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/novonordisk
    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: veeva-qms
    baseUri: https://novonordisk-qualitydocs.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_qms_token
    resources:
    - name: training
      path: /objects/training_assignment__v
      operations:
      - name: assign-training-curriculum
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-gxp-training-assignment.yml

When a GxP deviation is raised in ServiceNow, creates a linked CAPA record in Veeva Vault QMS, assigns an investigator from Workday, and notifies the quality team on Microsoft Teams.

naftiko: '0.5'
info:
  label: GxP Deviation to CAPA Orchestrator
  description: When a GxP deviation is raised in ServiceNow, creates a linked CAPA record in Veeva Vault QMS, assigns an investigator from Workday, and notifies the quality team on Microsoft Teams.
  tags:
  - quality
  - gxp
  - capa
  - servicenow
  - veeva-vault
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: qa-capa
    port: 8080
    tools:
    - name: initiate-capa
      description: Given a ServiceNow deviation incident number, create a CAPA in Veeva Vault QMS, assign an investigator, and notify the quality team.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number for the GxP deviation.
      - name: investigator_id
        in: body
        type: string
        description: The Workday worker ID of the assigned CAPA investigator.
      steps:
      - name: get-deviation
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: get-investigator
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{investigator_id}}'
      - name: create-capa
        type: call
        call: veeva-qms.create-capa
        with:
          deviation_ref: '{{incident_number}}'
          title: 'CAPA for deviation {{incident_number}}: {{get-deviation.short_description}}'
          severity: '{{get-deviation.severity}}'
          investigator_name: '{{get-investigator.full_name}}'
          investigator_email: '{{get-investigator.work_email}}'
      - name: notify-quality-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: quality-operations
          channel_id: capa-tracking
          text: 'CAPA {{create-capa.capa_number}} initiated for deviation {{incident_number}}. Investigator: {{get-investigator.full_name}}. Severity: {{get-deviation.severity}}. Due date: {{create-capa.due_date}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.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
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/novonordisk
    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: veeva-qms
    baseUri: https://novonordisk-qualitydocs.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_qms_token
    resources:
    - name: capas
      path: /objects/capa__v
      operations:
      - name: create-capa
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → gxp-deviation-to-capa-orchestrator.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 22
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-22
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-22
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-22
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://novonordisk.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-22.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 4
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-4
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-4
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: PHARMA
          title: Report 4
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-4
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://novonordisk.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-4.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 1
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-1
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-1
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-1
      path: /data-1/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-1
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-1.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 5
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-5
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-5
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_5
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-5
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-5.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 23
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-23
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-23
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 23 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-23
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-23.yml

Retrieves a quality document from Veeva Vault QMS, checks associated training completion rates, and posts a compliance summary to the quality team's Slack channel.

naftiko: '0.5'
info:
  label: Quality Document Review and Training Check
  description: Retrieves a quality document from Veeva Vault QMS, checks associated training completion rates, and posts a compliance summary to the quality team's Slack channel.
  tags:
  - quality
  - veeva-vault
  - document-management
  - gxp
  - slack
capability:
  exposes:
  - type: mcp
    namespace: qa-docs
    port: 8080
    tools:
    - name: review-quality-document
      description: Given a Veeva Vault QMS document number, retrieve the document, check training compliance, and post a summary to Slack.
      inputParameters:
      - name: document_number
        in: body
        type: string
        description: The Veeva Vault QMS document number.
      steps:
      - name: get-document
        type: call
        call: veeva-qms.get-document
        with:
          document_number: '{{document_number}}'
      - name: get-training-status
        type: call
        call: veeva-qms.get-training-assignments
        with:
          document_number: '{{document_number}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: quality-documents
          text: 'Document {{document_number}} ({{get-document.title}}) — Version: {{get-document.version}}, State: {{get-document.lifecycle_state}}, Effective: {{get-document.effective_date}}. Training: {{get-training-status.completed_count}}/{{get-training-status.total_assigned}} completed.'
  consumes:
  - type: http
    namespace: veeva-qms
    baseUri: https://novonordisk-qualitydocs.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_qms_token
    resources:
    - name: documents
      path: /objects/documents?q=document_number__v={{document_number}}
      inputParameters:
      - name: document_number
        in: query
      operations:
      - name: get-document
        method: GET
    - name: training-assignments
      path: /objects/training_assignment__v?q=document_number={{document_number}}
      inputParameters:
      - name: document_number
        in: query
      operations:
      - name: get-training-assignments
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → quality-document-review-and-training-check.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 15
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-15
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-15
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-15
      path: /data-15/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-15.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 21
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-21
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-21
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-21
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-21.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 35
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-35
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-35
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 35 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-35
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-35.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 2
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-2
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-2
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-2
      path: /data-2/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-2
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-2.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 7
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-7
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-7
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: pharma
          message: 'Workflow 7 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-7
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-7.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 6
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-6
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-6
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PHAR
          summary: Task from workflow 6
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-6
        method: POST
  - type: http
    namespace: jira
    baseUri: https://novonordisk.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-6.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 3
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-3
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-3
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-3
      path: /data-3/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-3.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 34
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-34
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-34
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-34
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://novonordisk.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-34.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 20
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-20
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-20
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_20
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-20
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://novonordisk-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-20.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 14
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-14
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-14
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-14
      path: /data-14/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-14
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-14.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 10
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-10
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-10
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-10
      path: /data-10/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-10
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-10.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 24
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-24
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-24
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: pharma.workflow_24
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-24
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-24.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 30
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-30
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-30
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PHAR
          summary: Task from workflow 30
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-30
        method: POST
  - type: http
    namespace: jira
    baseUri: https://novonordisk.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-30.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 18
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-18
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-18
        with:
          identifier: '{{identifier}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PHAR
          summary: Task from workflow 18
          description: '{{process.details}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-18
        method: POST
  - type: http
    namespace: jira
    baseUri: https://novonordisk.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issues
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-18.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 7
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-7
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-7
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-7
      path: /data-7/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-7
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-7.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 2
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-2
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-2
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-2.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 3
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-3
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-3
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#pharma'
          text: 'Completed workflow 3: {{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-3
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-3.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 6
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-6
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-6
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-6
      path: /data-6/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-6.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 19
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-19
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-19
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: pharma
          message: 'Workflow 19 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-19
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-19.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 31
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - teams
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-31
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-31
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: teams.send-message
        with:
          channel_id: pharma
          message: 'Workflow 31 complete: {{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-31
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-31.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 25
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-25
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-25
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-25
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://novonordisk.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-25.yml

Receives a patient device complaint via Salesforce Health Cloud, creates a product quality complaint in Veeva Vault QMS, opens a ServiceNow investigation, and notifies the device engineering team on Slack.

naftiko: '0.5'
info:
  label: Insulin Pen Device Complaint Handler
  description: Receives a patient device complaint via Salesforce Health Cloud, creates a product quality complaint in Veeva Vault QMS, opens a ServiceNow investigation, and notifies the device engineering team on Slack.
  tags:
  - quality
  - device-complaints
  - salesforce-health-cloud
  - veeva-vault
  - servicenow
  - slack
  - medical-devices
capability:
  exposes:
  - type: mcp
    namespace: device-complaints
    port: 8080
    tools:
    - name: handle-device-complaint
      description: Given a Salesforce case ID for a device complaint, create a Veeva QMS complaint, open a ServiceNow investigation, and alert device engineering.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce Health Cloud case ID for the device complaint.
      - name: product_code
        in: body
        type: string
        description: The product code of the insulin delivery device.
      steps:
      - name: get-complaint-case
        type: call
        call: sfdc-health.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-qms-complaint
        type: call
        call: veeva-qms.create-complaint
        with:
          complaint_type: device
          product_code: '{{product_code}}'
          description: '{{get-complaint-case.description}}'
          patient_impact: '{{get-complaint-case.patient_impact}}'
          lot_number: '{{get-complaint-case.lot_number}}'
      - name: open-investigation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Device complaint investigation: {{product_code}} — {{create-qms-complaint.complaint_number}}'
          category: product_quality
          assigned_group: Device_Engineering
          description: 'Complaint {{create-qms-complaint.complaint_number}} for product {{product_code}}. Lot: {{get-complaint-case.lot_number}}. Patient impact: {{get-complaint-case.patient_impact}}. Description: {{get-complaint-case.description}}.'
      - name: alert-engineering
        type: call
        call: slack.post-message
        with:
          channel: device-engineering
          text: 'Device complaint {{create-qms-complaint.complaint_number}} — Product: {{product_code}}, Lot: {{get-complaint-case.lot_number}}. Patient impact: {{get-complaint-case.patient_impact}}. Investigation: {{open-investigation.number}}.'
  consumes:
  - type: http
    namespace: sfdc-health
    baseUri: https://novonordisk.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_id}}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: veeva-qms
    baseUri: https://novonordisk-qualitydocs.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_qms_token
    resources:
    - name: complaints
      path: /objects/complaint__v
      operations:
      - name: create-complaint
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → insulin-pen-device-complaint-handler.yml

Retrieves supplier details from SAP Ariba, checks last audit date in Veeva Vault QMS, schedules an audit task in ServiceNow, and notifies the quality auditor on Microsoft Teams.

naftiko: '0.5'
info:
  label: Supplier GMP Audit Scheduling Orchestrator
  description: Retrieves supplier details from SAP Ariba, checks last audit date in Veeva Vault QMS, schedules an audit task in ServiceNow, and notifies the quality auditor on Microsoft Teams.
  tags:
  - quality
  - supplier-audit
  - sap-ariba
  - veeva-vault
  - servicenow
  - microsoft-teams
  - gmp
capability:
  exposes:
  - type: mcp
    namespace: supplier-audits
    port: 8080
    tools:
    - name: schedule-gmp-audit
      description: Given a supplier ID and auditor worker ID, retrieve supplier details, check audit history, schedule an audit, and notify the auditor.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier identifier.
      - name: auditor_worker_id
        in: body
        type: string
        description: The Workday worker ID of the assigned auditor.
      - name: audit_date
        in: body
        type: string
        description: Proposed audit date in YYYY-MM-DD format.
      steps:
      - name: get-supplier
        type: call
        call: ariba.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: get-audit-history
        type: call
        call: veeva-qms.get-audit-history
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-audit-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'GMP Audit: {{get-supplier.supplier_name}} — {{audit_date}}'
          description: 'Scheduled GMP audit for {{get-supplier.supplier_name}} ({{supplier_id}}). Last audit: {{get-audit-history.last_audit_date}}. Last finding count: {{get-audit-history.findings_count}}. Proposed date: {{audit_date}}.'
          assigned_group: QA_Supplier_Audit
          category: supplier_audit
      - name: notify-auditor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{auditor_worker_id}}@novonordisk.com'
          text: 'GMP audit scheduled for {{get-supplier.supplier_name}} on {{audit_date}}. Last audit: {{get-audit-history.last_audit_date}}. Previous findings: {{get-audit-history.findings_count}}. ServiceNow: {{create-audit-task.number}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: veeva-qms
    baseUri: https://novonordisk-qualitydocs.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_qms_token
    resources:
    - name: audit-history
      path: /objects/audit__v?q=supplier_id={{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: query
      operations:
      - name: get-audit-history
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supplier-gmp-audit-scheduling-orchestrator.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 11
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-11
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-11
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-11
      path: /data-11/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-11
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-11.yml

Retrieves a regulatory submission document from Veeva Vault RIM by document number, checks its approval workflow progress, and notifies the regulatory affairs lead on Microsoft Teams with the status summary.

naftiko: '0.5'
info:
  label: Regulatory Submission Document Status and Notification
  description: Retrieves a regulatory submission document from Veeva Vault RIM by document number, checks its approval workflow progress, and notifies the regulatory affairs lead on Microsoft Teams with the status summary.
  tags:
  - regulatory
  - veeva-vault
  - microsoft-teams
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: reg-docs
    port: 8080
    tools:
    - name: check-submission-document
      description: Look up a Veeva Vault RIM regulatory document by document number, check approval progress, and notify the regulatory lead.
      inputParameters:
      - name: document_number
        in: body
        type: string
        description: The Veeva Vault RIM document number.
      - name: reg_lead_email
        in: body
        type: string
        description: Email of the regulatory affairs lead to notify.
      steps:
      - name: get-document
        type: call
        call: veeva-rim.get-document
        with:
          document_number: '{{document_number}}'
      - name: notify-reg-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{reg_lead_email}}'
          text: 'Submission document {{document_number}}: Status — {{get-document.status}}, Version — {{get-document.version}}, Lifecycle — {{get-document.lifecycle_state}}, Reviewer — {{get-document.reviewer}}.'
  consumes:
  - type: http
    namespace: veeva-rim
    baseUri: https://novonordisk-rim.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_rim_token
    resources:
    - name: documents
      path: /objects/documents?q=document_number__v={{document_number}}
      inputParameters:
      - name: document_number
        in: query
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-document-status-and-notification.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 13
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-13
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-13
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-13
      path: /data-13/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-13
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-13.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 33
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-33
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-33
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-33
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-33.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 27
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-27
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-27
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#pharma'
          text: 'Completed workflow 27: {{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-27
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-27.yml

When a patient is referred to a support program, verifies insurance eligibility via Salesforce Health Cloud, creates a case in the patient hub, and sends an enrollment confirmation via Twilio SMS.

naftiko: '0.5'
info:
  label: Patient Support Program Enrollment
  description: When a patient is referred to a support program, verifies insurance eligibility via Salesforce Health Cloud, creates a case in the patient hub, and sends an enrollment confirmation via Twilio SMS.
  tags:
  - patient-support
  - salesforce
  - salesforce-health-cloud
  - twilio
  - patient-enrollment
capability:
  exposes:
  - type: mcp
    namespace: patient-programs
    port: 8080
    tools:
    - name: enroll-patient
      description: Given a patient ID and program code, verify insurance eligibility, create a patient support case, and send enrollment confirmation via SMS.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The Salesforce Health Cloud patient ID.
      - name: program_code
        in: body
        type: string
        description: The patient support program code (e.g., NNI-OZEMPIC-PSP).
      - name: phone_number
        in: body
        type: string
        description: Patient phone number for SMS confirmation.
      steps:
      - name: verify-eligibility
        type: call
        call: sfdc-health.get-patient-eligibility
        with:
          patient_id: '{{patient_id}}'
          program_code: '{{program_code}}'
      - name: create-case
        type: call
        call: sfdc-health.create-case
        with:
          patient_id: '{{patient_id}}'
          subject: 'PSP Enrollment: {{program_code}}'
          description: 'Patient {{patient_id}} enrolled in {{program_code}}. Eligibility status: {{verify-eligibility.eligibility_status}}. Coverage: {{verify-eligibility.coverage_type}}.'
          record_type: patient_support
      - name: send-confirmation
        type: call
        call: twilio.send-sms
        with:
          to: '{{phone_number}}'
          body: You have been enrolled in the Novo Nordisk patient support program ({{program_code}}). Your case reference is {{create-case.case_number}}. Questions? Call 1-888-NOVO.
  consumes:
  - type: http
    namespace: sfdc-health
    baseUri: https://novonordisk.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_token
    resources:
    - name: patient-eligibility
      path: /sobjects/PatientEligibility__c/{{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: get-patient-eligibility
        method: GET
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: twilio
    baseUri: https://api.twilio.com/2010-04-01/Accounts/$secrets.twilio_account_sid
    authentication:
      type: basic
      username: $secrets.twilio_account_sid
      password: $secrets.twilio_auth_token
    resources:
    - name: messages
      path: /Messages.json
      operations:
      - name: send-sms
        method: POST
Open in Framework → View in Fleet → patient-support-program-enrollment.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 1
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-1
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-1
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://novonordisk.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-1.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 4
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-4
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-4
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-4
      path: /data-4/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-4
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-4.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 5
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-5
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-5
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-5
      path: /data-5/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-5
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-5.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 26
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-26
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-26
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-26
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-26.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 32
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-32
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-32
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_32
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-32
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://novonordisk-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-32.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 12
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-12
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-12
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-12
      path: /data-12/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-12.yml

Retrieves prescriber engagement data from Veeva CRM, pulls latest real-world evidence from the medical information system, creates a personalized outreach plan in Salesforce Marketing Cloud, and logs the interaction in Veeva CRM.

naftiko: '0.5'
info:
  label: GLP-1 Prescriber Engagement Orchestrator
  description: Retrieves prescriber engagement data from Veeva CRM, pulls latest real-world evidence from the medical information system, creates a personalized outreach plan in Salesforce Marketing Cloud, and logs the interaction in Veeva CRM.
  tags:
  - commercial
  - medical-affairs
  - veeva-crm
  - salesforce-marketing-cloud
  - hcp-engagement
  - glp-1
capability:
  exposes:
  - type: mcp
    namespace: hcp-outreach
    port: 8080
    tools:
    - name: plan-prescriber-outreach
      description: Given a prescriber NPI and product, pull engagement history, retrieve relevant evidence, create a targeted outreach campaign, and log the plan.
      inputParameters:
      - name: npi_number
        in: body
        type: string
        description: The prescriber NPI number.
      - name: product_name
        in: body
        type: string
        description: The product for the engagement (e.g., Ozempic, Wegovy, Rybelsus).
      steps:
      - name: get-prescriber
        type: call
        call: veeva-crm.get-hcp
        with:
          npi_number: '{{npi_number}}'
      - name: get-evidence
        type: call
        call: med-info.get-evidence
        with:
          product_name: '{{product_name}}'
          specialty: '{{get-prescriber.specialty}}'
      - name: create-campaign
        type: call
        call: sfmc.create-journey
        with:
          contact_email: '{{get-prescriber.email}}'
          journey_name: '{{product_name}}_outreach_{{get-prescriber.territory}}'
          content_key: '{{get-evidence.content_key}}'
      - name: log-interaction
        type: call
        call: veeva-crm.log-call
        with:
          npi_number: '{{npi_number}}'
          call_type: outreach_plan
          notes: 'Outreach plan created for {{product_name}}. Campaign: {{create-campaign.journey_id}}. Evidence: {{get-evidence.title}}.'
  consumes:
  - type: http
    namespace: veeva-crm
    baseUri: https://novonordisk.veevacrm.com/api/v1
    authentication:
      type: bearer
      token: $secrets.veeva_crm_token
    resources:
    - name: hcps
      path: /accounts?q=npi__v={{npi_number}}
      inputParameters:
      - name: npi_number
        in: query
      operations:
      - name: get-hcp
        method: GET
    - name: calls
      path: /calls
      operations:
      - name: log-call
        method: POST
  - type: http
    namespace: med-info
    baseUri: https://medinfo.novonordisk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.medinfo_token
    resources:
    - name: evidence
      path: /evidence?product={{product_name}}&specialty={{specialty}}
      inputParameters:
      - name: product_name
        in: query
      - name: specialty
        in: query
      operations:
      - name: get-evidence
        method: GET
  - type: http
    namespace: sfmc
    baseUri: https://novonordisk.rest.marketingcloudapis.com/v1
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: journeys
      path: /journeys
      operations:
      - name: create-journey
        method: POST
Open in Framework → View in Fleet → glp-1-prescriber-engagement-orchestrator.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 17
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-17
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-17
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_17
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-17
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-17.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 8
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-8
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-8
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-8
      path: /data-8/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-8
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-8.yml

Retrieves operational data for Novo Nordisk pharma workflows.

naftiko: '0.5'
info:
  label: Novo Nordisk Data Lookup 9
  description: Retrieves operational data for Novo Nordisk pharma workflows.
  tags:
  - pharma
  - operations
capability:
  exposes:
  - type: mcp
    namespace: novonordisk-data
    port: 8080
    tools:
    - name: get-data-9
      description: Retrieves operational data for Novo Nordisk pharma workflows.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Resource identifier
      call: novonordisk-data.get-data-9
      with:
        identifier: '{{identifier}}'
  consumes:
  - type: http
    namespace: novonordisk-data
    baseUri: https://api.novonordisk.com/data/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: data-9
      path: /data-9/{{identifier}}
      inputParameters:
      - name: identifier
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → novo-nordisk-data-lookup-9.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 16
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-16
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-16
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: PHARMA
          title: Report 16
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-16
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://novonordisk.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-16.yml

When a clinical data query is opened in Medidata Rave, retrieves the query details, creates a follow-up task in Jira for the data management team, and notifies the site monitor on Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Data Query Resolution Workflow
  description: When a clinical data query is opened in Medidata Rave, retrieves the query details, creates a follow-up task in Jira for the data management team, and notifies the site monitor on Microsoft Teams.
  tags:
  - clinical-trials
  - data-management
  - medidata-rave
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ct-data-queries
    port: 8080
    tools:
    - name: route-data-query
      description: Given a Medidata Rave query ID and study ID, retrieve the query, create a Jira task for data management, and notify the site monitor.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The Medidata Rave study identifier.
      - name: query_id
        in: body
        type: string
        description: The data query identifier from Medidata Rave.
      - name: monitor_email
        in: body
        type: string
        description: The clinical site monitor email address.
      steps:
      - name: get-query
        type: call
        call: medidata.get-query
        with:
          study_id: '{{study_id}}'
          query_id: '{{query_id}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project_key: CDM
          issue_type: Task
          summary: Data query {{query_id}} — {{get-query.query_text}}
          description: 'Study: {{study_id}}, Site: {{get-query.site_number}}, Subject: {{get-query.subject_id}}, Form: {{get-query.form_name}}, Field: {{get-query.field_name}}. Query: {{get-query.query_text}}'
          priority: '{{get-query.priority}}'
      - name: notify-monitor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{monitor_email}}'
          text: 'Data query {{query_id}} opened for study {{study_id}}, site {{get-query.site_number}}. Subject: {{get-query.subject_id}}. Jira: {{create-jira-task.key}}. Query: {{get-query.query_text}}'
  consumes:
  - type: http
    namespace: medidata
    baseUri: https://api.imedidata.com/rave/v1
    authentication:
      type: bearer
      token: $secrets.medidata_token
    resources:
    - name: queries
      path: /studies/{{study_id}}/queries/{{query_id}}
      inputParameters:
      - name: study_id
        in: path
      - name: query_id
        in: path
      operations:
      - name: get-query
        method: GET
  - type: http
    namespace: jira
    baseUri: https://novonordisk.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-data-query-resolution-workflow.yml

Retrieves health authority correspondence from Veeva Vault RIM, logs the response deadline in Jira, and sends a reminder to the regulatory affairs lead on Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Health Authority Correspondence Tracker
  description: Retrieves health authority correspondence from Veeva Vault RIM, logs the response deadline in Jira, and sends a reminder to the regulatory affairs lead on Microsoft Teams.
  tags:
  - regulatory
  - veeva-vault
  - jira
  - microsoft-teams
  - health-authority
capability:
  exposes:
  - type: mcp
    namespace: reg-correspondence
    port: 8080
    tools:
    - name: track-ha-correspondence
      description: Given a Veeva Vault RIM correspondence ID, retrieve details, create a Jira tracking issue, and notify the regulatory lead.
      inputParameters:
      - name: correspondence_id
        in: body
        type: string
        description: The Veeva Vault RIM correspondence document ID.
      - name: reg_lead_email
        in: body
        type: string
        description: The regulatory affairs lead email.
      steps:
      - name: get-correspondence
        type: call
        call: veeva-rim.get-correspondence
        with:
          correspondence_id: '{{correspondence_id}}'
      - name: create-tracking-issue
        type: call
        call: jira.create-issue
        with:
          project_key: REG
          issue_type: Task
          summary: 'HA Correspondence: {{get-correspondence.subject}} — Due {{get-correspondence.response_due_date}}'
          description: 'Authority: {{get-correspondence.authority}}. Product: {{get-correspondence.product}}. Type: {{get-correspondence.correspondence_type}}. Response due: {{get-correspondence.response_due_date}}.'
          priority: High
      - name: notify-reg-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{reg_lead_email}}'
          text: 'New HA correspondence received: {{get-correspondence.subject}}. Authority: {{get-correspondence.authority}}. Response due: {{get-correspondence.response_due_date}}. Jira: {{create-tracking-issue.key}}.'
  consumes:
  - type: http
    namespace: veeva-rim
    baseUri: https://novonordisk-rim.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_rim_token
    resources:
    - name: correspondence
      path: /objects/correspondence__v/{{correspondence_id}}
      inputParameters:
      - name: correspondence_id
        in: path
      operations:
      - name: get-correspondence
        method: GET
  - type: http
    namespace: jira
    baseUri: https://novonordisk.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-health-authority-correspondence-tracker.yml

Queries PubMed for new publications mentioning Novo Nordisk products, screens for potential adverse event reports, logs findings in Veeva Vault Safety, and notifies the literature surveillance team on Microsoft Teams.

naftiko: '0.5'
info:
  label: Pharmacovigilance Literature Screening Pipeline
  description: Queries PubMed for new publications mentioning Novo Nordisk products, screens for potential adverse event reports, logs findings in Veeva Vault Safety, and notifies the literature surveillance team on Microsoft Teams.
  tags:
  - pharmacovigilance
  - literature-surveillance
  - pubmed
  - veeva-vault
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pv-literature
    port: 8080
    tools:
    - name: screen-literature
      description: Given a product name and date range, search PubMed for new publications, identify potential safety signals, and log findings in Veeva Vault Safety.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product name to search (e.g., semaglutide, liraglutide).
      - name: date_from
        in: body
        type: string
        description: Search start date (YYYY/MM/DD).
      - name: date_to
        in: body
        type: string
        description: Search end date (YYYY/MM/DD).
      steps:
      - name: search-pubmed
        type: call
        call: pubmed.search-articles
        with:
          query: '{{product_name}} AND (adverse OR safety OR side effect)'
          date_from: '{{date_from}}'
          date_to: '{{date_to}}'
      - name: log-findings
        type: call
        call: veeva-safety.create-literature-case
        with:
          product_name: '{{product_name}}'
          article_count: '{{search-pubmed.result_count}}'
          articles: '{{search-pubmed.articles}}'
      - name: notify-surveillance-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: pv-safety-operations
          channel_id: literature-screening
          text: 'Literature screening complete for {{product_name}} ({{date_from}} to {{date_to}}). {{search-pubmed.result_count}} articles found. {{log-findings.cases_created}} potential safety cases created. Review: {{log-findings.review_url}}'
  consumes:
  - type: http
    namespace: pubmed
    baseUri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils
    authentication:
      type: apiKey
      name: api_key
      in: query
      value: $secrets.pubmed_api_key
    resources:
    - name: search
      path: /esearch.fcgi
      operations:
      - name: search-articles
        method: GET
  - type: http
    namespace: veeva-safety
    baseUri: https://novonordisk-safety.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_safety_token
    resources:
    - name: literature-cases
      path: /objects/safety_case/actions/literature-intake
      operations:
      - name: create-literature-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-literature-screening-pipeline.yml

Aggregates adverse event data from Medidata Rave, pulls the latest DSMB recommendations from SharePoint, generates a periodic safety report in Veeva Vault eTMF, and notifies the medical monitor on Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Safety Report Generator
  description: Aggregates adverse event data from Medidata Rave, pulls the latest DSMB recommendations from SharePoint, generates a periodic safety report in Veeva Vault eTMF, and notifies the medical monitor on Microsoft Teams.
  tags:
  - clinical-trials
  - safety-reporting
  - medidata-rave
  - sharepoint
  - veeva-vault
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ct-safety-reports
    port: 8080
    tools:
    - name: generate-safety-report
      description: Given a study ID and reporting period, aggregate AE data, pull DSMB notes, create a safety report in eTMF, and notify the medical monitor.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier.
      - name: period_start
        in: body
        type: string
        description: Reporting period start date (YYYY-MM-DD).
      - name: period_end
        in: body
        type: string
        description: Reporting period end date (YYYY-MM-DD).
      - name: medical_monitor_email
        in: body
        type: string
        description: Email of the medical monitor.
      steps:
      - name: get-ae-summary
        type: call
        call: medidata.get-ae-summary
        with:
          study_id: '{{study_id}}'
          period_start: '{{period_start}}'
          period_end: '{{period_end}}'
      - name: get-dsmb-notes
        type: call
        call: sharepoint.get-file
        with:
          site_id: clinical-ops
          file_path: DSMB/{{study_id}}/latest_recommendations.pdf
      - name: create-safety-report
        type: call
        call: veeva-etmf.create-document
        with:
          study_id: '{{study_id}}'
          document_type: periodic_safety_report
          title: Safety Report {{study_id}} ({{period_start}} to {{period_end}})
          ae_count: '{{get-ae-summary.total_events}}'
          sae_count: '{{get-ae-summary.serious_events}}'
      - name: notify-medical-monitor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{medical_monitor_email}}'
          text: 'Periodic safety report generated for study {{study_id}} ({{period_start}} to {{period_end}}). Total AEs: {{get-ae-summary.total_events}}, SAEs: {{get-ae-summary.serious_events}}. Report: {{create-safety-report.document_url}}.'
  consumes:
  - type: http
    namespace: medidata
    baseUri: https://api.imedidata.com/rave/v1
    authentication:
      type: bearer
      token: $secrets.medidata_token
    resources:
    - name: ae-summary
      path: /studies/{{study_id}}/adverse-events/summary
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-ae-summary
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: veeva-etmf
    baseUri: https://novonordisk-etmf.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_etmf_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-safety-report-generator.yml

Retrieves stability study sample information from LabWare LIMS, checks upcoming pull dates, and creates a ServiceNow task for the QC lab when the next pull is due within 7 days.

naftiko: '0.5'
info:
  label: Stability Study Sample Pull Reminder
  description: Retrieves stability study sample information from LabWare LIMS, checks upcoming pull dates, and creates a ServiceNow task for the QC lab when the next pull is due within 7 days.
  tags:
  - quality
  - stability
  - labware
  - lims
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: stability
    port: 8080
    tools:
    - name: check-stability-pulls
      description: Given a stability study ID, check sample status and create a ServiceNow task if the next pull date is approaching.
      inputParameters:
      - name: stability_study_id
        in: body
        type: string
        description: The LabWare LIMS stability study identifier.
      steps:
      - name: get-study
        type: call
        call: labware.get-stability-study
        with:
          stability_study_id: '{{stability_study_id}}'
      - name: create-pull-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Stability sample pull due: Study {{stability_study_id}} — {{get-study.next_pull_date}}'
          description: 'Stability study {{stability_study_id}}: {{get-study.completed_timepoints}} time points completed, {{get-study.total_samples}} total samples. Next pull date: {{get-study.next_pull_date}}. Storage condition: {{get-study.storage_condition}}.'
          assigned_group: QC_Stability_Lab
          category: stability_testing
  consumes:
  - type: http
    namespace: labware
    baseUri: https://lims.novonordisk.com/labware/api/v3
    authentication:
      type: bearer
      token: $secrets.labware_token
    resources:
    - name: stability-studies
      path: /stability-studies/{{stability_study_id}}
      inputParameters:
      - name: stability_study_id
        in: path
      operations:
      - name: get-stability-study
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → stability-study-sample-pull-reminder.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 28
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-28
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-28
        with:
          identifier: '{{identifier}}'
      - name: publish
        type: call
        call: confluence.create-page
        with:
          space: PHARMA
          title: Report 28
          content: '{{process.report}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-28
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://novonordisk.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-28.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 14
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-14
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-14
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: servicenow.create-incident
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-14
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-14.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 15
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-15
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-15
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#pharma'
          text: 'Completed workflow 15: {{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-15
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-15.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 29
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-29
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-29
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: workflow_29
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-29
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-29.yml

Retrieves a safety case from Veeva Vault Safety by case number and returns case type, seriousness, product, reporter type, and current workflow state.

naftiko: '0.5'
info:
  label: Veeva Vault Safety Case Lookup
  description: Retrieves a safety case from Veeva Vault Safety by case number and returns case type, seriousness, product, reporter type, and current workflow state.
  tags:
  - pharmacovigilance
  - veeva-vault
  - safety-case
capability:
  exposes:
  - type: mcp
    namespace: pv-cases
    port: 8080
    tools:
    - name: get-safety-case
      description: Look up a safety case in Veeva Vault Safety by case number. Returns case type, seriousness, product, and workflow state.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: The Veeva Vault Safety case number.
      call: veeva-safety.get-case
      with:
        case_number: '{{case_number}}'
      outputParameters:
      - name: case_type
        type: string
        mapping: $.data.case_type__v
      - name: seriousness
        type: string
        mapping: $.data.seriousness_criteria__v
      - name: product
        type: string
        mapping: $.data.product__v.name
      - name: workflow_state
        type: string
        mapping: $.data.lifecycle__v.state
  consumes:
  - type: http
    namespace: veeva-safety
    baseUri: https://novonordisk-safety.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_safety_token
    resources:
    - name: cases
      path: /objects/safety_case/{{case_number}}
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → veeva-vault-safety-case-lookup.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 11
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-11
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-11
        with:
          identifier: '{{identifier}}'
      - name: notify
        type: call
        call: hubspot.send-email
        with:
          to: '{{process.email}}'
          subject: Workflow 11 Complete
          body: '{{process.summary}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-11
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-11.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 10
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-10
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-10
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: sharepoint.upload-document
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-10
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://novonordisk.sharepoint.com/_api/v2.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: upload-document
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-10.yml

Retrieves clinical trial subject visit data from Medidata Rave by study and subject ID and returns visit schedule compliance, completed visits, and next scheduled visit.

naftiko: '0.5'
info:
  label: Medidata Rave Subject Visit Lookup
  description: Retrieves clinical trial subject visit data from Medidata Rave by study and subject ID and returns visit schedule compliance, completed visits, and next scheduled visit.
  tags:
  - clinical-trials
  - medidata-rave
  - subject-visits
capability:
  exposes:
  - type: mcp
    namespace: ct-visits
    port: 8080
    tools:
    - name: get-subject-visits
      description: Look up subject visit data in Medidata Rave. Returns completed visits, missed visits, and next scheduled visit date.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The Medidata Rave study identifier.
      - name: subject_id
        in: body
        type: string
        description: The subject identifier.
      call: medidata.get-visits
      with:
        study_id: '{{study_id}}'
        subject_id: '{{subject_id}}'
      outputParameters:
      - name: completed_visits
        type: number
        mapping: $.data.completed_count
      - name: missed_visits
        type: number
        mapping: $.data.missed_count
      - name: next_visit_date
        type: string
        mapping: $.data.next_visit.scheduled_date
      - name: next_visit_type
        type: string
        mapping: $.data.next_visit.visit_name
  consumes:
  - type: http
    namespace: medidata
    baseUri: https://api.imedidata.com/rave/v1
    authentication:
      type: bearer
      token: $secrets.medidata_token
    resources:
    - name: visits
      path: /studies/{{study_id}}/subjects/{{subject_id}}/visits
      inputParameters:
      - name: study_id
        in: path
      - name: subject_id
        in: path
      operations:
      - name: get-visits
        method: GET
Open in Framework → View in Fleet → medidata-rave-subject-visit-lookup.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 12
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-12
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-12
        with:
          identifier: '{{identifier}}'
      - name: push
        type: call
        call: datadog.submit-metrics
        with:
          metric_name: pharma.workflow_12
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-12
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_token
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: submit-metrics
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-12.yml

Retrieves a Trial Master File document from Veeva Vault eTMF by document ID and returns title, status, study association, and filing date.

naftiko: '0.5'
info:
  label: Veeva Vault eTMF Document Lookup
  description: Retrieves a Trial Master File document from Veeva Vault eTMF by document ID and returns title, status, study association, and filing date.
  tags:
  - clinical-trials
  - veeva-vault
  - etmf
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: etmf-docs
    port: 8080
    tools:
    - name: get-etmf-document
      description: Look up an eTMF document in Veeva Vault by document ID. Returns title, lifecycle state, study, and country.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault eTMF document ID.
      call: veeva-etmf.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.data.name__v
      - name: lifecycle_state
        type: string
        mapping: $.data.lifecycle__v.state
      - name: study
        type: string
        mapping: $.data.study__v.name
      - name: country
        type: string
        mapping: $.data.country__v
  consumes:
  - type: http
    namespace: veeva-etmf
    baseUri: https://novonordisk-etmf.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_etmf_token
    resources:
    - name: documents
      path: /objects/documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → veeva-vault-etmf-document-lookup.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 8
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-8
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-8
        with:
          identifier: '{{identifier}}'
      - name: refresh
        type: call
        call: tableau.publish-datasource
        with:
          dataset_id: workflow_8
          data: '{{process.metrics}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-8
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://novonordisk-tableau.online.tableau.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /datasources
      operations:
      - name: publish-datasource
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-8.yml

Queries Medidata Rave for current enrollment counts, compares against CTMS targets, and posts a progress update to the clinical operations Slack channel when enrollment milestones are reached or at risk.

naftiko: '0.5'
info:
  label: Clinical Trial Enrollment Tracker and Alert
  description: Queries Medidata Rave for current enrollment counts, compares against CTMS targets, and posts a progress update to the clinical operations Slack channel when enrollment milestones are reached or at risk.
  tags:
  - clinical-trials
  - medidata-rave
  - enrollment
  - ctms
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ct-enrollment
    port: 8080
    tools:
    - name: track-enrollment
      description: Given a study ID, pull enrollment counts from Medidata Rave, compare against CTMS targets, and alert clinical ops on Slack.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The Medidata Rave study identifier.
      steps:
      - name: get-enrollment
        type: call
        call: medidata.get-enrollment
        with:
          study_id: '{{study_id}}'
      - name: get-targets
        type: call
        call: ctms.get-enrollment-targets
        with:
          study_id: '{{study_id}}'
      - name: post-update
        type: call
        call: slack.post-message
        with:
          channel: clinical-operations
          text: 'Enrollment update — Study {{study_id}}: Enrolled {{get-enrollment.enrolled_count}}/{{get-targets.target_enrollment}} ({{get-enrollment.sites_active}} active sites). Screened: {{get-enrollment.screened_count}}. Target date: {{get-targets.target_date}}.'
  consumes:
  - type: http
    namespace: medidata
    baseUri: https://api.imedidata.com/rave/v1
    authentication:
      type: bearer
      token: $secrets.medidata_token
    resources:
    - name: enrollment
      path: /studies/{{study_id}}/enrollment
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-enrollment
        method: GET
  - type: http
    namespace: ctms
    baseUri: https://ctms.novonordisk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.ctms_token
    resources:
    - name: enrollment-targets
      path: /studies/{{study_id}}/enrollment-targets
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-enrollment-targets
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-enrollment-tracker-and-alert.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 9
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - box
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-9
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-9
        with:
          identifier: '{{identifier}}'
      - name: upload
        type: call
        call: box.upload-file
        with:
          content: '{{process.document}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-9
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-9.yml

When a site investigator logs an adverse event in Medidata Rave, retrieves trial and patient context, creates a safety case in Veeva Vault Safety, and notifies the pharmacovigilance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Adverse Event Reporter
  description: When a site investigator logs an adverse event in Medidata Rave, retrieves trial and patient context, creates a safety case in Veeva Vault Safety, and notifies the pharmacovigilance team via Microsoft Teams.
  tags:
  - pharmacovigilance
  - clinical-trials
  - medidata-rave
  - veeva-vault
  - microsoft-teams
  - adverse-events
capability:
  exposes:
  - type: mcp
    namespace: pv-adverse-events
    port: 8080
    tools:
    - name: report-adverse-event
      description: Given a Medidata Rave adverse event form ID and study ID, pull event details, create a Veeva Vault Safety case, and alert the pharmacovigilance team on Microsoft Teams.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The Medidata Rave study identifier.
      - name: ae_form_id
        in: body
        type: string
        description: The adverse event form ID from Medidata Rave.
      - name: site_number
        in: body
        type: string
        description: The clinical site number where the event was reported.
      steps:
      - name: get-ae-form
        type: call
        call: medidata.get-ae-form
        with:
          study_id: '{{study_id}}'
          form_id: '{{ae_form_id}}'
      - name: create-safety-case
        type: call
        call: veeva-safety.create-case
        with:
          case_type: adverse_event
          study_id: '{{study_id}}'
          site_number: '{{site_number}}'
          event_term: '{{get-ae-form.preferred_term}}'
          severity: '{{get-ae-form.severity}}'
          onset_date: '{{get-ae-form.onset_date}}'
          patient_id: '{{get-ae-form.subject_id}}'
      - name: notify-pv-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: pv-safety-operations
          channel_id: ae-alerts
          text: 'New AE reported — Study {{study_id}}, Site {{site_number}}: {{get-ae-form.preferred_term}} ({{get-ae-form.severity}}). Safety case {{create-safety-case.case_number}} created in Veeva Vault.'
  consumes:
  - type: http
    namespace: medidata
    baseUri: https://api.imedidata.com/rave/v1
    authentication:
      type: bearer
      token: $secrets.medidata_token
    resources:
    - name: ae-forms
      path: /studies/{{study_id}}/forms/{{form_id}}
      inputParameters:
      - name: study_id
        in: path
      - name: form_id
        in: path
      operations:
      - name: get-ae-form
        method: GET
  - type: http
    namespace: veeva-safety
    baseUri: https://novonordisk-safety.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_safety_token
    resources:
    - name: cases
      path: /objects/safety_case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-adverse-event-reporter.yml

Queries SAP S/4HANA for an insulin manufacturing batch record and returns batch status, yield, release state, and quality disposition.

naftiko: '0.5'
info:
  label: SAP Manufacturing Batch Status
  description: Queries SAP S/4HANA for an insulin manufacturing batch record and returns batch status, yield, release state, and quality disposition.
  tags:
  - manufacturing
  - sap
  - sap-s4hana
  - batch-management
  - quality
capability:
  exposes:
  - type: mcp
    namespace: mfg-batch
    port: 8080
    tools:
    - name: get-batch-status
      description: Look up an SAP manufacturing batch by batch number and plant code. Returns batch status, quantity produced, quality inspection result, and release state.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number.
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code (e.g., DK01 for Kalundborg).
      call: sap.get-batch
      with:
        batch_number: '{{batch_number}}'
        plant_code: '{{plant_code}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.d.BatchStatus
      - name: quantity_produced
        type: string
        mapping: $.d.TotalGoodsReceiptQty
      - name: inspection_result
        type: string
        mapping: $.d.QualityInspectionResult
      - name: release_state
        type: string
        mapping: $.d.BatchReleaseIndicator
  consumes:
  - type: http
    namespace: sap
    baseUri: https://novonordisk-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: batches
      path: /A_Batch(Batch='{{batch_number}}',Plant='{{plant_code}}')
      inputParameters:
      - name: batch_number
        in: path
      - name: plant_code
        in: path
      operations:
      - name: get-batch
        method: GET
Open in Framework → View in Fleet → sap-manufacturing-batch-status.yml

Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.

naftiko: '0.5'
info:
  label: Novo Nordisk Workflow 13
  description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
  tags:
  - pharma
  - operations
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: pharma
    port: 8080
    tools:
    - name: novo-nordisk-workflow-13
      description: Orchestrates pharma operations including data retrieval, processing, and automated notification for Novo Nordisk.
      inputParameters:
      - name: identifier
        in: body
        type: string
        description: Primary identifier for this workflow
      steps:
      - name: process
        type: call
        call: novonordisk-ops.run-workflow-13
        with:
          identifier: '{{identifier}}'
      - name: create
        type: call
        call: salesforce.create-account
        with:
          data: '{{process.result}}'
  consumes:
  - type: http
    namespace: novonordisk-ops
    baseUri: https://api.novonordisk.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.novonordisk_api_token
    resources:
    - name: operations
      path: /operations
      operations:
      - name: run-workflow-13
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://novonordisk.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /accounts
      operations:
      - name: create-account
        method: POST
Open in Framework → View in Fleet → novo-nordisk-workflow-13.yml

Generates a Periodic Safety Update Report by pulling case data from Veeva Vault Safety, aggregating line listings, creating the PSUR document in Veeva Vault RIM, and scheduling the regulatory submission in Jira.

naftiko: '0.5'
info:
  label: Regulatory PSUR Generation Pipeline
  description: Generates a Periodic Safety Update Report by pulling case data from Veeva Vault Safety, aggregating line listings, creating the PSUR document in Veeva Vault RIM, and scheduling the regulatory submission in Jira.
  tags:
  - pharmacovigilance
  - regulatory
  - psur
  - veeva-vault
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pv-psur
    port: 8080
    tools:
    - name: generate-psur
      description: Given a product name and PSUR period, aggregate safety data, generate the PSUR document, and schedule the regulatory submission.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The product name for the PSUR.
      - name: period_start
        in: body
        type: string
        description: PSUR period start date (YYYY-MM-DD).
      - name: period_end
        in: body
        type: string
        description: PSUR period end date (YYYY-MM-DD).
      - name: submission_deadline
        in: body
        type: string
        description: Regulatory submission deadline (YYYY-MM-DD).
      steps:
      - name: get-case-data
        type: call
        call: veeva-safety.get-psur-cases
        with:
          product_name: '{{product_name}}'
          period_start: '{{period_start}}'
          period_end: '{{period_end}}'
      - name: create-psur-document
        type: call
        call: veeva-rim.create-psur
        with:
          product_name: '{{product_name}}'
          period_start: '{{period_start}}'
          period_end: '{{period_end}}'
          case_count: '{{get-case-data.total_cases}}'
          sae_count: '{{get-case-data.serious_cases}}'
      - name: schedule-submission
        type: call
        call: jira.create-issue
        with:
          project_key: REG
          issue_type: Task
          summary: 'Submit PSUR: {{product_name}} ({{period_start}} to {{period_end}})'
          description: 'PSUR document: {{create-psur-document.document_url}}. Total cases: {{get-case-data.total_cases}}, SAEs: {{get-case-data.serious_cases}}. Submission deadline: {{submission_deadline}}.'
          priority: High
          due_date: '{{submission_deadline}}'
  consumes:
  - type: http
    namespace: veeva-safety
    baseUri: https://novonordisk-safety.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_safety_token
    resources:
    - name: psur-cases
      path: /objects/safety_case/actions/psur-aggregate
      operations:
      - name: get-psur-cases
        method: POST
  - type: http
    namespace: veeva-rim
    baseUri: https://novonordisk-rim.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_rim_token
    resources:
    - name: psur
      path: /objects/psur__v
      operations:
      - name: create-psur
        method: POST
  - type: http
    namespace: jira
    baseUri: https://novonordisk.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → regulatory-psur-generation-pipeline.yml

Takes an Individual Case Safety Report from Veeva Vault Safety, formats it for E2B(R3) compliance, submits to the EudraVigilance gateway, and logs the submission in ServiceNow.

naftiko: '0.5'
info:
  label: Pharmacovigilance ICSR Submission Pipeline
  description: Takes an Individual Case Safety Report from Veeva Vault Safety, formats it for E2B(R3) compliance, submits to the EudraVigilance gateway, and logs the submission in ServiceNow.
  tags:
  - pharmacovigilance
  - icsr
  - veeva-vault
  - eudravigilance
  - servicenow
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: pv-icsr
    port: 8080
    tools:
    - name: submit-icsr
      description: Given a Veeva Vault Safety case number, generate the E2B(R3) XML, submit to EudraVigilance, and log the submission in ServiceNow.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: The Veeva Vault Safety case number.
      - name: target_authority
        in: body
        type: string
        description: The target authority (e.g., EMA, FDA).
      steps:
      - name: get-safety-case
        type: call
        call: veeva-safety.get-case
        with:
          case_number: '{{case_number}}'
      - name: generate-e2b
        type: call
        call: veeva-safety.generate-e2b
        with:
          case_number: '{{case_number}}'
          format: E2B_R3
          authority: '{{target_authority}}'
      - name: submit-to-authority
        type: call
        call: eudravigilance.submit-icsr
        with:
          e2b_xml: '{{generate-e2b.xml_payload}}'
          authority: '{{target_authority}}'
      - name: log-submission
        type: call
        call: servicenow.create-task
        with:
          short_description: 'ICSR submitted: {{case_number}} to {{target_authority}}'
          description: 'Case {{case_number}} submitted to {{target_authority}}. Acknowledgment ID: {{submit-to-authority.ack_id}}. Submission timestamp: {{submit-to-authority.timestamp}}.'
          assigned_group: PV_Submissions
          category: icsr_submission
  consumes:
  - type: http
    namespace: veeva-safety
    baseUri: https://novonordisk-safety.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_safety_token
    resources:
    - name: cases
      path: /objects/safety_case/{{case_number}}
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: get-case
        method: GET
    - name: e2b-export
      path: /objects/safety_case/{{case_number}}/actions/export-e2b
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: generate-e2b
        method: POST
  - type: http
    namespace: eudravigilance
    baseUri: https://eudravigilance.ema.europa.eu/gateway/v1
    authentication:
      type: certificate
      cert: $secrets.eudra_cert
      key: $secrets.eudra_key
    resources:
    - name: icsr
      path: /submit
      operations:
      - name: submit-icsr
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-icsr-submission-pipeline.yml

Pulls patient outcome data from the electronic health record integration, retrieves prescription adherence from the pharmacy benefit manager API, generates an outcome report in SharePoint, and notifies the HEOR team on Slack.

naftiko: '0.5'
info:
  label: Diabetes Patient Outcome Reporting Pipeline
  description: Pulls patient outcome data from the electronic health record integration, retrieves prescription adherence from the pharmacy benefit manager API, generates an outcome report in SharePoint, and notifies the HEOR team on Slack.
  tags:
  - patient-outcomes
  - heor
  - ehr-integration
  - pharmacy-benefits
  - sharepoint
  - slack
capability:
  exposes:
  - type: mcp
    namespace: patient-outcomes
    port: 8080
    tools:
    - name: generate-outcome-report
      description: Given a patient cohort ID and time period, pull EHR outcome data, get adherence metrics, store the report, and notify the HEOR team.
      inputParameters:
      - name: cohort_id
        in: body
        type: string
        description: The patient cohort identifier.
      - name: period_start
        in: body
        type: string
        description: Reporting period start (YYYY-MM-DD).
      - name: period_end
        in: body
        type: string
        description: Reporting period end (YYYY-MM-DD).
      steps:
      - name: get-outcomes
        type: call
        call: ehr-integration.get-cohort-outcomes
        with:
          cohort_id: '{{cohort_id}}'
          period_start: '{{period_start}}'
          period_end: '{{period_end}}'
      - name: get-adherence
        type: call
        call: pbm.get-adherence-metrics
        with:
          cohort_id: '{{cohort_id}}'
          period_start: '{{period_start}}'
          period_end: '{{period_end}}'
      - name: store-report
        type: call
        call: sharepoint.create-file
        with:
          site_id: heor-analytics
          file_path: OutcomeReports/{{cohort_id}}_{{period_start}}_{{period_end}}.json
          content_type: application/json
      - name: notify-heor
        type: call
        call: slack.post-message
        with:
          channel: heor-analytics
          text: 'Outcome report generated for cohort {{cohort_id}} ({{period_start}} to {{period_end}}). Patients: {{get-outcomes.patient_count}}. Mean HbA1c change: {{get-outcomes.mean_hba1c_change}}. Adherence rate: {{get-adherence.pdc_rate}}%. Report: {{store-report.url}}'
  consumes:
  - type: http
    namespace: ehr-integration
    baseUri: https://ehr-hub.novonordisk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ehr_token
    resources:
    - name: cohort-outcomes
      path: /cohorts/{{cohort_id}}/outcomes
      inputParameters:
      - name: cohort_id
        in: path
      operations:
      - name: get-cohort-outcomes
        method: GET
  - type: http
    namespace: pbm
    baseUri: https://pbm-analytics.novonordisk.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pbm_token
    resources:
    - name: adherence
      path: /cohorts/{{cohort_id}}/adherence
      inputParameters:
      - name: cohort_id
        in: path
      operations:
      - name: get-adherence-metrics
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: create-file
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → diabetes-patient-outcome-reporting-pipeline.yml

Retrieves a supplier risk profile from SAP Ariba Supplier Risk and returns compliance status, financial health score, and regulatory certification status for procurement.

naftiko: '0.5'
info:
  label: Ariba Supplier Risk Assessment
  description: Retrieves a supplier risk profile from SAP Ariba Supplier Risk and returns compliance status, financial health score, and regulatory certification status for procurement.
  tags:
  - procurement
  - supplier-management
  - sap-ariba
  - risk
capability:
  exposes:
  - type: mcp
    namespace: supplier-risk
    port: 8080
    tools:
    - name: get-supplier-risk
      description: Look up a supplier risk profile in SAP Ariba by supplier ID. Returns overall risk score, compliance status, and certification validity.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier identifier.
      call: ariba.get-supplier-risk
      with:
        supplier_id: '{{supplier_id}}'
      outputParameters:
      - name: risk_score
        type: number
        mapping: $.data.overallRiskScore
      - name: compliance_status
        type: string
        mapping: $.data.complianceStatus
      - name: gmp_certification
        type: string
        mapping: $.data.certifications.gmp.status
      - name: financial_health
        type: string
        mapping: $.data.financialHealthIndicator
  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-profile
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier-risk
        method: GET
Open in Framework → View in Fleet → ariba-supplier-risk-assessment.yml

Pulls demand forecast data from SAP IBP, cross-references with current inventory in SAP S/4HANA, and creates a procurement requisition in SAP Ariba when stock falls below reorder point.

naftiko: '0.5'
info:
  label: Supply Chain Demand Forecast Pipeline
  description: Pulls demand forecast data from SAP IBP, cross-references with current inventory in SAP S/4HANA, and creates a procurement requisition in SAP Ariba when stock falls below reorder point.
  tags:
  - supply-chain
  - demand-planning
  - sap-ibp
  - sap-s4hana
  - sap-ariba
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: supply-demand
    port: 8080
    tools:
    - name: check-demand-vs-inventory
      description: Given a material number and planning horizon, pull the demand forecast from SAP IBP, check current stock in S/4HANA, and create an Ariba requisition if below reorder point.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      - name: horizon_weeks
        in: body
        type: number
        description: Number of weeks for the demand forecast horizon.
      steps:
      - name: get-forecast
        type: call
        call: sap-ibp.get-demand-forecast
        with:
          material_number: '{{material_number}}'
          plant_code: '{{plant_code}}'
          horizon_weeks: '{{horizon_weeks}}'
      - name: get-inventory
        type: call
        call: sap.get-stock
        with:
          material_number: '{{material_number}}'
          plant_code: '{{plant_code}}'
      - name: create-requisition
        type: call
        call: ariba.create-requisition
        with:
          material_number: '{{material_number}}'
          plant_code: '{{plant_code}}'
          quantity: '{{get-forecast.total_demand}}'
          justification: 'Forecasted demand: {{get-forecast.total_demand}} units over {{horizon_weeks}} weeks. Current stock: {{get-inventory.available_quantity}}. Reorder point: {{get-inventory.reorder_point}}.'
  consumes:
  - type: http
    namespace: sap-ibp
    baseUri: https://novonordisk-ibp.sap.com/sap/opu/odata/IBP/DEMAND_PLANNING_SRV
    authentication:
      type: basic
      username: $secrets.sap_ibp_user
      password: $secrets.sap_ibp_password
    resources:
    - name: forecast
      path: /DemandForecast(Material='{{material_number}}',Plant='{{plant_code}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant_code
        in: path
      operations:
      - name: get-demand-forecast
        method: GET
  - type: http
    namespace: sap
    baseUri: https://novonordisk-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod(Material='{{material_number}}',Plant='{{plant_code}}')
      inputParameters:
      - name: material_number
        in: path
      - name: plant_code
        in: path
      operations:
      - name: get-stock
        method: GET
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-req/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions
      operations:
      - name: create-requisition
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-forecast-pipeline.yml

Queries the Sensitech cold chain monitoring API for a shipment's temperature data and creates a quality deviation in ServiceNow if any excursion is detected during transit.

naftiko: '0.5'
info:
  label: Insulin Cold Chain Temperature Monitor
  description: Queries the Sensitech cold chain monitoring API for a shipment's temperature data and creates a quality deviation in ServiceNow if any excursion is detected during transit.
  tags:
  - supply-chain
  - cold-chain
  - sensitech
  - servicenow
  - quality
  - temperature-monitoring
capability:
  exposes:
  - type: mcp
    namespace: cold-chain
    port: 8080
    tools:
    - name: check-shipment-temperature
      description: Given a shipment tracking ID, pull cold chain temperature readings from Sensitech and open a ServiceNow deviation if excursions are found.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The Sensitech shipment tracking identifier.
      - name: product_name
        in: body
        type: string
        description: The product name being shipped (e.g., Ozempic, Wegovy).
      steps:
      - name: get-temperature-data
        type: call
        call: sensitech.get-readings
        with:
          shipment_id: '{{shipment_id}}'
      - name: open-deviation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Temperature excursion: {{product_name}} shipment {{shipment_id}}'
          category: quality_deviation
          assigned_group: QA_Cold_Chain
          description: 'Temperature excursion detected for {{product_name}} shipment {{shipment_id}}. Min temp: {{get-temperature-data.min_temp}}C, Max temp: {{get-temperature-data.max_temp}}C. Excursion duration: {{get-temperature-data.excursion_minutes}} minutes. Acceptable range: 2-8C.'
  consumes:
  - type: http
    namespace: sensitech
    baseUri: https://api.sensitech.com/v2
    authentication:
      type: bearer
      token: $secrets.sensitech_token
    resources:
    - name: readings
      path: /shipments/{{shipment_id}}/temperature
      inputParameters:
      - name: shipment_id
        in: path
      operations:
      - name: get-readings
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → insulin-cold-chain-temperature-monitor.yml

Validates that all required documents for an eCTD regulatory submission are present and approved in Veeva Vault RIM, checks the publishing queue status, and posts readiness summary to the regulatory affairs Slack channel.

naftiko: '0.5'
info:
  label: eCTD Submission Readiness Checker
  description: Validates that all required documents for an eCTD regulatory submission are present and approved in Veeva Vault RIM, checks the publishing queue status, and posts readiness summary to the regulatory affairs Slack channel.
  tags:
  - regulatory
  - ectd
  - veeva-vault
  - publishing
  - slack
capability:
  exposes:
  - type: mcp
    namespace: reg-submissions
    port: 8080
    tools:
    - name: check-submission-readiness
      description: Given a Veeva Vault RIM submission ID, validate document completeness, check publishing status, and alert the regulatory team on Slack.
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: The Veeva Vault RIM submission identifier.
      - name: target_authority
        in: body
        type: string
        description: The target regulatory authority (e.g., FDA, EMA, PMDA).
      steps:
      - name: get-submission
        type: call
        call: veeva-rim.get-submission
        with:
          submission_id: '{{submission_id}}'
      - name: check-documents
        type: call
        call: veeva-rim.validate-documents
        with:
          submission_id: '{{submission_id}}'
          authority: '{{target_authority}}'
      - name: post-readiness
        type: call
        call: slack.post-message
        with:
          channel: regulatory-affairs
          text: 'eCTD Readiness — Submission {{submission_id}} ({{target_authority}}): Status: {{get-submission.status}}. Documents complete: {{check-documents.documents_complete}}/{{check-documents.documents_required}}. Missing: {{check-documents.missing_documents}}. Ready for publishing: {{check-documents.is_ready}}.'
  consumes:
  - type: http
    namespace: veeva-rim
    baseUri: https://novonordisk-rim.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_rim_token
    resources:
    - name: submissions
      path: /objects/submission__v/{{submission_id}}
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: get-submission
        method: GET
    - name: validation
      path: /objects/submission__v/{{submission_id}}/actions/validate
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: validate-documents
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ectd-submission-readiness-checker.yml

Looks up a healthcare professional in Veeva CRM by NPI number, retrieves recent call activity, and posts a profile summary to the medical affairs Slack channel for pre-visit preparation.

naftiko: '0.5'
info:
  label: HCP Profile and Interaction History Reporter
  description: Looks up a healthcare professional in Veeva CRM by NPI number, retrieves recent call activity, and posts a profile summary to the medical affairs Slack channel for pre-visit preparation.
  tags:
  - medical-affairs
  - veeva-crm
  - hcp-engagement
  - slack
capability:
  exposes:
  - type: mcp
    namespace: med-affairs
    port: 8080
    tools:
    - name: prepare-hcp-brief
      description: Given an NPI number, pull the HCP profile and call history from Veeva CRM and post a summary to Slack.
      inputParameters:
      - name: npi_number
        in: body
        type: string
        description: The National Provider Identifier for the healthcare professional.
      steps:
      - name: get-hcp
        type: call
        call: veeva-crm.get-hcp
        with:
          npi_number: '{{npi_number}}'
      - name: get-call-history
        type: call
        call: veeva-crm.get-calls
        with:
          npi_number: '{{npi_number}}'
      - name: post-brief
        type: call
        call: slack.post-message
        with:
          channel: medical-affairs
          text: 'HCP Brief — {{get-hcp.full_name}} (NPI: {{npi_number}}): Specialty: {{get-hcp.specialty}}, Institution: {{get-hcp.institution}}, Territory: {{get-hcp.territory}}. Last {{get-call-history.call_count}} interactions: {{get-call-history.summary}}.'
  consumes:
  - type: http
    namespace: veeva-crm
    baseUri: https://novonordisk.veevacrm.com/api/v1
    authentication:
      type: bearer
      token: $secrets.veeva_crm_token
    resources:
    - name: hcps
      path: /accounts?q=npi__v={{npi_number}}
      inputParameters:
      - name: npi_number
        in: query
      operations:
      - name: get-hcp
        method: GET
    - name: calls
      path: /calls?q=account_npi={{npi_number}}
      inputParameters:
      - name: npi_number
        in: query
      operations:
      - name: get-calls
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → hcp-profile-and-interaction-history-reporter.yml

When a travel request is submitted in SAP Concur, validates against HCP interaction compliance rules, checks Sunshine Act reporting requirements, and creates a compliance task in ServiceNow if required.

naftiko: '0.5'
info:
  label: Concur Travel Request to Compliance Check
  description: When a travel request is submitted in SAP Concur, validates against HCP interaction compliance rules, checks Sunshine Act reporting requirements, and creates a compliance task in ServiceNow if required.
  tags:
  - compliance
  - concur
  - sap-concur
  - sunshine-act
  - servicenow
  - hcp-engagement
capability:
  exposes:
  - type: mcp
    namespace: travel-compliance
    port: 8080
    tools:
    - name: check-travel-compliance
      description: Given a Concur travel request ID and employee ID, validate HCP interaction compliance and Sunshine Act reporting needs.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The SAP Concur travel request ID.
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID of the traveler.
      steps:
      - name: get-travel-request
        type: call
        call: concur.get-travel-request
        with:
          request_id: '{{request_id}}'
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-compliance-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Sunshine Act review: {{get-employee.full_name}} travel to {{get-travel-request.destination}}'
          description: 'Travel request {{request_id}} by {{get-employee.full_name}} ({{get-employee.department}}) to {{get-travel-request.destination}} on {{get-travel-request.travel_date}}. Purpose: {{get-travel-request.purpose}}. Estimated cost: {{get-travel-request.total_estimate}}. Review for HCP interaction and Sunshine Act reporting.'
          assigned_group: Compliance_HCP
          category: sunshine_act_review
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us2.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: travel-requests
      path: /travelrequest/requests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-travel-request
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/novonordisk
    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://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → concur-travel-request-to-compliance-check.yml

Initiates a manufacturing change control by creating a change request in Veeva Vault QMS, linking affected SOPs, assigning impact assessment tasks via ServiceNow, and notifying the change control board on Microsoft Teams.

naftiko: '0.5'
info:
  label: Manufacturing Change Control Orchestrator
  description: Initiates a manufacturing change control by creating a change request in Veeva Vault QMS, linking affected SOPs, assigning impact assessment tasks via ServiceNow, and notifying the change control board on Microsoft Teams.
  tags:
  - manufacturing
  - change-control
  - veeva-vault
  - servicenow
  - microsoft-teams
  - quality
capability:
  exposes:
  - type: mcp
    namespace: mfg-change-control
    port: 8080
    tools:
    - name: initiate-change-control
      description: Given a change description, affected area, and change owner, create a Veeva Vault QMS change request, open ServiceNow impact assessment tasks, and notify the change control board.
      inputParameters:
      - name: change_description
        in: body
        type: string
        description: Description of the proposed manufacturing change.
      - name: affected_area
        in: body
        type: string
        description: The manufacturing area affected (e.g., filling, formulation, packaging).
      - name: change_owner_id
        in: body
        type: string
        description: Workday worker ID of the change owner.
      steps:
      - name: get-owner
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{change_owner_id}}'
      - name: create-change-request
        type: call
        call: veeva-qms.create-change-control
        with:
          title: '{{change_description}}'
          affected_area: '{{affected_area}}'
          owner_name: '{{get-owner.full_name}}'
          owner_email: '{{get-owner.work_email}}'
      - name: create-impact-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Impact assessment: {{create-change-request.cc_number}}'
          description: 'Assess impact of proposed change: {{change_description}}. Affected area: {{affected_area}}. Change request: {{create-change-request.cc_number}}.'
          assigned_group: QA_Change_Control
          category: change_control
      - name: notify-ccb
        type: call
        call: msteams.send-channel-message
        with:
          team_id: quality-operations
          channel_id: change-control
          text: 'New change control {{create-change-request.cc_number}} initiated by {{get-owner.full_name}}. Area: {{affected_area}}. Description: {{change_description}}. Impact assessment task: {{create-impact-task.number}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/novonordisk
    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: veeva-qms
    baseUri: https://novonordisk-qualitydocs.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_qms_token
    resources:
    - name: change-controls
      path: /objects/change_control__v
      operations:
      - name: create-change-control
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → manufacturing-change-control-orchestrator.yml

Retrieves a patient support case from Salesforce Health Cloud by case number and returns case status, assigned coordinator, program details, and recent interactions.

naftiko: '0.5'
info:
  label: Salesforce Health Cloud Patient Case Lookup
  description: Retrieves a patient support case from Salesforce Health Cloud by case number and returns case status, assigned coordinator, program details, and recent interactions.
  tags:
  - patient-support
  - salesforce
  - salesforce-health-cloud
  - case-management
capability:
  exposes:
  - type: mcp
    namespace: patient-cases
    port: 8080
    tools:
    - name: get-patient-case
      description: Look up a patient support case in Salesforce Health Cloud by case number. Returns status, program, coordinator, and last contact date.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: The Salesforce Health Cloud case number.
      call: sfdc-health.get-case
      with:
        case_number: '{{case_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: program
        type: string
        mapping: $.Program__c
      - name: coordinator
        type: string
        mapping: $.Owner.Name
      - name: last_contact
        type: string
        mapping: $.LastModifiedDate
  consumes:
  - type: http
    namespace: sfdc-health
    baseUri: https://novonordisk.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_number}}
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → salesforce-health-cloud-patient-case-lookup.yml

When a GxP system access request is made, validates the requestor in Workday, checks training completion in Veeva Vault QMS, provisions access in ServiceNow, and notifies the requestor on Microsoft Teams.

naftiko: '0.5'
info:
  label: IT Access Request for GxP Systems
  description: When a GxP system access request is made, validates the requestor in Workday, checks training completion in Veeva Vault QMS, provisions access in ServiceNow, and notifies the requestor on Microsoft Teams.
  tags:
  - it
  - access-management
  - gxp
  - workday
  - veeva-vault
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-access
    port: 8080
    tools:
    - name: provision-gxp-access
      description: Given a worker ID and target GxP system, validate the employee, confirm required training, provision access, and notify.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID of the requestor.
      - name: target_system
        in: body
        type: string
        description: The GxP system to provision access for (e.g., SAP_QM, LIMS, MES).
      - name: access_level
        in: body
        type: string
        description: The requested access level (e.g., read, write, admin).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: check-training
        type: call
        call: veeva-qms.check-system-training
        with:
          employee_email: '{{get-employee.work_email}}'
          system_name: '{{target_system}}'
      - name: provision-access
        type: call
        call: servicenow.create-request
        with:
          short_description: 'GxP access: {{get-employee.full_name}} — {{target_system}} ({{access_level}})'
          description: 'Provision {{access_level}} access to {{target_system}} for {{get-employee.full_name}} ({{get-employee.department}}). Training status: {{check-training.status}}. Training completion date: {{check-training.completion_date}}.'
          assigned_group: IT_GxP_Access
          category: access_request
      - name: notify-requestor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Your access request for {{target_system}} ({{access_level}}) has been submitted. Request: {{provision-access.number}}. Training status: {{check-training.status}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1/novonordisk
    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: veeva-qms
    baseUri: https://novonordisk-qualitydocs.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_qms_token
    resources:
    - name: system-training
      path: /objects/training_assignment__v?q=employee={{employee_email}}&system={{system_name}}
      inputParameters:
      - name: employee_email
        in: query
      - name: system_name
        in: query
      operations:
      - name: check-system-training
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → it-access-request-for-gxp-systems.yml

Verifies patient copay card eligibility through the hub services API, activates the copay benefit in Salesforce Health Cloud, and sends a confirmation to the prescriber via Veeva CRM Approved Email.

naftiko: '0.5'
info:
  label: Copay Assistance Eligibility and Activation
  description: Verifies patient copay card eligibility through the hub services API, activates the copay benefit in Salesforce Health Cloud, and sends a confirmation to the prescriber via Veeva CRM Approved Email.
  tags:
  - patient-support
  - copay
  - salesforce-health-cloud
  - veeva-crm
  - patient-access
capability:
  exposes:
  - type: mcp
    namespace: copay-assistance
    port: 8080
    tools:
    - name: activate-copay-card
      description: Given a patient ID and prescriber NPI, verify copay eligibility, activate the benefit, and notify the prescriber via Veeva CRM Approved Email.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: The Salesforce Health Cloud patient ID.
      - name: prescriber_npi
        in: body
        type: string
        description: The prescriber NPI number.
      - name: product_ndc
        in: body
        type: string
        description: The NDC code of the prescribed product.
      steps:
      - name: check-eligibility
        type: call
        call: sfdc-health.check-copay-eligibility
        with:
          patient_id: '{{patient_id}}'
          product_ndc: '{{product_ndc}}'
      - name: activate-benefit
        type: call
        call: sfdc-health.activate-copay
        with:
          patient_id: '{{patient_id}}'
          product_ndc: '{{product_ndc}}'
          max_benefit: '{{check-eligibility.max_monthly_benefit}}'
      - name: notify-prescriber
        type: call
        call: veeva-crm.send-approved-email
        with:
          npi_number: '{{prescriber_npi}}'
          template: copay_card_activated
          merge_fields:
            patient_id: '{{patient_id}}'
            card_number: '{{activate-benefit.card_number}}'
            max_benefit: '{{check-eligibility.max_monthly_benefit}}'
  consumes:
  - type: http
    namespace: sfdc-health
    baseUri: https://novonordisk.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_token
    resources:
    - name: copay-eligibility
      path: /sobjects/CopayEligibility__c/{{patient_id}}
      inputParameters:
      - name: patient_id
        in: path
      operations:
      - name: check-copay-eligibility
        method: GET
    - name: copay-activation
      path: /sobjects/CopayBenefit__c
      operations:
      - name: activate-copay
        method: POST
  - type: http
    namespace: veeva-crm
    baseUri: https://novonordisk.veevacrm.com/api/v1
    authentication:
      type: bearer
      token: $secrets.veeva_crm_token
    resources:
    - name: approved-email
      path: /approved-email/send
      operations:
      - name: send-approved-email
        method: POST
Open in Framework → View in Fleet → copay-assistance-eligibility-and-activation.yml

Validates drug product serialization data against the SAP ATTP system, checks FDA DSCSA compliance status, and creates a ServiceNow alert if any serialization discrepancy is found.

naftiko: '0.5'
info:
  label: Serialization and Track-and-Trace Validator
  description: Validates drug product serialization data against the SAP ATTP system, checks FDA DSCSA compliance status, and creates a ServiceNow alert if any serialization discrepancy is found.
  tags:
  - supply-chain
  - serialization
  - sap
  - dscsa
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: serialization
    port: 8080
    tools:
    - name: validate-serialization
      description: Given a serial number and product GTIN, validate against SAP ATTP, check DSCSA compliance, and alert on discrepancies.
      inputParameters:
      - name: serial_number
        in: body
        type: string
        description: The drug product serial number.
      - name: gtin
        in: body
        type: string
        description: The Global Trade Item Number (GTIN) of the product.
      - name: lot_number
        in: body
        type: string
        description: The lot/batch number.
      steps:
      - name: verify-serial
        type: call
        call: sap-attp.verify-serial
        with:
          serial_number: '{{serial_number}}'
          gtin: '{{gtin}}'
          lot_number: '{{lot_number}}'
      - name: create-discrepancy-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Serialization discrepancy: SN {{serial_number}} GTIN {{gtin}}'
          category: serialization
          assigned_group: Supply_Chain_Serialization
          description: 'Serial number {{serial_number}} for GTIN {{gtin}}, Lot {{lot_number}}. Verification status: {{verify-serial.status}}. Expected status: {{verify-serial.expected_status}}. Discrepancy: {{verify-serial.discrepancy_reason}}.'
  consumes:
  - type: http
    namespace: sap-attp
    baseUri: https://novonordisk-s4.sap.com/sap/opu/odata/sap/API_ATTP_SERIAL_NUMBER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    inputParameters:
    - name: Accept
      in: header
      value: application/json
    - name: sap-client
      in: header
      value: '100'
    resources:
    - name: serial-verification
      path: /A_SerialNumber(SerialNumber='{{serial_number}}',GTIN='{{gtin}}')
      inputParameters:
      - name: serial_number
        in: path
      - name: gtin
        in: path
      operations:
      - name: verify-serial
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://novonordisk.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → serialization-and-track-and-trace-validator.yml

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, sends a Microsoft Teams welcome message, and creates a SharePoint document workspace.

naftiko: '0.5'
info:
  label: Workday New Hire Onboarding Orchestrator
  description: When a new hire is created in Workday, opens a ServiceNow onboarding ticket, sends a Microsoft Teams welcome message, and creates a SharePoint document workspace.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Given a Workday employee ID and start date, orchestrate Pfizer's onboarding sequence across ServiceNow, Microsoft Teams, and SharePoint.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID for the new Pfizer hire.
      - name: start_date
        in: body
        type: string
        description: The new hire's start date in YYYY-MM-DD format.
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID for the onboarding document workspace.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: create-snow-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
      - name: create-sharepoint-workspace
        type: call
        call: sharepoint.create-folder
        with:
          site_id: '{{site_id}}'
          folder_path: NewHires/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          channel_id: hr-new-hires
          text: 'Welcome to Pfizer, {{get-employee.full_name}}! Your onboarding ticket is {{create-snow-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: /pfizer/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pfizer.service-now.com/api/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
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: folders
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-new-hire-onboarding-orchestrator.yml

Monitors the clinical trial randomization system by checking Snowflake data integrity and alerting the biostatistics team for Pfizer.

naftiko: '0.5'
info:
  label: Clinical Randomization System Monitor
  description: Monitors the clinical trial randomization system by checking Snowflake data integrity and alerting the biostatistics team for Pfizer.
  tags:
  - clinical-trials
  - snowflake
  - biostatistics
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: clinical-biostats
    port: 8080
    tools:
    - name: monitor-randomization
      description: Given a study ID, verify randomization data integrity in Snowflake and alert if anomalies are detected.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study protocol number.
      - name: randomization_scheme
        in: body
        type: string
        description: The randomization scheme identifier.
      steps:
      - name: check-integrity
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL check_randomization_integrity('{{study_id}}', '{{randomization_scheme}}')
          warehouse: CLINICAL_WH
      - name: create-alert
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Randomization Monitor: Study {{study_id}}'
          category: clinical_biostats
          description: 'Study: {{study_id}} | Scheme: {{randomization_scheme}} | Status: {{check-integrity.data}}'
      - name: notify-biostats
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.biostats_channel
          text: 'Randomization Monitor: Study {{study_id}} ({{randomization_scheme}}). Integrity check: {{check-integrity.data}}. SNOW: {{create-alert.number}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://pfizer.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://pfizer.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-randomization-system-monitor.yml

Checks SAP financial period-end close progress for the accounts payable ledger and posts a completion status to the finance team's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: SAP Invoice Period-End Close Status
  description: Checks SAP financial period-end close progress for the accounts payable ledger and posts a completion status to the finance team's Microsoft Teams channel.
  tags:
  - finance
  - sap
  - period-close
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: monitor-ap-period-close
      description: Given a fiscal period and company code, check the SAP AP period-end close status and post a summary to the finance Teams channel.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The SAP fiscal period to check (e.g., '006/2026').
      - name: company_code
        in: body
        type: string
        description: The SAP company code for Pfizer (e.g., 'US01').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the finance close status.
      steps:
      - name: get-close-status
        type: call
        call: sap.get-close-status
        with:
          fiscal_period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: post-status
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'AP Period Close Status {{fiscal_period}} ({{company_code}}): {{get-close-status.completion_pct}}% complete. Open items: {{get-close-status.open_count}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pfizer-s4.sap.com/sap/opu/odata/sap/FCO_PI_CLOSE_COCKPIT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: close-status
      path: /ClosingTaskSet
      inputParameters:
      - name: fiscal_period
        in: query
      - name: company_code
        in: query
      operations:
      - name: get-close-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-invoice-period-end-close-status.yml

Retrieves a regulatory document from SharePoint and uses Anthropic Claude to generate a concise regulatory affairs summary, posting the result to the regulatory team's Teams channel.

naftiko: '0.5'
info:
  label: Regulatory Submission Document Summary
  description: Retrieves a regulatory document from SharePoint and uses Anthropic Claude to generate a concise regulatory affairs summary, posting the result to the regulatory team's Teams channel.
  tags:
  - regulatory
  - ai
  - anthropic
  - sharepoint
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ai
    port: 8080
    tools:
    - name: summarize-regulatory-document
      description: Given a SharePoint document URL and regulatory context (e.g., IND, NDA, BLA), retrieve the document content and generate an AI regulatory affairs summary via Anthropic Claude.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The SharePoint document item ID to summarize.
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID containing the regulatory document.
      - name: regulatory_context
        in: body
        type: string
        description: The regulatory submission context (e.g., 'IND', 'NDA', 'BLA', 'MAA').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the regulatory affairs team.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-file-content
        with:
          site_id: '{{site_id}}'
          document_id: '{{document_id}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a regulatory affairs expert at a pharmaceutical company. Summarize the following {{regulatory_context}} document in 5 bullet points highlighting key regulatory implications, data requirements, and action items: {{get-document.content}}'
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Regulatory Summary ({{regulatory_context}}) — {{get-document.name}}:

            {{generate-summary.content}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.sharepoint_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/items/{{document_id}}/content
      inputParameters:
      - name: site_id
        in: path
      - name: document_id
        in: path
      operations:
      - name: get-file-content
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-document-summary.yml

Fetches current Datadog monitor status for a given application service and returns the count of critical, warning, and OK monitors.

naftiko: '0.5'
info:
  label: Datadog Application Performance Monitor
  description: Fetches current Datadog monitor status for a given application service and returns the count of critical, warning, and OK monitors.
  tags:
  - observability
  - datadog
  - monitoring
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: apm-lookup
    port: 8080
    tools:
    - name: get-app-monitor-status
      description: Given a Datadog service tag, list all monitors scoped to that service and return counts by status (OK, Warning, Critical, No Data).
      inputParameters:
      - name: service_tag
        in: body
        type: string
        description: The Datadog service tag to filter monitors (e.g., 'service:pfizer-ecommerce').
      call: datadog.get-monitors
      with:
        tags: '{{service_tag}}'
      outputParameters:
      - name: critical_count
        type: integer
        mapping: $.critical_count
      - name: warning_count
        type: integer
        mapping: $.warning_count
      - name: ok_count
        type: integer
        mapping: $.ok_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: tags
        in: query
      operations:
      - name: get-monitors
        method: GET
Open in Framework → View in Fleet → datadog-application-performance-monitor.yml

When an employee termination is processed in Workday, creates a ServiceNow offboarding ticket and notifies IT security in Microsoft Teams to begin access revocation.

naftiko: '0.5'
info:
  label: Workday Employee Offboarding Workflow
  description: When an employee termination is processed in Workday, creates a ServiceNow offboarding ticket and notifies IT security in Microsoft Teams to begin access revocation.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday worker ID and termination date, create a ServiceNow offboarding ticket and alert the IT security team in Teams.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: termination_date
        in: body
        type: string
        description: The employee's last day in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: create-offboard-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Offboarding: {{get-employee.full_name}} — last day {{termination_date}}'
          category: hr_offboarding
          assigned_group: IT_Security
      - name: notify-it-security
        type: call
        call: msteams.send-message
        with:
          channel_id: it-security-channel
          text: 'Offboarding initiated for {{get-employee.full_name}} (last day: {{termination_date}}). SNOW: {{create-offboard-ticket.number}}. Begin access revocation.'
  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: /pfizer/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pfizer.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-employee-offboarding-workflow.yml

Fetches LinkedIn company page engagement metrics relevant to medical affairs content and posts a bi-weekly digest to the medical affairs communications Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Medical Affairs Engagement Digest
  description: Fetches LinkedIn company page engagement metrics relevant to medical affairs content and posts a bi-weekly digest to the medical affairs communications Teams channel.
  tags:
  - marketing
  - linkedin
  - social
  - medical-affairs
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: medaffairs-reporting
    port: 8080
    tools:
    - name: digest-linkedin-engagement
      description: Retrieve LinkedIn organization page share statistics for the past 30 days and post a medical affairs engagement digest to the communications Teams channel.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: The LinkedIn organization ID for Pfizer's company page.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the medical affairs communications team.
      steps:
      - name: get-engagement
        type: call
        call: linkedin.get-share-statistics
        with:
          organization_id: '{{organization_id}}'
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'LinkedIn Engagement (30d): Impressions: {{get-engagement.impressions}} | Reactions: {{get-engagement.likes}} | Shares: {{get-engagement.shares}} | Follower Growth: +{{get-engagement.follower_gain}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: share-statistics
      path: /organizationalEntityShareStatistics
      inputParameters:
      - name: organization_id
        in: query
      operations:
      - name: get-share-statistics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → linkedin-medical-affairs-engagement-digest.yml

Retrieves a pending SAP Concur expense report for approval, approves it, and notifies the submitter via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Approval
  description: Retrieves a pending SAP Concur expense report for approval, approves it, and notifies the submitter via Microsoft Teams.
  tags:
  - finance
  - expense-management
  - sap-concur
  - approval
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-approval
    port: 8080
    tools:
    - name: approve-expense-report
      description: Given a SAP Concur expense report ID and approver comment, retrieve the report details, approve it, and notify the submitter via Teams.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID to approve.
      - name: approver_comment
        in: body
        type: string
        description: Approval comment to attach to the action.
      steps:
      - name: get-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: approve-report
        type: call
        call: concur.approve-report
        with:
          report_id: '{{report_id}}'
          comment: '{{approver_comment}}'
      - name: notify-submitter
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{get-report.submitter_email}}'
          text: Your expense report '{{get-report.name}}' (${{get-report.total}}) has been approved. SAP Concur updated.
  consumes:
  - type: http
    namespace: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
      - name: approve-report
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-expense-approval.yml

Syncs updated healthcare provider (HCP) account data from Salesforce to the Power BI commercial analytics dataset for territory planning and reporting.

naftiko: '0.5'
info:
  label: Salesforce Healthcare Provider Account Sync
  description: Syncs updated healthcare provider (HCP) account data from Salesforce to the Power BI commercial analytics dataset for territory planning and reporting.
  tags:
  - sales
  - crm
  - salesforce
  - power-bi
  - hcp
  - commercial
capability:
  exposes:
  - type: mcp
    namespace: hcp-analytics
    port: 8080
    tools:
    - name: sync-hcp-accounts
      description: Query Salesforce for HCP accounts updated in the last 7 days and push the updated records to the Power BI commercial analytics dataset.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for commercial analytics.
      - name: table_name
        in: body
        type: string
        description: The Power BI table name to push HCP data into.
      steps:
      - name: query-hcp-accounts
        type: call
        call: salesforce.query-records
        with:
          q: SELECT Id,Name,Specialty__c,Territory__c,LastModifiedDate FROM Account WHERE RecordType.Name = 'HCP' AND LastModifiedDate = LAST_N_DAYS:7
      - name: push-to-powerbi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: '{{dataset_id}}'
          table_name: '{{table_name}}'
          rows: '{{query-hcp-accounts.records}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pfizer.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-records
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: rows
      path: /datasets/{{dataset_id}}/tables/{{table_name}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      - name: table_name
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → salesforce-healthcare-provider-account-sync.yml

Monitors Veeva Vault clinical data submissions for quality exceptions and creates a ServiceNow task for the data management team when exceptions are detected.

naftiko: '0.5'
info:
  label: Clinical Trial Data Quality Alert
  description: Monitors Veeva Vault clinical data submissions for quality exceptions and creates a ServiceNow task for the data management team when exceptions are detected.
  tags:
  - clinical-trials
  - data-quality
  - servicenow
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: handle-data-quality-exception
      description: Given a clinical study ID and data exception type, create a ServiceNow data management task and notify the clinical data team via Teams.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study identifier (protocol number).
      - name: exception_type
        in: body
        type: string
        description: The type of data quality exception (e.g., 'Missing Query', 'Protocol Deviation', 'Data Lock Failure').
      - name: site_id
        in: body
        type: string
        description: The clinical site identifier where the exception occurred.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the clinical data management team.
      steps:
      - name: create-dm-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Clinical Data Exception: {{exception_type}} — Study {{study_id}}'
          category: clinical_data_management
          description: 'Study: {{study_id}} | Site: {{site_id}} | Exception: {{exception_type}}'
      - name: notify-cdm-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Clinical Data Alert: {{exception_type}} in Study {{study_id}} at Site {{site_id}}. SNOW task: {{create-dm-task.number}}. Please review and resolve.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pfizer.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-data-quality-alert.yml

Lists Okta users assigned to privileged application groups and creates a ServiceNow security task for the quarterly access review process.

naftiko: '0.5'
info:
  label: Okta Privileged Access Review
  description: Lists Okta users assigned to privileged application groups and creates a ServiceNow security task for the quarterly access review process.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - access-review
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-privileged-access-review
      description: Given an Okta privileged group ID and review quarter label, list all members and create a ServiceNow access review task for the security team to certify.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: The Okta privileged access group ID to audit.
      - name: review_quarter
        in: body
        type: string
        description: The review period label (e.g., 'Q2-2026').
      steps:
      - name: list-privileged-users
        type: call
        call: okta.list-group-members
        with:
          group_id: '{{okta_group_id}}'
      - name: create-review-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: Privileged Access Review — {{review_quarter}} — Group {{okta_group_id}}
          category: security_access_review
          description: '{{list-privileged-users.count}} privileged users require certification. User list: {{list-privileged-users.emails}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://pfizer.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_key
      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: servicenow
    baseUri: https://pfizer.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-privileged-access-review.yml

Manages the release of finished goods by updating SAP batch status, recording quality release in ServiceNow, and notifying distribution for Pfizer.

naftiko: '0.5'
info:
  label: SAP Finished Goods Release Workflow
  description: Manages the release of finished goods by updating SAP batch status, recording quality release in ServiceNow, and notifying distribution for Pfizer.
  tags:
  - manufacturing
  - sap
  - quality
  - distribution
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-release
    port: 8080
    tools:
    - name: release-finished-goods
      description: Given batch and quality details, update SAP batch status to released, log in ServiceNow, and notify distribution.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The SAP batch number.
      - name: material_number
        in: body
        type: string
        description: The material number.
      - name: plant
        in: body
        type: string
        description: The manufacturing plant code.
      - name: quality_decision
        in: body
        type: string
        description: Quality decision (release, reject, conditional).
      steps:
      - name: update-batch
        type: call
        call: sap.update-batch-status
        with:
          batch_number: '{{batch_number}}'
          material: '{{material_number}}'
          plant: '{{plant}}'
          status: '{{quality_decision}}'
      - name: log-release
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'FG Release: Batch {{batch_number}} — {{quality_decision}}'
          category: manufacturing_quality
          description: 'Batch: {{batch_number}} | Material: {{material_number}} | Plant: {{plant}} | Decision: {{quality_decision}}'
      - name: notify-distribution
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.distribution_channel
          text: 'Finished Goods Release: Batch {{batch_number}} ({{material_number}}) at Plant {{plant}}. Decision: {{quality_decision}}. SNOW: {{log-release.number}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://pfizer-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: records
      path: /
      operations:
      - name: get-record
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://pfizer.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-finished-goods-release-workflow.yml

Creates a GxP-compliant change control request in ServiceNow for validated systems and notifies the quality assurance team in Microsoft Teams for review.

naftiko: '0.5'
info:
  label: ServiceNow GxP Change Control Request
  description: Creates a GxP-compliant change control request in ServiceNow for validated systems and notifies the quality assurance team in Microsoft Teams for review.
  tags:
  - compliance
  - quality
  - servicenow
  - microsoft-teams
  - change-management
  - gxp
capability:
  exposes:
  - type: mcp
    namespace: quality-ops
    port: 8080
    tools:
    - name: submit-gxp-change-control
      description: Given a system name, change description, GxP impact assessment, and QA channel, create a ServiceNow GxP change control request and notify QA for review.
      inputParameters:
      - name: system_name
        in: body
        type: string
        description: The GxP validated system being changed (e.g., 'LIMS', 'ERP-Production').
      - name: change_description
        in: body
        type: string
        description: Full description of the change and its scope.
      - name: gxp_impact
        in: body
        type: string
        description: 'GxP impact assessment: ''Direct'', ''Indirect'', or ''No Impact''.'
      - name: qa_channel_id
        in: body
        type: string
        description: Teams channel ID for the QA review notification.
      steps:
      - name: create-change-control
        type: call
        call: servicenow.create-change
        with:
          short_description: 'GxP Change Control: {{system_name}} — {{change_description}}'
          category: gxp_change_control
          description: 'System: {{system_name}} | GxP Impact: {{gxp_impact}} | Change: {{change_description}}'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{qa_channel_id}}'
          text: 'GxP Change Control Submitted: {{system_name}} | Impact: {{gxp_impact}} | CHG: {{create-change-control.number}} | Please review and approve in ServiceNow.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pfizer.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → servicenow-gxp-change-control-request.yml

Initiates a Pfizer performance review cycle in Workday for a given business unit and notifies managers in Microsoft Teams to begin annual employee reviews.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Initiation
  description: Initiates a Pfizer performance review cycle in Workday for a given business unit and notifies managers in Microsoft Teams to begin annual employee reviews.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: initiate-review-cycle
      description: Given a Workday business unit code and review period, initiate the performance review cycle and send a Teams notification to all people managers to begin employee evaluations.
      inputParameters:
      - name: business_unit
        in: body
        type: string
        description: The Pfizer business unit code for the review cycle.
      - name: review_period
        in: body
        type: string
        description: The performance review period (e.g., 'Annual-2025').
      - name: due_date
        in: body
        type: string
        description: Review completion deadline in YYYY-MM-DD format.
      - name: manager_channel_id
        in: body
        type: string
        description: Teams channel ID for manager notifications.
      steps:
      - name: create-review-cycle
        type: call
        call: workday.create-review-cycle
        with:
          business_unit: '{{business_unit}}'
          review_period: '{{review_period}}'
          due_date: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{manager_channel_id}}'
          text: 'Performance Review Cycle ''{{review_period}}'' launched for {{business_unit}}. Please complete all evaluations in Workday by {{due_date}}. Cycle ID: {{create-review-cycle.cycle_id}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-cycles
      path: /pfizer/performanceReviews
      operations:
      - name: create-review-cycle
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-initiation.yml

Given an adverse event report description, uses Anthropic Claude to assess causality likelihood and severity classification, posting the assessment to the pharmacovigilance Teams channel.

naftiko: '0.5'
info:
  label: AI-Assisted Adverse Event Triage
  description: Given an adverse event report description, uses Anthropic Claude to assess causality likelihood and severity classification, posting the assessment to the pharmacovigilance Teams channel.
  tags:
  - ai
  - pharmacovigilance
  - anthropic
  - microsoft-teams
  - regulatory
  - safety
capability:
  exposes:
  - type: mcp
    namespace: pv-ai
    port: 8080
    tools:
    - name: triage-adverse-event
      description: Given an adverse event narrative and product name, invoke Anthropic Claude to assess causality and severity, then post the AI assessment to the pharmacovigilance Teams channel for human review.
      inputParameters:
      - name: ae_narrative
        in: body
        type: string
        description: The full adverse event narrative text to analyze.
      - name: product_name
        in: body
        type: string
        description: The Pfizer product name associated with the adverse event.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the pharmacovigilance team review.
      steps:
      - name: assess-ae
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'You are a pharmacovigilance medical officer. Assess this adverse event for product {{product_name}}. Provide: 1) Causality assessment (Certain/Probable/Possible/Unlikely/Unassessable), 2) Severity (Mild/Moderate/Severe/Life-threatening/Fatal), 3) Seriousness criteria met, 4) Recommended next steps. Narrative: {{ae_narrative}}'
      - name: post-assessment
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'AI Adverse Event Assessment — {{product_name}}:

            {{assess-ae.content}}


            IMPORTANT: This is an AI-assisted assessment for triage purposes only. Human review required.'
  consumes:
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-adverse-event-triage.yml

Retrieves the status of a Workday job requisition by ID and returns its stage, hiring manager, and open headcount count for talent acquisition tracking.

naftiko: '0.5'
info:
  label: Workday Job Requisition Status Lookup
  description: Retrieves the status of a Workday job requisition by ID and returns its stage, hiring manager, and open headcount count for talent acquisition tracking.
  tags:
  - hr
  - recruiting
  - workday
  - lookup
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: recruiting-lookup
    port: 8080
    tools:
    - name: get-job-requisition
      description: Given a Workday job requisition ID, return the requisition stage, hiring manager name, target headcount, and filled positions.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID (e.g., 'JR-10045').
      call: workday.get-requisition
      with:
        requisition_id: '{{requisition_id}}'
      outputParameters:
      - name: stage
        type: string
        mapping: $.jobRequisition.requisitionStatus
      - name: hiring_manager
        type: string
        mapping: $.jobRequisition.hiringManager.descriptor
      - name: target_headcount
        type: integer
        mapping: $.jobRequisition.targetHeadcount
      - name: filled_positions
        type: integer
        mapping: $.jobRequisition.filledPositions
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /pfizer/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
Open in Framework → View in Fleet → workday-job-requisition-status-lookup.yml

Triggers a Power BI dataset refresh for the global financial reporting dashboard and notifies the finance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Power BI Financial Reporting Refresh
  description: Triggers a Power BI dataset refresh for the global financial reporting dashboard and notifies the finance team in Microsoft Teams.
  tags:
  - data
  - analytics
  - power-bi
  - finance
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: finance-bi
    port: 8080
    tools:
    - name: refresh-financial-dashboard
      description: Trigger a Power BI refresh for the Pfizer global financial dashboard and notify the finance team in Teams upon initiation.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the global financial dashboard.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID to notify the finance team.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Financial dashboard refresh initiated. Dataset: {{dataset_id}}. Status: {{trigger-refresh.status}}.'
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-financial-reporting-refresh.yml

Retrieves a vendor contract from SAP Ariba by contract ID and returns its status, expiry date, and total committed spend.

naftiko: '0.5'
info:
  label: SAP Ariba Vendor Contract Lookup
  description: Retrieves a vendor contract from SAP Ariba by contract ID and returns its status, expiry date, and total committed spend.
  tags:
  - procurement
  - sap-ariba
  - contracts
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: procurement-lookup
    port: 8080
    tools:
    - name: get-vendor-contract
      description: Given an SAP Ariba contract ID, return the contract status, effective date, expiry date, and total committed spend.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The SAP Ariba contract ID to retrieve (e.g., 'CW123456').
      call: ariba.get-contract
      with:
        contract_id: '{{contract_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: expiry_date
        type: string
        mapping: $.ExpiryDate
      - name: total_spend
        type: string
        mapping: $.TotalCommittedAmount
      - name: vendor_name
        type: string
        mapping: $.VendorName
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
Open in Framework → View in Fleet → sap-ariba-vendor-contract-lookup.yml

When a Datadog SLO drops below its error budget threshold, creates a ServiceNow incident and alerts the platform reliability team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Datadog SLO Breach Alert
  description: When a Datadog SLO drops below its error budget threshold, creates a ServiceNow incident and alerts the platform reliability team in Microsoft Teams.
  tags:
  - observability
  - datadog
  - slo
  - servicenow
  - incident-response
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: slo-ops
    port: 8080
    tools:
    - name: handle-slo-breach
      description: Given a Datadog SLO ID, SLO name, and current compliance percentage, create a ServiceNow incident and alert the platform team in Teams that the SLO error budget is breached.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: The Datadog SLO ID that has breached its error budget.
      - name: slo_name
        in: body
        type: string
        description: The human-readable SLO name.
      - name: current_compliance
        in: body
        type: number
        description: The current SLO compliance percentage (e.g., 98.7).
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the platform reliability alert.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'SLO Breach: {{slo_name}} at {{current_compliance}}%'
          category: slo_breach
          urgency: '2'
      - name: alert-platform-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'SLO ERROR BUDGET BREACH: {{slo_name}} | Current compliance: {{current_compliance}}% | SNOW: {{create-incident.number}} | SLO ID: {{slo_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pfizer.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-breach-alert.yml

Queries Salesforce for open commercial opportunities by therapeutic area and posts a pipeline digest to the commercial operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Commercial Opportunity Pipeline Digest
  description: Queries Salesforce for open commercial opportunities by therapeutic area and posts a pipeline digest to the commercial operations Microsoft Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
  - microsoft-teams
  - commercial
capability:
  exposes:
  - type: mcp
    namespace: commercial-reporting
    port: 8080
    tools:
    - name: digest-pipeline
      description: Given a Salesforce therapeutic area field value and Teams channel, query open opportunities and post a commercial pipeline digest.
      inputParameters:
      - name: therapeutic_area
        in: body
        type: string
        description: The therapeutic area to filter opportunities (e.g., 'Oncology', 'Immunology', 'Rare Disease').
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the commercial pipeline digest.
      steps:
      - name: query-opportunities
        type: call
        call: salesforce.query-records
        with:
          q: SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE Therapeutic_Area__c = '{{therapeutic_area}}' AND IsClosed = false
      - name: post-digest
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Pipeline Digest — {{therapeutic_area}}: {{query-opportunities.totalSize}} open opportunities | Total pipeline: ${{query-opportunities.total_amount}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://pfizer.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-records
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → salesforce-commercial-opportunity-pipeline-digest.yml

Tracks compliance audit findings by creating Jira issues from ServiceNow audit records and notifying the compliance team for Pfizer.

naftiko: '0.5'
info:
  label: Compliance Audit Finding Tracker
  description: Tracks compliance audit findings by creating Jira issues from ServiceNow audit records and notifying the compliance team for Pfizer.
  tags:
  - compliance
  - servicenow
  - jira
  - audit
capability:
  exposes:
  - type: mcp
    namespace: compliance-audit
    port: 8080
    tools:
    - name: track-audit-findings
      description: Given an audit ID, pull findings from ServiceNow, create Jira tracking issues, and notify the compliance team.
      inputParameters:
      - name: audit_id
        in: body
        type: string
        description: The ServiceNow audit ID.
      - name: audit_type
        in: body
        type: string
        description: Type of audit (internal, external, regulatory).
      steps:
      - name: get-findings
        type: call
        call: servicenow.get-audit-findings
        with:
          audit_id: '{{audit_id}}'
      - name: create-jira-epic
        type: call
        call: jira.create-issue
        with:
          project: COMP
          summary: 'Audit Findings: {{audit_type}} Audit {{audit_id}} — {{get-findings.count}} findings'
          issuetype: Epic
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: $secrets.compliance_audit_channel
          text: 'Audit Findings: {{audit_type}} Audit {{audit_id}} has {{get-findings.count}} findings. Jira Epic: {{create-jira-epic.key}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://pfizer.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://pfizer.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-audit-finding-tracker.yml

When a medical device field issue is reported, creates a ServiceNow incident, logs the event in the quality management system, notifies the regulatory affairs team via Microsoft Teams, and stores the report in Snowflake.

naftiko: '0.5'
info:
  label: Medical Device Incident Reporter
  description: When a medical device field issue is reported, creates a ServiceNow incident, logs the event in the quality management system, notifies the regulatory affairs team via Microsoft Teams, and stores the report in Snowflake.
  tags:
  - medical-devices
  - quality
  - servicenow
  - microsoft-teams
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: device-incidents
    port: 8080
    tools:
    - name: report-device-incident
      description: Report a medical device field incident with quality tracking, regulatory notification, and analytics logging.
      inputParameters:
      - name: device_serial
        in: body
        type: string
        description: The medical device serial number.
      - name: device_model
        in: body
        type: string
        description: The device model identifier.
      - name: incident_description
        in: body
        type: string
        description: Description of the field incident.
      - name: severity
        in: body
        type: string
        description: Incident severity (low, medium, high, critical).
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Device incident: {{device_model}} - {{device_serial}}'
          category: medical_device
          priority: '{{severity}}'
          description: '{{incident_description}}'
      - name: log-quality-event
        type: call
        call: qms-api.create-event
        with:
          device_serial: '{{device_serial}}'
          device_model: '{{device_model}}'
          event_type: field_incident
          description: '{{incident_description}}'
          severity: '{{severity}}'
      - name: notify-regulatory
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-affairs
          text: 'Device incident reported: {{device_model}} (S/N: {{device_serial}}). Severity: {{severity}}. ServiceNow: {{create-incident.number}}. QMS: {{log-quality-event.event_id}}'
      - name: log-analytics
        type: call
        call: snowflake.insert-record
        with:
          table: device_incidents
          data:
            device_serial: '{{device_serial}}'
            device_model: '{{device_model}}'
            severity: '{{severity}}'
            servicenow_number: '{{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/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: qms-api
    baseUri: https://api.philips.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.philips_qms_token
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
Open in Framework → View in Fleet → medical-device-incident-reporter.yml

Creates a Corrective and Preventive Action (CAPA) in the QMS, assigns to the responsible team via Jira, and tracks resolution progress with notifications in Microsoft Teams.

naftiko: '0.5'
info:
  label: Quality CAPA Workflow
  description: Creates a Corrective and Preventive Action (CAPA) in the QMS, assigns to the responsible team via Jira, and tracks resolution progress with notifications in Microsoft Teams.
  tags:
  - manufacturing
  - quality
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-capa
    port: 8080
    tools:
    - name: create-capa
      description: Create a CAPA with Jira task assignment and team notification.
      inputParameters:
      - name: finding_description
        in: body
        type: string
        description: Description of the quality finding.
      - name: product_line
        in: body
        type: string
        description: The affected product line.
      - name: capa_type
        in: body
        type: string
        description: CAPA type (corrective, preventive).
      steps:
      - name: create-qms-capa
        type: call
        call: qms-api.create-capa
        with:
          description: '{{finding_description}}'
          product_line: '{{product_line}}'
          type: '{{capa_type}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project: QUAL
          summary: 'CAPA: {{finding_description}}'
          description: 'QMS CAPA ID: {{create-qms-capa.capa_id}}. Product: {{product_line}}. Type: {{capa_type}}'
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-management
          text: 'New CAPA created: {{create-qms-capa.capa_id}} for {{product_line}}. Jira: {{create-jira-task.key}}. Type: {{capa_type}}'
  consumes:
  - type: http
    namespace: qms-api
    baseUri: https://api.philips.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.philips_qms_token
    resources:
    - name: capas
      path: /capas
      operations:
      - name: create-capa
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-capa-workflow.yml

Orchestrates telehealth platform scaling pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Telehealth Platform Scaling Pipeline
  description: Orchestrates telehealth platform scaling pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - telehealth
  - philips
  - salesforce
  - snowflake
  - sap
capability:
  exposes:
  - type: mcp
    namespace: telehealth
    port: 8080
    tools:
    - name: telehealth-platform-scaling-pipeline
      description: Orchestrates telehealth platform scaling pipeline across medical devices and health technology 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: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: sap.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/telehealth
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/telehealth
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/telehealth
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → telehealth-platform-scaling-pipeline.yml

Aggregates remote patient monitoring data from connected devices, stores in Snowflake for population health analytics, and refreshes the clinical outcomes dashboard in Tableau.

naftiko: '0.5'
info:
  label: Remote Patient Monitoring Data Aggregator
  description: Aggregates remote patient monitoring data from connected devices, stores in Snowflake for population health analytics, and refreshes the clinical outcomes dashboard in Tableau.
  tags:
  - patient-monitoring
  - analytics
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: rpm-analytics
    port: 8080
    tools:
    - name: aggregate-rpm-data
      description: Aggregate remote patient monitoring data for population health analytics.
      inputParameters:
      - name: program_id
        in: body
        type: string
        description: The RPM program identifier.
      - name: date
        in: body
        type: string
        description: The reporting date.
      steps:
      - name: get-rpm-data
        type: call
        call: monitoring-api.get-program-data
        with:
          program_id: '{{program_id}}'
          date: '{{date}}'
      - name: store-data
        type: call
        call: snowflake.execute-query
        with:
          query: CALL ingest_rpm_data('{{program_id}}', '{{date}}')
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          datasource_id: rpm_outcomes_ds
  consumes:
  - type: http
    namespace: monitoring-api
    baseUri: https://api.philips.com/monitoring/v1
    authentication:
      type: bearer
      token: $secrets.philips_monitoring_token
    resources:
    - name: programs
      path: /programs/{{program_id}}/data
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: get-program-data
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://philips.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: tableau
    baseUri: https://tableau.philips.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/philips/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-extract
        method: POST
Open in Framework → View in Fleet → remote-patient-monitoring-data-aggregator.yml

Orchestrates sleep therapy adherence monitoring pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Sleep Therapy Adherence Monitoring Pipeline
  description: Orchestrates sleep therapy adherence monitoring pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - sleep
  - philips
  - datadog
  - philips
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: sleep
    port: 8080
    tools:
    - name: sleep-therapy-adherence-monitoring-pipeline
      description: Orchestrates sleep therapy adherence monitoring pipeline across medical devices and health technology 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: philips.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.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/sleep
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/sleep
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/sleep
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → sleep-therapy-adherence-monitoring-pipeline.yml

Retrieves Datadog monitor status for Philips' cloud infrastructure. Returns monitor name, state, and last triggered time.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Monitor
  description: Retrieves Datadog monitor status for Philips' cloud infrastructure. Returns monitor name, state, and last triggered time.
  tags:
  - operations
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-monitor-status
      description: Check Datadog monitor status for cloud infrastructure.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor identifier.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: status
        type: string
        mapping: $.overall_state
      - name: last_triggered
        type: string
        mapping: $.state.last_triggered_ts
  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: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-monitor.yml

Orchestrates device performance benchmarking pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Device Performance Benchmarking Pipeline
  description: Orchestrates device performance benchmarking pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - device
  - philips
  - servicenow
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-performance-benchmarking-pipeline
      description: Orchestrates device performance benchmarking pipeline across medical devices and health technology 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/device
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/device
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/device
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → device-performance-benchmarking-pipeline.yml

Orchestrates regulatory adverse event reporting pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Regulatory Adverse Event Reporting Pipeline
  description: Orchestrates regulatory adverse event reporting pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - regulatory
  - philips
  - jira
  - teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: regulatory-adverse-event-reporting-pipeline
      description: Orchestrates regulatory adverse event reporting pipeline across medical devices and health technology 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: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/regulatory
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/regulatory
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/regulatory
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → regulatory-adverse-event-reporting-pipeline.yml

Orchestrates device cybersecurity incident response pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Device Cybersecurity Incident Response Pipeline
  description: Orchestrates device cybersecurity incident response pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - device
  - philips
  - snowflake
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-cybersecurity-incident-response-pipeline
      description: Orchestrates device cybersecurity incident response pipeline across medical devices and health technology 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: sap.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://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/device
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/device
      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/device
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → device-cybersecurity-incident-response-pipeline.yml

Orchestrates hospital equipment utilization optimizer across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Hospital Equipment Utilization Optimizer
  description: Orchestrates hospital equipment utilization optimizer across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - hospital
  - philips
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: hospital
    port: 8080
    tools:
    - name: hospital-equipment-utilization-optimizer
      description: Orchestrates hospital equipment utilization optimizer across medical devices and health technology 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: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/hospital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/hospital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/hospital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → hospital-equipment-utilization-optimizer.yml

When a patient monitor triggers a critical alert, retrieves patient context, creates an urgent ServiceNow incident, and notifies the clinical engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Patient Monitoring Alert Orchestrator
  description: When a patient monitor triggers a critical alert, retrieves patient context, creates an urgent ServiceNow incident, and notifies the clinical engineering team via Microsoft Teams.
  tags:
  - patient-monitoring
  - medical-devices
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-alerts
    port: 8080
    tools:
    - name: escalate-patient-alert
      description: Escalate a critical patient monitoring alert with context and team notification.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: The patient monitor device identifier.
      - name: alert_type
        in: body
        type: string
        description: Type of alert (cardiac, respiratory, hemodynamic).
      - name: alert_severity
        in: body
        type: string
        description: Alert severity level.
      steps:
      - name: get-device-context
        type: call
        call: monitoring-api.get-device-info
        with:
          device_id: '{{device_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Critical alert: {{alert_type}} on {{device_id}}'
          category: patient_monitoring
          priority: '{{alert_severity}}'
          description: '{{alert_type}} alert on device {{device_id}} at {{get-device-context.location}}. Patient: {{get-device-context.patient_id}}'
      - name: notify-clinical-team
        type: call
        call: msteams.send-message
        with:
          channel_id: clinical-engineering
          text: 'ALERT: {{alert_type}} ({{alert_severity}}) on device {{device_id}} at {{get-device-context.location}}. Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: monitoring-api
    baseUri: https://api.philips.com/monitoring/v1
    authentication:
      type: bearer
      token: $secrets.philips_monitoring_token
    resources:
    - name: devices
      path: /devices/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device-info
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patient-monitoring-alert-orchestrator.yml

Orchestrates medical device cybersecurity patch pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Medical Device Cybersecurity Patch Pipeline
  description: Orchestrates medical device cybersecurity patch pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - medical
  - philips
  - sap
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: medical
    port: 8080
    tools:
    - name: medical-device-cybersecurity-patch-pipeline
      description: Orchestrates medical device cybersecurity patch pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: sap.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/medical
      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/medical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/medical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → medical-device-cybersecurity-patch-pipeline.yml

Pulls device fleet health metrics from the fleet management system, stores daily snapshots in Snowflake, and refreshes the fleet health dashboard in Tableau.

naftiko: '0.5'
info:
  label: Device Fleet Health Dashboard Sync
  description: Pulls device fleet health metrics from the fleet management system, stores daily snapshots in Snowflake, and refreshes the fleet health dashboard in Tableau.
  tags:
  - medical-devices
  - analytics
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: fleet-health
    port: 8080
    tools:
    - name: sync-fleet-health
      description: Sync device fleet health metrics to analytics and dashboards.
      inputParameters:
      - name: date
        in: body
        type: string
        description: The reporting date.
      steps:
      - name: get-fleet-data
        type: call
        call: fleet-api.get-fleet-health
        with:
          date: '{{date}}'
      - name: store-snapshot
        type: call
        call: snowflake.insert-record
        with:
          table: fleet_health_snapshots
          data:
            date: '{{date}}'
            total_devices: '{{get-fleet-data.total_devices}}'
            online_pct: '{{get-fleet-data.online_percentage}}'
            alerts_active: '{{get-fleet-data.active_alerts}}'
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          datasource_id: fleet_health_ds
  consumes:
  - type: http
    namespace: fleet-api
    baseUri: https://api.philips.com/fleet/v1
    authentication:
      type: bearer
      token: $secrets.philips_fleet_token
    resources:
    - name: health
      path: /fleet/health
      operations:
      - name: get-fleet-health
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.philips.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/philips/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-extract
        method: POST
Open in Framework → View in Fleet → device-fleet-health-dashboard-sync.yml

Orchestrates cross modality imaging integration pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Cross Modality Imaging Integration Pipeline
  description: Orchestrates cross modality imaging integration pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - cross
  - philips
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: cross
    port: 8080
    tools:
    - name: cross-modality-imaging-integration-pipeline
      description: Orchestrates cross modality imaging integration pipeline across medical devices and health technology 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: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/cross
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/cross
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/cross
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → cross-modality-imaging-integration-pipeline.yml

Pulls imaging system utilization data (MRI, CT, X-ray) from the fleet management system, stores in Snowflake, and refreshes the asset utilization dashboard in Tableau.

naftiko: '0.5'
info:
  label: Imaging System Utilization Reporter
  description: Pulls imaging system utilization data (MRI, CT, X-ray) from the fleet management system, stores in Snowflake, and refreshes the asset utilization dashboard in Tableau.
  tags:
  - medical-devices
  - analytics
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: imaging-analytics
    port: 8080
    tools:
    - name: report-imaging-utilization
      description: Generate an imaging system utilization report.
      inputParameters:
      - name: facility_id
        in: body
        type: string
        description: The healthcare facility identifier.
      - name: modality
        in: body
        type: string
        description: Imaging modality (MRI, CT, X-ray, ultrasound).
      - name: date_range
        in: body
        type: string
        description: Date range for the report.
      steps:
      - name: get-utilization-data
        type: call
        call: fleet-api.get-utilization
        with:
          facility_id: '{{facility_id}}'
          modality: '{{modality}}'
          range: '{{date_range}}'
      - name: store-metrics
        type: call
        call: snowflake.insert-record
        with:
          table: imaging_utilization
          data:
            facility_id: '{{facility_id}}'
            modality: '{{modality}}'
            utilization_rate: '{{get-utilization-data.utilization_rate}}'
            total_exams: '{{get-utilization-data.total_exams}}'
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          datasource_id: imaging_utilization_ds
  consumes:
  - type: http
    namespace: fleet-api
    baseUri: https://api.philips.com/fleet/v1
    authentication:
      type: bearer
      token: $secrets.philips_fleet_token
    resources:
    - name: utilization
      path: /facilities/{{facility_id}}/modalities/{{modality}}/utilization
      inputParameters:
      - name: facility_id
        in: path
      - name: modality
        in: path
      operations:
      - name: get-utilization
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
  - type: http
    namespace: tableau
    baseUri: https://tableau.philips.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/philips/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-extract
        method: POST
Open in Framework → View in Fleet → imaging-system-utilization-reporter.yml

Retrieves telehealth session status data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Telehealth Session Status
  description: Retrieves telehealth session status data from the Philips medical devices and health technology systems.
  tags:
  - telehealth
  - philips
  - status
capability:
  exposes:
  - type: mcp
    namespace: telehealth
    port: 8080
    tools:
    - name: telehealth-session-status
      description: Retrieves telehealth session status data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.telehealth-session-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /telehealth/session/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: telehealth-session-status
        method: GET
Open in Framework → View in Fleet → telehealth-session-status.yml

Retrieves device utilization report lookup data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Device Utilization Report Lookup
  description: Retrieves device utilization report lookup data from the Philips medical devices and health technology systems.
  tags:
  - device
  - philips
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-utilization-report-lookup
      description: Retrieves device utilization report lookup data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.device-utilization-report-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /device/utilization/report/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: device-utilization-report-lookup
        method: GET
Open in Framework → View in Fleet → device-utilization-report-lookup.yml

Orchestrates patient engagement campaign pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Patient Engagement Campaign Pipeline
  description: Orchestrates patient engagement campaign pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - patient
  - philips
  - sap
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: patient
    port: 8080
    tools:
    - name: patient-engagement-campaign-pipeline
      description: Orchestrates patient engagement campaign pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: sap.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/patient
      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/patient
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/patient
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → patient-engagement-campaign-pipeline.yml

Orchestrates clinical decision support alert pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Clinical Decision Support Alert Pipeline
  description: Orchestrates clinical decision support alert pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - clinical
  - philips
  - salesforce
  - snowflake
  - sap
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: clinical-decision-support-alert-pipeline
      description: Orchestrates clinical decision support alert pipeline across medical devices and health technology 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: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: sap.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/clinical
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/clinical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/clinical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → clinical-decision-support-alert-pipeline.yml

Exports anonymized clinical data from the patient monitoring system, stores it in Snowflake for research analytics, and generates a data summary report in SharePoint.

naftiko: '0.5'
info:
  label: Clinical Data Export Workflow
  description: Exports anonymized clinical data from the patient monitoring system, stores it in Snowflake for research analytics, and generates a data summary report in SharePoint.
  tags:
  - patient-monitoring
  - r-and-d
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: clinical-data
    port: 8080
    tools:
    - name: export-clinical-data
      description: Export anonymized clinical data for research and generate a summary report.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The research study identifier.
      - name: data_type
        in: body
        type: string
        description: Type of clinical data to export.
      - name: date_range_start
        in: body
        type: string
        description: Export start date.
      - name: date_range_end
        in: body
        type: string
        description: Export end date.
      steps:
      - name: extract-data
        type: call
        call: monitoring-api.export-data
        with:
          study_id: '{{study_id}}'
          type: '{{data_type}}'
          start: '{{date_range_start}}'
          end: '{{date_range_end}}'
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-query
        with:
          query: CALL load_clinical_export('{{study_id}}', '{{data_type}}')
      - name: generate-summary
        type: call
        call: sharepoint.upload-file
        with:
          site_id: clinical-research
          file_path: DataExports/{{study_id}}_{{data_type}}_summary.xlsx
  consumes:
  - type: http
    namespace: monitoring-api
    baseUri: https://api.philips.com/monitoring/v1
    authentication:
      type: bearer
      token: $secrets.philips_monitoring_token
    resources:
    - name: exports
      path: /data/export
      operations:
      - name: export-data
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → clinical-data-export-workflow.yml

Retrieves sleep therapy device data data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Sleep Therapy Device Data
  description: Retrieves sleep therapy device data data from the Philips medical devices and health technology systems.
  tags:
  - sleep
  - philips
  - data
capability:
  exposes:
  - type: mcp
    namespace: sleep
    port: 8080
    tools:
    - name: sleep-therapy-device-data
      description: Retrieves sleep therapy device data data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.sleep-therapy-device-data
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /sleep/therapy/device/data/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: sleep-therapy-device-data
        method: GET
Open in Framework → View in Fleet → sleep-therapy-device-data.yml

Retrieves ultrasound image archive status data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Ultrasound Image Archive Status
  description: Retrieves ultrasound image archive status data from the Philips medical devices and health technology systems.
  tags:
  - ultrasound
  - philips
  - status
capability:
  exposes:
  - type: mcp
    namespace: ultrasound
    port: 8080
    tools:
    - name: ultrasound-image-archive-status
      description: Retrieves ultrasound image archive status data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.ultrasound-image-archive-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /ultrasound/image/archive/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: ultrasound-image-archive-status
        method: GET
Open in Framework → View in Fleet → ultrasound-image-archive-status.yml

Pulls production plans from SAP, runs demand forecasting models in Snowflake, and generates material requirement reports stored in SharePoint for procurement planning.

naftiko: '0.5'
info:
  label: Supply Chain Material Forecaster
  description: Pulls production plans from SAP, runs demand forecasting models in Snowflake, and generates material requirement reports stored in SharePoint for procurement planning.
  tags:
  - manufacturing
  - supply-chain
  - sap
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: material-planning
    port: 8080
    tools:
    - name: forecast-material-needs
      description: Forecast material requirements based on production plans and demand models.
      inputParameters:
      - name: plant_id
        in: body
        type: string
        description: The manufacturing plant identifier.
      - name: forecast_months
        in: body
        type: integer
        description: Number of months to forecast.
      steps:
      - name: get-production-plan
        type: call
        call: sap.get-production-plan
        with:
          plant_id: '{{plant_id}}'
      - name: run-forecast
        type: call
        call: snowflake.execute-query
        with:
          query: CALL forecast_material_demand('{{plant_id}}', {{forecast_months}})
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: supply-chain-planning
          file_path: Forecasts/{{plant_id}}_forecast.xlsx
  consumes:
  - type: http
    namespace: sap
    baseUri: https://philips.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-plans
      path: /A_ProductionOrder?$filter=ProductionPlant eq '{{plant_id}}'
      inputParameters:
      - name: plant_id
        in: query
      operations:
      - name: get-production-plan
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → supply-chain-material-forecaster.yml

Retrieves patient data export status data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Patient Data Export Status
  description: Retrieves patient data export status data from the Philips medical devices and health technology systems.
  tags:
  - patient
  - philips
  - status
capability:
  exposes:
  - type: mcp
    namespace: patient
    port: 8080
    tools:
    - name: patient-data-export-status
      description: Retrieves patient data export status data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.patient-data-export-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /patient/data/export/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: patient-data-export-status
        method: GET
Open in Framework → View in Fleet → patient-data-export-status.yml

Checks the current firmware version and compliance status of a medical device. Returns version, compliance flag, and last update date.

naftiko: '0.5'
info:
  label: Device Firmware Version Lookup
  description: Checks the current firmware version and compliance status of a medical device. Returns version, compliance flag, and last update date.
  tags:
  - medical-devices
  - device-management
capability:
  exposes:
  - type: mcp
    namespace: device-management
    port: 8080
    tools:
    - name: get-firmware-status
      description: Look up firmware version and compliance status for a medical device.
      inputParameters:
      - name: device_serial
        in: body
        type: string
        description: The device serial number.
      call: device-api.get-firmware
      with:
        serial: '{{device_serial}}'
      outputParameters:
      - name: current_version
        type: string
        mapping: $.data.firmware_version
      - name: compliance_status
        type: string
        mapping: $.data.compliance_status
      - name: last_updated
        type: string
        mapping: $.data.last_update_date
  consumes:
  - type: http
    namespace: device-api
    baseUri: https://api.philips.com/devices/v1
    authentication:
      type: bearer
      token: $secrets.philips_device_token
    resources:
    - name: firmware
      path: /devices/{{serial}}/firmware
      inputParameters:
      - name: serial
        in: path
      operations:
      - name: get-firmware
        method: GET
Open in Framework → View in Fleet → device-firmware-version-lookup.yml

Sends a transactional email via SendGrid. Reusable email sending primitive for Philips workflows.

naftiko: '0.5'
info:
  label: SendGrid Email Sender
  description: Sends a transactional email via SendGrid. Reusable email sending primitive for Philips workflows.
  tags:
  - communications
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: email-ops
    port: 8080
    tools:
    - name: send-email
      description: Send a transactional email via SendGrid.
      inputParameters:
      - name: to
        in: body
        type: string
        description: Recipient email address.
      - name: subject
        in: body
        type: string
        description: Email subject.
      - name: body
        in: body
        type: string
        description: Email body text.
      call: sendgrid.send-email
      with:
        to: '{{to}}'
        subject: '{{subject}}'
        body: '{{body}}'
  consumes:
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → sendgrid-email-sender.yml

Orchestrates medical device udi registration pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Medical Device Udi Registration Pipeline
  description: Orchestrates medical device udi registration pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - medical
  - philips
  - confluence
  - datadog
  - philips
capability:
  exposes:
  - type: mcp
    namespace: medical
    port: 8080
    tools:
    - name: medical-device-udi-registration-pipeline
      description: Orchestrates medical device udi registration pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: philips.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/medical
      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/medical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/medical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → medical-device-udi-registration-pipeline.yml

Retrieves clinical workflow status data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Clinical Workflow Status
  description: Retrieves clinical workflow status data from the Philips medical devices and health technology systems.
  tags:
  - clinical
  - philips
  - status
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: clinical-workflow-status
      description: Retrieves clinical workflow status data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.clinical-workflow-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /clinical/workflow/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: clinical-workflow-status
        method: GET
Open in Framework → View in Fleet → clinical-workflow-status.yml

Orchestrates device end of life migration pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Device End Of Life Migration Pipeline
  description: Orchestrates device end of life migration pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - device
  - philips
  - teams
  - confluence
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-end-of-life-migration-pipeline
      description: Orchestrates device end of life migration pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/device
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/device
      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/device
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → device-end-of-life-migration-pipeline.yml

Orchestrates clinical research data harmonization pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Clinical Research Data Harmonization Pipeline
  description: Orchestrates clinical research data harmonization pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - clinical
  - philips
  - teams
  - confluence
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: clinical-research-data-harmonization-pipeline
      description: Orchestrates clinical research data harmonization pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/clinical
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/clinical
      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/clinical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → clinical-research-data-harmonization-pipeline.yml

Orchestrates device fleet predictive maintenance pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Device Fleet Predictive Maintenance Pipeline
  description: Orchestrates device fleet predictive maintenance pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - device
  - philips
  - confluence
  - datadog
  - philips
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-fleet-predictive-maintenance-pipeline
      description: Orchestrates device fleet predictive maintenance pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: philips.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/device
      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/device
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/device
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → device-fleet-predictive-maintenance-pipeline.yml

Retrieves hospital bed occupancy lookup data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Hospital Bed Occupancy Lookup
  description: Retrieves hospital bed occupancy lookup data from the Philips medical devices and health technology systems.
  tags:
  - hospital
  - philips
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: hospital
    port: 8080
    tools:
    - name: hospital-bed-occupancy-lookup
      description: Retrieves hospital bed occupancy lookup data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.hospital-bed-occupancy-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /hospital/bed/occupancy/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: hospital-bed-occupancy-lookup
        method: GET
Open in Framework → View in Fleet → hospital-bed-occupancy-lookup.yml

Orchestrates connected care platform onboarding pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Connected Care Platform Onboarding Pipeline
  description: Orchestrates connected care platform onboarding pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - connected
  - philips
  - sap
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: connected
    port: 8080
    tools:
    - name: connected-care-platform-onboarding-pipeline
      description: Orchestrates connected care platform onboarding pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: sap.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/connected
      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/connected
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/connected
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → connected-care-platform-onboarding-pipeline.yml

Orchestrates quality management capa tracker across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Quality Management Capa Tracker
  description: Orchestrates quality management capa tracker across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - quality
  - philips
  - philips
  - servicenow
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: quality-management-capa-tracker
      description: Orchestrates quality management capa tracker across medical devices and health technology 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: philips.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: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/quality
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/quality
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/quality
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → quality-management-capa-tracker.yml

Retrieves service contract details for a healthcare facility from Salesforce. Returns contract type, coverage, and expiration date.

naftiko: '0.5'
info:
  label: Healthcare Facility Service Contract Lookup
  description: Retrieves service contract details for a healthcare facility from Salesforce. Returns contract type, coverage, and expiration date.
  tags:
  - medical-devices
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: service-contracts
    port: 8080
    tools:
    - name: get-service-contract
      description: Look up service contract details for a healthcare facility.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account identifier.
      call: salesforce.get-contracts
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: contracts
        type: array
        mapping: $.records
      - name: total_contracts
        type: integer
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /query?q=SELECT+Id,Name,Type__c,Coverage__c,EndDate+FROM+ServiceContract+WHERE+AccountId='{{account_id}}'
      inputParameters:
      - name: account_id
        in: query
      operations:
      - name: get-contracts
        method: GET
Open in Framework → View in Fleet → healthcare-facility-service-contract-lookup.yml

Retrieves personal health app data data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Personal Health App Data
  description: Retrieves personal health app data data from the Philips medical devices and health technology systems.
  tags:
  - personal
  - philips
  - data
capability:
  exposes:
  - type: mcp
    namespace: personal
    port: 8080
    tools:
    - name: personal-health-app-data
      description: Retrieves personal health app data data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.personal-health-app-data
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /personal/health/app/data/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: personal-health-app-data
        method: GET
Open in Framework → View in Fleet → personal-health-app-data.yml

When a product recall is initiated, retrieves affected device records, sends recall notices via SendGrid to healthcare facilities, creates tracking cases in Salesforce, and logs in Snowflake.

naftiko: '0.5'
info:
  label: Product Recall Notification Dispatcher
  description: When a product recall is initiated, retrieves affected device records, sends recall notices via SendGrid to healthcare facilities, creates tracking cases in Salesforce, and logs in Snowflake.
  tags:
  - medical-devices
  - regulatory
  - sendgrid
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: recall-ops
    port: 8080
    tools:
    - name: dispatch-recall-notifications
      description: Dispatch product recall notifications to affected healthcare facilities.
      inputParameters:
      - name: recall_id
        in: body
        type: string
        description: The recall identifier.
      - name: device_model
        in: body
        type: string
        description: The affected device model.
      - name: reason
        in: body
        type: string
        description: Reason for the recall.
      steps:
      - name: get-affected-devices
        type: call
        call: device-api.get-installed-base
        with:
          model: '{{device_model}}'
      - name: send-recall-notices
        type: call
        call: sendgrid.send-batch
        with:
          recipients: '{{get-affected-devices.facility_contacts}}'
          subject: Philips Product Recall Notice - {{device_model}}
          body: 'Recall ID: {{recall_id}}. Reason: {{reason}}. Please contact Philips support for remediation.'
      - name: create-sf-cases
        type: call
        call: salesforce.create-bulk-cases
        with:
          recall_id: '{{recall_id}}'
          facilities: '{{get-affected-devices.facilities}}'
      - name: log-recall
        type: call
        call: snowflake.insert-record
        with:
          table: product_recalls
          data:
            recall_id: '{{recall_id}}'
            device_model: '{{device_model}}'
            affected_count: '{{get-affected-devices.total_count}}'
  consumes:
  - type: http
    namespace: device-api
    baseUri: https://api.philips.com/devices/v1
    authentication:
      type: bearer
      token: $secrets.philips_device_token
    resources:
    - name: installed-base
      path: /models/{{model}}/installed-base
      inputParameters:
      - name: model
        in: path
      operations:
      - name: get-installed-base
        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-batch
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-bulk-cases
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
Open in Framework → View in Fleet → product-recall-notification-dispatcher.yml

Orchestrates aed readiness compliance pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Aed Readiness Compliance Pipeline
  description: Orchestrates aed readiness compliance pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - aed
  - philips
  - servicenow
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: aed
    port: 8080
    tools:
    - name: aed-readiness-compliance-pipeline
      description: Orchestrates aed readiness compliance pipeline across medical devices and health technology 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/aed
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/aed
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/aed
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → aed-readiness-compliance-pipeline.yml

Orchestrates hospital energy efficiency monitoring pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Hospital Energy Efficiency Monitoring Pipeline
  description: Orchestrates hospital energy efficiency monitoring pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - hospital
  - philips
  - teams
  - confluence
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: hospital
    port: 8080
    tools:
    - name: hospital-energy-efficiency-monitoring-pipeline
      description: Orchestrates hospital energy efficiency monitoring pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/hospital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/hospital
      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/hospital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → hospital-energy-efficiency-monitoring-pipeline.yml

When a service request is created, checks technician availability, dispatches a field engineer via the FSM system, creates a ServiceNow work order, and notifies the customer via SendGrid.

naftiko: '0.5'
info:
  label: Field Service Dispatch Orchestrator
  description: When a service request is created, checks technician availability, dispatches a field engineer via the FSM system, creates a ServiceNow work order, and notifies the customer via SendGrid.
  tags:
  - medical-devices
  - field-service
  - servicenow
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: field-service
    port: 8080
    tools:
    - name: dispatch-field-engineer
      description: Dispatch a field service engineer for a medical device service request.
      inputParameters:
      - name: service_request_id
        in: body
        type: string
        description: The service request identifier.
      - name: device_serial
        in: body
        type: string
        description: The device serial number.
      - name: facility_id
        in: body
        type: string
        description: The healthcare facility identifier.
      - name: customer_email
        in: body
        type: string
        description: The facility contact email.
      steps:
      - name: check-availability
        type: call
        call: fsm-api.find-available-tech
        with:
          facility_id: '{{facility_id}}'
          device_type: '{{device_serial}}'
      - name: create-dispatch
        type: call
        call: fsm-api.create-dispatch
        with:
          technician_id: '{{check-availability.technician_id}}'
          service_request_id: '{{service_request_id}}'
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          short_description: 'Field service: {{device_serial}} at {{facility_id}}'
          technician: '{{check-availability.technician_name}}'
          eta: '{{create-dispatch.eta}}'
      - name: notify-customer
        type: call
        call: sendgrid.send-email
        with:
          to: '{{customer_email}}'
          subject: Philips Service Visit Scheduled
          body: 'Technician {{check-availability.technician_name}} will arrive on {{create-dispatch.eta}}. Work order: {{create-work-order.number}}'
  consumes:
  - type: http
    namespace: fsm-api
    baseUri: https://api.philips.com/fieldservice/v1
    authentication:
      type: bearer
      token: $secrets.philips_fsm_token
    resources:
    - name: technicians
      path: /technicians/available
      operations:
      - name: find-available-tech
        method: GET
    - name: dispatches
      path: /dispatches
      operations:
      - name: create-dispatch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → field-service-dispatch-orchestrator.yml

Orchestrates product sustainability compliance tracker across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Product Sustainability Compliance Tracker
  description: Orchestrates product sustainability compliance tracker across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - product
  - philips
  - jira
  - teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: product
    port: 8080
    tools:
    - name: product-sustainability-compliance-tracker
      description: Orchestrates product sustainability compliance tracker across medical devices and health technology 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: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/product
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/product
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/product
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → product-sustainability-compliance-tracker.yml

Retrieves infusion pump library lookup data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Infusion Pump Library Lookup
  description: Retrieves infusion pump library lookup data from the Philips medical devices and health technology systems.
  tags:
  - infusion
  - philips
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: infusion
    port: 8080
    tools:
    - name: infusion-pump-library-lookup
      description: Retrieves infusion pump library lookup data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.infusion-pump-library-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /infusion/pump/library/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: infusion-pump-library-lookup
        method: GET
Open in Framework → View in Fleet → infusion-pump-library-lookup.yml

Orchestrates device interoperability testing pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Device Interoperability Testing Pipeline
  description: Orchestrates device interoperability testing pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - device
  - philips
  - confluence
  - datadog
  - philips
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-interoperability-testing-pipeline
      description: Orchestrates device interoperability testing pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: philips.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/device
      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/device
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/device
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → device-interoperability-testing-pipeline.yml

Pulls approved expense reports from SAP Concur, creates journal entries in Oracle, and notifies the finance controller via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Expense Sync
  description: Pulls approved expense reports from SAP Concur, creates journal entries in Oracle, and notifies the finance controller via Microsoft Teams.
  tags:
  - finance
  - sap-concur
  - oracle
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: expense-ops
    port: 8080
    tools:
    - name: sync-approved-expenses
      description: Sync approved SAP Concur expenses to Oracle and notify finance.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report identifier.
      steps:
      - name: get-expense-report
        type: call
        call: concur.get-report
        with:
          report_id: '{{report_id}}'
      - name: create-journal
        type: call
        call: oracle.create-journal-entry
        with:
          amount: '{{get-expense-report.total_amount}}'
          cost_center: '{{get-expense-report.cost_center}}'
          description: Expense report {{report_id}}
      - name: notify-controller
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-ops
          text: 'Expense report {{report_id}} synced. Amount: ${{get-expense-report.total_amount}}. Journal: {{create-journal.entry_id}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://philips.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: journals
      path: /journalEntries
      operations:
      - name: create-journal-entry
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-sync.yml

Retrieves imaging system config data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Imaging System Config
  description: Retrieves imaging system config data from the Philips medical devices and health technology systems.
  tags:
  - imaging
  - philips
  - config
capability:
  exposes:
  - type: mcp
    namespace: imaging
    port: 8080
    tools:
    - name: imaging-system-config
      description: Retrieves imaging system config data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.imaging-system-config
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /imaging/system/config/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: imaging-system-config
        method: GET
Open in Framework → View in Fleet → imaging-system-config.yml

Orchestrates patient feedback analysis pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Patient Feedback Analysis Pipeline
  description: Orchestrates patient feedback analysis pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - patient
  - philips
  - sap
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: patient
    port: 8080
    tools:
    - name: patient-feedback-analysis-pipeline
      description: Orchestrates patient feedback analysis pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: sap.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/patient
      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/patient
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/patient
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → patient-feedback-analysis-pipeline.yml

Orchestrates spare parts demand forecasting pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Spare Parts Demand Forecasting Pipeline
  description: Orchestrates spare parts demand forecasting pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - spare
  - philips
  - philips
  - servicenow
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: spare
    port: 8080
    tools:
    - name: spare-parts-demand-forecasting-pipeline
      description: Orchestrates spare parts demand forecasting pipeline across medical devices and health technology 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: philips.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: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/spare
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/spare
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/spare
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → spare-parts-demand-forecasting-pipeline.yml

Retrieves aed device inspection status data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Aed Device Inspection Status
  description: Retrieves aed device inspection status data from the Philips medical devices and health technology systems.
  tags:
  - aed
  - philips
  - status
capability:
  exposes:
  - type: mcp
    namespace: aed
    port: 8080
    tools:
    - name: aed-device-inspection-status
      description: Retrieves aed device inspection status data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.aed-device-inspection-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /aed/device/inspection/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: aed-device-inspection-status
        method: GET
Open in Framework → View in Fleet → aed-device-inspection-status.yml

Orchestrates oral health program enrollment pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Oral Health Program Enrollment Pipeline
  description: Orchestrates oral health program enrollment pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - oral
  - philips
  - philips
  - servicenow
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: oral
    port: 8080
    tools:
    - name: oral-health-program-enrollment-pipeline
      description: Orchestrates oral health program enrollment pipeline across medical devices and health technology 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: philips.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: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/oral
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/oral
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/oral
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → oral-health-program-enrollment-pipeline.yml

Retrieves oral healthcare device status data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Oral Healthcare Device Status
  description: Retrieves oral healthcare device status data from the Philips medical devices and health technology systems.
  tags:
  - oral
  - philips
  - status
capability:
  exposes:
  - type: mcp
    namespace: oral
    port: 8080
    tools:
    - name: oral-healthcare-device-status
      description: Retrieves oral healthcare device status data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.oral-healthcare-device-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /oral/healthcare/device/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: oral-healthcare-device-status
        method: GET
Open in Framework → View in Fleet → oral-healthcare-device-status.yml

Retrieves medical alert threshold lookup data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Medical Alert Threshold Lookup
  description: Retrieves medical alert threshold lookup data from the Philips medical devices and health technology systems.
  tags:
  - medical
  - philips
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: medical
    port: 8080
    tools:
    - name: medical-alert-threshold-lookup
      description: Retrieves medical alert threshold lookup data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.medical-alert-threshold-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /medical/alert/threshold/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: medical-alert-threshold-lookup
        method: GET
Open in Framework → View in Fleet → medical-alert-threshold-lookup.yml

Pulls sprint progress from Jira for R&D teams and posts a summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Jira R&D Sprint Reporter
  description: Pulls sprint progress from Jira for R&D teams and posts a summary to Microsoft Teams.
  tags:
  - r-and-d
  - development
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rnd-reporting
    port: 8080
    tools:
    - name: report-rnd-sprint
      description: Generate and post an R&D sprint status report to Teams.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board identifier.
      steps:
      - name: get-sprint
        type: call
        call: jira.get-active-sprint
        with:
          board_id: '{{board_id}}'
      - name: get-issues
        type: call
        call: jira.get-sprint-issues
        with:
          sprint_id: '{{get-sprint.id}}'
      - name: post-report
        type: call
        call: msteams.send-message
        with:
          channel_id: rnd-engineering
          text: 'Sprint {{get-sprint.name}}: {{get-issues.done_count}}/{{get-issues.total_count}} done. {{get-issues.in_progress_count}} in progress.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://philips.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?state=active
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-active-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: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → jira-r-d-sprint-reporter.yml

Pulls production metrics from the MES (Manufacturing Execution System), analyzes efficiency in Snowflake, and refreshes the manufacturing dashboard in Tableau.

naftiko: '0.5'
info:
  label: Manufacturing Line Efficiency Reporter
  description: Pulls production metrics from the MES (Manufacturing Execution System), analyzes efficiency in Snowflake, and refreshes the manufacturing dashboard in Tableau.
  tags:
  - manufacturing
  - analytics
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-analytics
    port: 8080
    tools:
    - name: report-line-efficiency
      description: Generate a manufacturing line efficiency report.
      inputParameters:
      - name: plant_id
        in: body
        type: string
        description: The manufacturing plant identifier.
      - name: line_id
        in: body
        type: string
        description: The production line identifier.
      - name: date
        in: body
        type: string
        description: The reporting date.
      steps:
      - name: get-production-data
        type: call
        call: mes-api.get-line-metrics
        with:
          plant_id: '{{plant_id}}'
          line_id: '{{line_id}}'
          date: '{{date}}'
      - name: analyze-efficiency
        type: call
        call: snowflake.execute-query
        with:
          query: CALL calculate_oee('{{plant_id}}', '{{line_id}}', '{{date}}')
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-extract
        with:
          datasource_id: manufacturing_efficiency_ds
  consumes:
  - type: http
    namespace: mes-api
    baseUri: https://api.philips.com/manufacturing/v1
    authentication:
      type: bearer
      token: $secrets.philips_mes_token
    resources:
    - name: lines
      path: /plants/{{plant_id}}/lines/{{line_id}}/metrics
      inputParameters:
      - name: plant_id
        in: path
      - name: line_id
        in: path
      operations:
      - name: get-line-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://philips.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: tableau
    baseUri: https://tableau.philips.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/philips/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-extract
        method: POST
Open in Framework → View in Fleet → manufacturing-line-efficiency-reporter.yml

Queries the installed base of a specific device model. Returns total devices, geographic distribution, and firmware version breakdown.

naftiko: '0.5'
info:
  label: Device Installed Base Lookup
  description: Queries the installed base of a specific device model. Returns total devices, geographic distribution, and firmware version breakdown.
  tags:
  - medical-devices
  - device-management
capability:
  exposes:
  - type: mcp
    namespace: installed-base
    port: 8080
    tools:
    - name: get-installed-base
      description: Look up the installed base for a device model.
      inputParameters:
      - name: device_model
        in: body
        type: string
        description: The device model identifier.
      call: device-api.get-model-base
      with:
        model: '{{device_model}}'
      outputParameters:
      - name: total_devices
        type: integer
        mapping: $.data.total_count
      - name: by_region
        type: object
        mapping: $.data.by_region
      - name: firmware_distribution
        type: object
        mapping: $.data.firmware_versions
  consumes:
  - type: http
    namespace: device-api
    baseUri: https://api.philips.com/devices/v1
    authentication:
      type: bearer
      token: $secrets.philips_device_token
    resources:
    - name: models
      path: /models/{{model}}/installed-base
      inputParameters:
      - name: model
        in: path
      operations:
      - name: get-model-base
        method: GET
Open in Framework → View in Fleet → device-installed-base-lookup.yml

Orchestrates population health insights pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Population Health Insights Pipeline
  description: Orchestrates population health insights pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - population
  - philips
  - philips
  - servicenow
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: population
    port: 8080
    tools:
    - name: population-health-insights-pipeline
      description: Orchestrates population health insights pipeline across medical devices and health technology 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: philips.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: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/population
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/population
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/population
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → population-health-insights-pipeline.yml

Tracks medical device calibration schedules, flags overdue calibrations in ServiceNow, and notifies the biomedical engineering team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Device Calibration Tracker
  description: Tracks medical device calibration schedules, flags overdue calibrations in ServiceNow, and notifies the biomedical engineering team via Microsoft Teams.
  tags:
  - medical-devices
  - quality
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: calibration-ops
    port: 8080
    tools:
    - name: check-calibration-status
      description: Check device calibration status and escalate overdue items.
      inputParameters:
      - name: facility_id
        in: body
        type: string
        description: The healthcare facility identifier.
      - name: device_type
        in: body
        type: string
        description: The device type to check.
      steps:
      - name: get-calibration-data
        type: call
        call: device-api.get-calibration-status
        with:
          facility_id: '{{facility_id}}'
          device_type: '{{device_type}}'
      - name: create-overdue-tickets
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Overdue calibrations: {{device_type}} at {{facility_id}}'
          category: device_calibration
          description: '{{get-calibration-data.overdue_count}} devices overdue for calibration.'
      - name: notify-biomed
        type: call
        call: msteams.send-message
        with:
          channel_id: biomedical-engineering
          text: 'Calibration alert: {{get-calibration-data.overdue_count}} overdue {{device_type}} devices at {{facility_id}}. Ticket: {{create-overdue-tickets.number}}'
  consumes:
  - type: http
    namespace: device-api
    baseUri: https://api.philips.com/devices/v1
    authentication:
      type: bearer
      token: $secrets.philips_device_token
    resources:
    - name: calibration
      path: /facilities/{{facility_id}}/calibration
      inputParameters:
      - name: facility_id
        in: path
      operations:
      - name: get-calibration-status
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → device-calibration-tracker.yml

Orchestrates patient outcome analytics pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Patient Outcome Analytics Pipeline
  description: Orchestrates patient outcome analytics pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - patient
  - philips
  - datadog
  - philips
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: patient
    port: 8080
    tools:
    - name: patient-outcome-analytics-pipeline
      description: Orchestrates patient outcome analytics pipeline across medical devices and health technology 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: philips.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.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/patient
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/patient
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/patient
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → patient-outcome-analytics-pipeline.yml

Orchestrates healthcare data privacy audit pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Healthcare Data Privacy Audit Pipeline
  description: Orchestrates healthcare data privacy audit pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - healthcare
  - philips
  - snowflake
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: healthcare
    port: 8080
    tools:
    - name: healthcare-data-privacy-audit-pipeline
      description: Orchestrates healthcare data privacy audit pipeline across medical devices and health technology 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: sap.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://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/healthcare
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/healthcare
      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/healthcare
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → healthcare-data-privacy-audit-pipeline.yml

Orchestrates device lifecycle management pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Device Lifecycle Management Pipeline
  description: Orchestrates device lifecycle management pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - device
  - philips
  - philips
  - servicenow
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-lifecycle-management-pipeline
      description: Orchestrates device lifecycle management pipeline across medical devices and health technology 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: philips.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: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/device
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/device
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/device
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → device-lifecycle-management-pipeline.yml

Orchestrates hospital capacity planning pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Hospital Capacity Planning Pipeline
  description: Orchestrates hospital capacity planning pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - hospital
  - philips
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: hospital
    port: 8080
    tools:
    - name: hospital-capacity-planning-pipeline
      description: Orchestrates hospital capacity planning pipeline across medical devices and health technology 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: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/hospital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/hospital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/hospital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → hospital-capacity-planning-pipeline.yml

Records quality inspection results from the manufacturing line, creates non-conformance reports in the QMS if defects are found, and notifies quality managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Production Quality Inspection Logger
  description: Records quality inspection results from the manufacturing line, creates non-conformance reports in the QMS if defects are found, and notifies quality managers via Microsoft Teams.
  tags:
  - manufacturing
  - quality
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-inspection
    port: 8080
    tools:
    - name: log-inspection-results
      description: Log production quality inspection results and escalate defects.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: The production line identifier.
      - name: batch_id
        in: body
        type: string
        description: The production batch identifier.
      - name: inspection_score
        in: body
        type: number
        description: Inspection score (0-100).
      - name: defects_found
        in: body
        type: integer
        description: Number of defects found.
      steps:
      - name: log-inspection
        type: call
        call: mes-api.record-inspection
        with:
          line_id: '{{line_id}}'
          batch_id: '{{batch_id}}'
          score: '{{inspection_score}}'
          defects: '{{defects_found}}'
      - name: create-ncr
        type: call
        call: qms-api.create-ncr
        with:
          batch_id: '{{batch_id}}'
          line_id: '{{line_id}}'
          defect_count: '{{defects_found}}'
      - name: notify-quality
        type: call
        call: msteams.send-message
        with:
          channel_id: quality-alerts
          text: 'Inspection for batch {{batch_id}} on line {{line_id}}: Score {{inspection_score}}/100. Defects: {{defects_found}}. NCR: {{create-ncr.ncr_id}}'
  consumes:
  - type: http
    namespace: mes-api
    baseUri: https://api.philips.com/manufacturing/v1
    authentication:
      type: bearer
      token: $secrets.philips_mes_token
    resources:
    - name: inspections
      path: /inspections
      operations:
      - name: record-inspection
        method: POST
  - type: http
    namespace: qms-api
    baseUri: https://api.philips.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.philips_qms_token
    resources:
    - name: ncrs
      path: /non-conformances
      operations:
      - name: create-ncr
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → production-quality-inspection-logger.yml

Retrieves connected care device metrics data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Connected Care Device Metrics
  description: Retrieves connected care device metrics data from the Philips medical devices and health technology systems.
  tags:
  - connected
  - philips
  - metrics
capability:
  exposes:
  - type: mcp
    namespace: connected
    port: 8080
    tools:
    - name: connected-care-device-metrics
      description: Retrieves connected care device metrics data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.connected-care-device-metrics
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /connected/care/device/metrics/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: connected-care-device-metrics
        method: GET
Open in Framework → View in Fleet → connected-care-device-metrics.yml

Orchestrates supply chain demand sensing pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Supply Chain Demand Sensing Pipeline
  description: Orchestrates supply chain demand sensing pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - supply
  - philips
  - teams
  - confluence
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: supply
    port: 8080
    tools:
    - name: supply-chain-demand-sensing-pipeline
      description: Orchestrates supply chain demand sensing pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: teams.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: confluence.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/supply
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/supply
      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/supply
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → supply-chain-demand-sensing-pipeline.yml

Pulls clinical trial data from the trial management system, aggregates results in Snowflake, and generates a summary report stored in SharePoint for the research team.

naftiko: '0.5'
info:
  label: R&D Clinical Trial Data Aggregator
  description: Pulls clinical trial data from the trial management system, aggregates results in Snowflake, and generates a summary report stored in SharePoint for the research team.
  tags:
  - r-and-d
  - clinical-trials
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: clinical-research
    port: 8080
    tools:
    - name: aggregate-trial-data
      description: Aggregate clinical trial data and generate a summary report.
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: The clinical trial identifier.
      - name: phase
        in: body
        type: string
        description: The trial phase (Phase I, Phase II, Phase III).
      steps:
      - name: get-trial-data
        type: call
        call: ctms-api.get-trial-results
        with:
          trial_id: '{{trial_id}}'
          phase: '{{phase}}'
      - name: aggregate-results
        type: call
        call: snowflake.execute-query
        with:
          query: CALL aggregate_trial_results('{{trial_id}}', '{{phase}}')
      - name: store-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: clinical-research
          file_path: TrialReports/{{trial_id}}_{{phase}}.xlsx
  consumes:
  - type: http
    namespace: ctms-api
    baseUri: https://api.philips.com/ctms/v1
    authentication:
      type: bearer
      token: $secrets.philips_ctms_token
    resources:
    - name: trials
      path: /trials/{{trial_id}}/results
      inputParameters:
      - name: trial_id
        in: path
      operations:
      - name: get-trial-results
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → r-d-clinical-trial-data-aggregator.yml

Retrieves real-time telemetry data from a patient monitoring device. Returns vital signs, alert status, and device connectivity status.

naftiko: '0.5'
info:
  label: Patient Monitor Telemetry Lookup
  description: Retrieves real-time telemetry data from a patient monitoring device. Returns vital signs, alert status, and device connectivity status.
  tags:
  - patient-monitoring
  - medical-devices
  - telemetry
capability:
  exposes:
  - type: mcp
    namespace: patient-telemetry
    port: 8080
    tools:
    - name: get-device-telemetry
      description: Retrieve real-time telemetry from a patient monitoring device.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: The patient monitor device identifier.
      call: monitoring-api.get-telemetry
      with:
        device_id: '{{device_id}}'
      outputParameters:
      - name: heart_rate
        type: number
        mapping: $.data.vitals.heart_rate
      - name: spo2
        type: number
        mapping: $.data.vitals.spo2
      - name: alert_status
        type: string
        mapping: $.data.alert_status
      - name: connectivity
        type: string
        mapping: $.data.connectivity_status
  consumes:
  - type: http
    namespace: monitoring-api
    baseUri: https://api.philips.com/monitoring/v1
    authentication:
      type: bearer
      token: $secrets.philips_monitoring_token
    resources:
    - name: telemetry
      path: /devices/{{device_id}}/telemetry
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-telemetry
        method: GET
Open in Framework → View in Fleet → patient-monitor-telemetry-lookup.yml

Tracks regulatory submissions (FDA, CE) by pulling status from the regulatory affairs system, logging updates in Snowflake, and notifying the compliance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Regulatory Submission Tracker
  description: Tracks regulatory submissions (FDA, CE) by pulling status from the regulatory affairs system, logging updates in Snowflake, and notifying the compliance team in Microsoft Teams.
  tags:
  - r-and-d
  - regulatory
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: track-submission-status
      description: Track regulatory submission status and notify compliance team.
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: The regulatory submission identifier.
      - name: agency
        in: body
        type: string
        description: Regulatory agency (FDA, CE, PMDA).
      steps:
      - name: get-status
        type: call
        call: regulatory-api.get-submission
        with:
          submission_id: '{{submission_id}}'
      - name: log-update
        type: call
        call: snowflake.insert-record
        with:
          table: regulatory_submissions
          data:
            submission_id: '{{submission_id}}'
            agency: '{{agency}}'
            status: '{{get-status.current_status}}'
            last_action: '{{get-status.last_action_date}}'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: regulatory-compliance
          text: 'Submission {{submission_id}} ({{agency}}): Status {{get-status.current_status}}. Last action: {{get-status.last_action_date}}'
  consumes:
  - type: http
    namespace: regulatory-api
    baseUri: https://api.philips.com/regulatory/v1
    authentication:
      type: bearer
      token: $secrets.philips_regulatory_token
    resources:
    - name: submissions
      path: /submissions/{{submission_id}}
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: get-submission
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → regulatory-submission-tracker.yml

Pulls patent application status from the IP management system, updates records in Salesforce, and generates a portfolio report in Snowflake for the innovation team.

naftiko: '0.5'
info:
  label: R&D Patent Portfolio Tracker
  description: Pulls patent application status from the IP management system, updates records in Salesforce, and generates a portfolio report in Snowflake for the innovation team.
  tags:
  - r-and-d
  - intellectual-property
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: patent-ops
    port: 8080
    tools:
    - name: track-patent-portfolio
      description: Track patent application status and generate portfolio reports.
      inputParameters:
      - name: business_unit
        in: body
        type: string
        description: The business unit to report on.
      - name: year
        in: body
        type: string
        description: The patent filing year.
      steps:
      - name: get-patent-data
        type: call
        call: ip-api.get-patents
        with:
          business_unit: '{{business_unit}}'
          year: '{{year}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-patent-records
        with:
          patents: '{{get-patent-data.applications}}'
      - name: generate-report
        type: call
        call: snowflake.execute-query
        with:
          query: CALL generate_patent_report('{{business_unit}}', '{{year}}')
  consumes:
  - type: http
    namespace: ip-api
    baseUri: https://api.philips.com/ip/v1
    authentication:
      type: bearer
      token: $secrets.philips_ip_token
    resources:
    - name: patents
      path: /patents?bu={{business_unit}}&year={{year}}
      inputParameters:
      - name: business_unit
        in: query
      - name: year
        in: query
      operations:
      - name: get-patents
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: patents
      path: /sobjects/Patent_Application__c
      operations:
      - name: update-patent-records
        method: PATCH
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → r-d-patent-portfolio-tracker.yml

Orchestrates clinical documentation automation pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Clinical Documentation Automation Pipeline
  description: Orchestrates clinical documentation automation pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - clinical
  - philips
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: clinical-documentation-automation-pipeline
      description: Orchestrates clinical documentation automation pipeline across medical devices and health technology 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: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/clinical
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/clinical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/clinical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → clinical-documentation-automation-pipeline.yml

Orchestrates clinical workflow optimization pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Clinical Workflow Optimization Pipeline
  description: Orchestrates clinical workflow optimization pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - clinical
  - philips
  - confluence
  - datadog
  - philips
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: clinical-workflow-optimization-pipeline
      description: Orchestrates clinical workflow optimization pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: confluence.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: philips.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/clinical
      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/clinical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/clinical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → clinical-workflow-optimization-pipeline.yml

Orchestrates patient alarm fatigue reduction workflow across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Patient Alarm Fatigue Reduction Workflow
  description: Orchestrates patient alarm fatigue reduction workflow across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - patient
  - philips
  - salesforce
  - snowflake
  - sap
capability:
  exposes:
  - type: mcp
    namespace: patient
    port: 8080
    tools:
    - name: patient-alarm-fatigue-reduction-workflow
      description: Orchestrates patient alarm fatigue reduction workflow across medical devices and health technology 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: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: sap.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/patient
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/patient
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/patient
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → patient-alarm-fatigue-reduction-workflow.yml

Orchestrates warranty claim fraud detection pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Warranty Claim Fraud Detection Pipeline
  description: Orchestrates warranty claim fraud detection pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - warranty
  - philips
  - snowflake
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: warranty
    port: 8080
    tools:
    - name: warranty-claim-fraud-detection-pipeline
      description: Orchestrates warranty claim fraud detection pipeline across medical devices and health technology 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: sap.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://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/warranty
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/warranty
      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/warranty
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → warranty-claim-fraud-detection-pipeline.yml

Submits a pathology slide for AI-assisted analysis, stores results in Snowflake, and notifies the pathology team in Microsoft Teams with preliminary findings.

naftiko: '0.5'
info:
  label: Digital Pathology Image Processor
  description: Submits a pathology slide for AI-assisted analysis, stores results in Snowflake, and notifies the pathology team in Microsoft Teams with preliminary findings.
  tags:
  - medical-devices
  - r-and-d
  - ai
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: digital-pathology
    port: 8080
    tools:
    - name: process-pathology-slide
      description: Submit a pathology slide for AI analysis and notify the pathology team.
      inputParameters:
      - name: slide_id
        in: body
        type: string
        description: The digital pathology slide identifier.
      - name: analysis_type
        in: body
        type: string
        description: Type of analysis (tumor-detection, cell-counting, tissue-classification).
      steps:
      - name: submit-analysis
        type: call
        call: pathology-api.submit-analysis
        with:
          slide_id: '{{slide_id}}'
          type: '{{analysis_type}}'
      - name: store-results
        type: call
        call: snowflake.insert-record
        with:
          table: pathology_analyses
          data:
            slide_id: '{{slide_id}}'
            analysis_type: '{{analysis_type}}'
            confidence: '{{submit-analysis.confidence_score}}'
            findings: '{{submit-analysis.summary}}'
      - name: notify-pathologists
        type: call
        call: msteams.send-message
        with:
          channel_id: digital-pathology
          text: 'AI analysis complete for slide {{slide_id}}: {{submit-analysis.summary}} (Confidence: {{submit-analysis.confidence_score}}%)'
  consumes:
  - type: http
    namespace: pathology-api
    baseUri: https://api.philips.com/pathology/v1
    authentication:
      type: bearer
      token: $secrets.philips_pathology_token
    resources:
    - name: analyses
      path: /slides/{{slide_id}}/analyze
      inputParameters:
      - name: slide_id
        in: path
      operations:
      - name: submit-analysis
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-record
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → digital-pathology-image-processor.yml

Orchestrates hospital procurement rfq pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Hospital Procurement Rfq Pipeline
  description: Orchestrates hospital procurement rfq pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - hospital
  - philips
  - jira
  - teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: hospital
    port: 8080
    tools:
    - name: hospital-procurement-rfq-pipeline
      description: Orchestrates hospital procurement rfq pipeline across medical devices and health technology 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: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/hospital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/hospital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/hospital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → hospital-procurement-rfq-pipeline.yml

Retrieves patient pathway status data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Patient Pathway Status
  description: Retrieves patient pathway status data from the Philips medical devices and health technology systems.
  tags:
  - patient
  - philips
  - status
capability:
  exposes:
  - type: mcp
    namespace: patient
    port: 8080
    tools:
    - name: patient-pathway-status
      description: Retrieves patient pathway status data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.patient-pathway-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /patient/pathway/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: patient-pathway-status
        method: GET
Open in Framework → View in Fleet → patient-pathway-status.yml

Retrieves radiology report status data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Radiology Report Status
  description: Retrieves radiology report status data from the Philips medical devices and health technology systems.
  tags:
  - radiology
  - philips
  - status
capability:
  exposes:
  - type: mcp
    namespace: radiology
    port: 8080
    tools:
    - name: radiology-report-status
      description: Retrieves radiology report status data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.radiology-report-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /radiology/report/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: radiology-report-status
        method: GET
Open in Framework → View in Fleet → radiology-report-status.yml

Orchestrates hospital network onboarding pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Hospital Network Onboarding Pipeline
  description: Orchestrates hospital network onboarding pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - hospital
  - philips
  - slack
  - jira
  - teams
capability:
  exposes:
  - type: mcp
    namespace: hospital
    port: 8080
    tools:
    - name: hospital-network-onboarding-pipeline
      description: Orchestrates hospital network onboarding pipeline across medical devices and health technology 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: teams.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: slack-resource
      path: /api/hospital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/hospital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/hospital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → hospital-network-onboarding-pipeline.yml

Orchestrates imaging ai model deployment pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Imaging Ai Model Deployment Pipeline
  description: Orchestrates imaging ai model deployment pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - imaging
  - philips
  - sap
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: imaging
    port: 8080
    tools:
    - name: imaging-ai-model-deployment-pipeline
      description: Orchestrates imaging ai model deployment pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The primary input identifier.
      steps:
      - name: step-1
        type: call
        call: sap.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/imaging
      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/imaging
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/imaging
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → imaging-ai-model-deployment-pipeline.yml

Orchestrates clinical trial data aggregation pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Clinical Trial Data Aggregation Pipeline
  description: Orchestrates clinical trial data aggregation pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - clinical
  - philips
  - servicenow
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: clinical-trial-data-aggregation-pipeline
      description: Orchestrates clinical trial data aggregation pipeline across medical devices and health technology 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/clinical
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/clinical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/clinical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → clinical-trial-data-aggregation-pipeline.yml

Orchestrates medical device recall coordination pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Medical Device Recall Coordination Pipeline
  description: Orchestrates medical device recall coordination pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - medical
  - philips
  - servicenow
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: medical
    port: 8080
    tools:
    - name: medical-device-recall-coordination-pipeline
      description: Orchestrates medical device recall coordination pipeline across medical devices and health technology 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/medical
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/medical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/medical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → medical-device-recall-coordination-pipeline.yml

Orchestrates device compliance certificate renewal pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Device Compliance Certificate Renewal Pipeline
  description: Orchestrates device compliance certificate renewal pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - device
  - philips
  - snowflake
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-compliance-certificate-renewal-pipeline
      description: Orchestrates device compliance certificate renewal pipeline across medical devices and health technology 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: sap.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://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/device
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/device
      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/device
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → device-compliance-certificate-renewal-pipeline.yml

Orchestrates field service technician dispatch optimizer across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Field Service Technician Dispatch Optimizer
  description: Orchestrates field service technician dispatch optimizer across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - field
  - philips
  - snowflake
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: field
    port: 8080
    tools:
    - name: field-service-technician-dispatch-optimizer
      description: Orchestrates field service technician dispatch optimizer across medical devices and health technology 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: sap.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://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/field
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/field
      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/field
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → field-service-technician-dispatch-optimizer.yml

Orchestrates medical imaging storage optimization pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Medical Imaging Storage Optimization Pipeline
  description: Orchestrates medical imaging storage optimization pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - medical
  - philips
  - servicenow
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: medical
    port: 8080
    tools:
    - name: medical-imaging-storage-optimization-pipeline
      description: Orchestrates medical imaging storage optimization pipeline across medical devices and health technology 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: snowflake.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/medical
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/medical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/medical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → medical-imaging-storage-optimization-pipeline.yml

Validates vendor invoices against SAP purchase orders, creates payment requests in Oracle, and notifies the finance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Vendor Invoice Processor
  description: Validates vendor invoices against SAP purchase orders, creates payment requests in Oracle, and notifies the finance team in Microsoft Teams.
  tags:
  - manufacturing
  - finance
  - sap
  - oracle
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: vendor-payments
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Validate and process a vendor invoice against the purchase order.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The vendor invoice number.
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: amount
        in: body
        type: number
        description: The invoice amount.
      steps:
      - name: validate-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: create-payment
        type: call
        call: oracle.create-payment-request
        with:
          invoice_number: '{{invoice_number}}'
          po_number: '{{po_number}}'
          amount: '{{amount}}'
      - name: notify-finance
        type: call
        call: msteams.send-message
        with:
          channel_id: finance-approvals
          text: 'Invoice {{invoice_number}} for ${{amount}} validated against PO {{po_number}}. Payment: {{create-payment.request_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://philips.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://philips.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: payments
      path: /payablesInvoices
      operations:
      - name: create-payment-request
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-invoice-processor.yml

Orchestrates health system integration testing pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Health System Integration Testing Pipeline
  description: Orchestrates health system integration testing pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - health
  - philips
  - datadog
  - philips
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: health
    port: 8080
    tools:
    - name: health-system-integration-testing-pipeline
      description: Orchestrates health system integration testing pipeline across medical devices and health technology 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: philips.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.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/health
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/health
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/health
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → health-system-integration-testing-pipeline.yml

Orchestrates patient remote monitoring escalation workflow across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Patient Remote Monitoring Escalation Workflow
  description: Orchestrates patient remote monitoring escalation workflow across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - patient
  - philips
  - datadog
  - philips
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: patient
    port: 8080
    tools:
    - name: patient-remote-monitoring-escalation-workflow
      description: Orchestrates patient remote monitoring escalation workflow across medical devices and health technology 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: philips.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.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/patient
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: philips-resource
      path: /api/patient
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://philips.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/patient
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → patient-remote-monitoring-escalation-workflow.yml

Orchestrates clinical education content distribution pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Clinical Education Content Distribution Pipeline
  description: Orchestrates clinical education content distribution pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - clinical
  - philips
  - salesforce
  - snowflake
  - sap
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: clinical-education-content-distribution-pipeline
      description: Orchestrates clinical education content distribution pipeline across medical devices and health technology 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: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: sap.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/clinical
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/clinical
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/clinical
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → clinical-education-content-distribution-pipeline.yml

Orchestrates digital pathology quality assurance pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Digital Pathology Quality Assurance Pipeline
  description: Orchestrates digital pathology quality assurance pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - digital
  - philips
  - salesforce
  - snowflake
  - sap
capability:
  exposes:
  - type: mcp
    namespace: digital
    port: 8080
    tools:
    - name: digital-pathology-quality-assurance-pipeline
      description: Orchestrates digital pathology quality assurance pipeline across medical devices and health technology 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: snowflake.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: sap.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://philips.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/digital
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://philips.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/digital
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: sap
    baseUri: https://philips-erp.s4hana.ondemand.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: sap-resource
      path: /api/digital
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → digital-pathology-quality-assurance-pipeline.yml

Retrieves ventilator settings lookup data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Ventilator Settings Lookup
  description: Retrieves ventilator settings lookup data from the Philips medical devices and health technology systems.
  tags:
  - ventilator
  - philips
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: ventilator
    port: 8080
    tools:
    - name: ventilator-settings-lookup
      description: Retrieves ventilator settings lookup data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.ventilator-settings-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /ventilator/settings/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: ventilator-settings-lookup
        method: GET
Open in Framework → View in Fleet → ventilator-settings-lookup.yml

Orchestrates device connectivity troubleshooting pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Device Connectivity Troubleshooting Pipeline
  description: Orchestrates device connectivity troubleshooting pipeline across medical devices and health technology systems, coordinating multiple services and notifying stakeholders.
  tags:
  - device
  - philips
  - jira
  - teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-connectivity-troubleshooting-pipeline
      description: Orchestrates device connectivity troubleshooting pipeline across medical devices and health technology 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: teams.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://philips.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/device
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: teams-resource
      path: /api/device
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://philips.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/device
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → device-connectivity-troubleshooting-pipeline.yml

Retrieves spare parts catalog search data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Spare Parts Catalog Search
  description: Retrieves spare parts catalog search data from the Philips medical devices and health technology systems.
  tags:
  - spare
  - philips
  - search
capability:
  exposes:
  - type: mcp
    namespace: spare
    port: 8080
    tools:
    - name: spare-parts-catalog-search
      description: Retrieves spare parts catalog search data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.spare-parts-catalog-search
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /spare/parts/catalog/search/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: spare-parts-catalog-search
        method: GET
Open in Framework → View in Fleet → spare-parts-catalog-search.yml

Retrieves device warranty lookup data from the Philips medical devices and health technology systems.

naftiko: '0.5'
info:
  label: Device Warranty Lookup
  description: Retrieves device warranty lookup data from the Philips medical devices and health technology systems.
  tags:
  - device
  - philips
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: device
    port: 8080
    tools:
    - name: device-warranty-lookup
      description: Retrieves device warranty lookup data from the Philips medical devices and health technology systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: philips.device-warranty-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: philips
    baseUri: https://api.philips.com/v2
    authentication:
      type: bearer
      token: $secrets.philips_api_token
    resources:
    - name: resource
      path: /device/warranty/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: device-warranty-lookup
        method: GET
Open in Framework → View in Fleet → device-warranty-lookup.yml

Runs automated data quality checks on Snowflake translational research datasets and posts a quality summary report to the bioinformatics Teams channel.

naftiko: '0.5'
info:
  label: Snowflake Translational Research Data Quality Check
  description: Runs automated data quality checks on Snowflake translational research datasets and posts a quality summary report to the bioinformatics Teams channel.
  tags:
  - data
  - analytics
  - snowflake
  - microsoft-teams
  - data-quality
  - genomics
capability:
  exposes:
  - type: mcp
    namespace: research-data-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Given a Snowflake database and schema containing translational research data, execute quality checks for nulls, outliers, and referential integrity, then post results to Teams.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: The Snowflake database name containing research data.
      - name: schema_name
        in: body
        type: string
        description: The Snowflake schema name to run quality checks on.
      - name: channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the bioinformatics team.
      steps:
      - name: run-quality-checks
        type: call
        call: snowflake.execute-quality-check
        with:
          database: '{{database_name}}'
          schema: '{{schema_name}}'
      - name: post-quality-report
        type: call
        call: msteams.post-quality-summary
        with:
          channel_id: '{{channel_id}}'
          message: 'Data quality check for {{database_name}}.{{schema_name}}: {{run-quality-checks.pass_count}} passed, {{run-quality-checks.fail_count}} failed checks.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: execute-quality-check
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-quality-summary
        method: POST
Open in Framework → View in Fleet → snowflake-translational-research-data-quality-check.yml

Checks last refresh status of a Power BI dataset.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Check
  description: Checks last refresh status of a Power BI dataset.
  tags:
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: analytics-refresh
    port: 8080
    tools:
    - name: check-dataset-refresh
      description: Check Power BI refresh status.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The 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: refresh-history
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-check.yml

Checks last run status of a Snowflake data pipeline.

naftiko: '0.5'
info:
  label: Snowflake Pipeline Last Run Check
  description: Checks last run status of a Snowflake data pipeline.
  tags:
  - data-engineering
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-ops-monitor
    port: 8080
    tools:
    - name: check-pipeline-run
      description: Check pipeline run.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: The pipeline name.
      call: snowflake.run-query
      with:
        statement: SELECT status, last_run_at FROM data_ops.pipeline_runs WHERE pipeline_name='{{pipeline_name}}' ORDER BY last_run_at DESC LIMIT 1
      outputParameters:
      - name: status
        type: string
        mapping: $.data[0][0]
      - name: last_run
        type: string
        mapping: $.data[0][1]
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-pipeline-last-run-check.yml

Escalates overdue training by pulling Workday data, creating ServiceNow tasks, and notifying via Teams.

naftiko: '0.5'
info:
  label: Compliance Training Overdue Escalation
  description: Escalates overdue training by pulling Workday data, creating ServiceNow tasks, and notifying via Teams.
  tags:
  - compliance
  - hr
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: compliance-ops
    port: 8080
    tools:
    - name: compliance-training-overdue-escalation
      description: Escalates overdue training by pulling Workday data, creating ServiceNow tasks, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Compliance Training Overdue Escalation action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Compliance Training Overdue Escalation completed successfully.
  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: /regeneron/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → compliance-training-overdue-escalation.yml

Generates release notes by pulling Jira tickets and posting to engineering Teams channel.

naftiko: '0.5'
info:
  label: Jira Release Notes Generator
  description: Generates release notes by pulling Jira tickets and posting to engineering Teams channel.
  tags:
  - devops
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: jira-ops
    port: 8080
    tools:
    - name: jira-release-notes-generator
      description: Generates release notes by pulling Jira tickets and posting to engineering Teams channel.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Jira Release Notes Generator follow-up
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Jira Release Notes Generator completed successfully.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-release-notes-generator.yml

Retrieves the current status and assignment of a ServiceNow incident by number.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Check
  description: Retrieves the current status and assignment of a ServiceNow incident by number.
  tags:
  - it-service-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm-incident
    port: 8080
    tools:
    - name: get-incident-status
      description: Check ServiceNow incident status.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The incident number.
      call: servicenow.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.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
Open in Framework → View in Fleet → servicenow-incident-status-check.yml

Checks that all merged pull requests on protected branches meet minimum approval counts and flags violations in Jira for the R&D engineering team.

naftiko: '0.5'
info:
  label: GitHub Code Review Compliance Check
  description: Checks that all merged pull requests on protected branches meet minimum approval counts and flags violations in Jira for the R&D engineering team.
  tags:
  - devops
  - engineering
  - github
  - jira
  - compliance
  - code-review
capability:
  exposes:
  - type: mcp
    namespace: code-governance
    port: 8080
    tools:
    - name: check-pr-review-compliance
      description: Given a GitHub repository and minimum approval count, scan recently merged PRs for insufficient reviews and create Jira compliance tickets for violations.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: min_approvals
        in: body
        type: integer
        description: Minimum number of required review approvals per PR.
      steps:
      - name: get-merged-prs
        type: call
        call: github.list-merged-prs
        with:
          repository: '{{repository}}'
      - name: create-violation-ticket
        type: call
        call: jira.create-compliance-ticket
        with:
          project_key: SEC
          issuetype: Task
          summary: PR review compliance violations in {{repository}}
          description: '{{get-merged-prs.violation_count}} PRs merged with fewer than {{min_approvals}} approvals.'
  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-merged-prs
        method: GET
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-compliance-ticket
        method: POST
Open in Framework → View in Fleet → github-code-review-compliance-check.yml

Generates cost recommendations by analyzing Snowflake data, creating ServiceNow tickets, and notifying via Teams.

naftiko: '0.5'
info:
  label: Azure Cost Optimization Recommendation
  description: Generates cost recommendations by analyzing Snowflake data, creating ServiceNow tickets, and notifying via Teams.
  tags:
  - finops
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: azure-ops
    port: 8080
    tools:
    - name: azure-cost-optimization-recommendation
      description: Generates cost recommendations by analyzing Snowflake data, creating ServiceNow tickets, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Azure Cost Optimization Recommendation action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Azure Cost Optimization Recommendation completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cost-optimization-recommendation.yml

Checks latest GitHub Actions workflow run status.

naftiko: '0.5'
info:
  label: GitHub Actions Workflow Status
  description: Checks latest GitHub Actions workflow run status.
  tags:
  - devops
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: devops-ci
    port: 8080
    tools:
    - name: check-workflow-status
      description: Check workflow status.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: Repo (org/repo).
      - name: workflow_name
        in: body
        type: string
        description: Workflow file.
      call: github.get-workflow-runs
      with:
        repo: '{{repo_name}}'
        workflow: '{{workflow_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.workflow_runs[0].status
      - name: conclusion
        type: string
        mapping: $.workflow_runs[0].conclusion
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo_name}}/actions/runs
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
Open in Framework → View in Fleet → github-actions-workflow-status.yml

Routes lab notebooks for signatures by pulling from SharePoint and logging in Snowflake.

naftiko: '0.5'
info:
  label: Lab Notebook Electronic Signature Workflow
  description: Routes lab notebooks for signatures by pulling from SharePoint and logging in Snowflake.
  tags:
  - research
  - quality
  - sharepoint
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: lab-ops
    port: 8080
    tools:
    - name: lab-notebook-electronic-signature-workflow
      description: Routes lab notebooks for signatures by pulling from SharePoint and logging in Snowflake.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → lab-notebook-electronic-signature-workflow.yml

Monitors data quality SLAs by running Snowflake checks, creating ServiceNow tickets, and alerting via Teams.

naftiko: '0.5'
info:
  label: Snowflake Data Quality SLA Monitor
  description: Monitors data quality SLAs by running Snowflake checks, creating ServiceNow tickets, and alerting via Teams.
  tags:
  - data-engineering
  - data-quality
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: snowflake-ops
    port: 8080
    tools:
    - name: snowflake-data-quality-sla-monitor
      description: Monitors data quality SLAs by running Snowflake checks, creating ServiceNow tickets, and alerting via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Snowflake Data Quality SLA Monitor action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Snowflake Data Quality SLA Monitor completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-sla-monitor.yml

Checks whether a user has MFA enrolled in Okta.

naftiko: '0.5'
info:
  label: Okta User MFA Status Lookup
  description: Checks whether a user has MFA enrolled in Okta.
  tags:
  - identity
  - okta
capability:
  exposes:
  - type: mcp
    namespace: identity-mfa
    port: 8080
    tools:
    - name: get-mfa-status
      description: Check Okta MFA enrollment.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user email.
      call: okta.get-user-factors
      with:
        email: '{{user_email}}'
      outputParameters:
      - name: factors
        type: array
        mapping: $.factors
  consumes:
  - type: http
    namespace: okta
    baseUri: https://regeneron.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users/{{user_email}}/factors
      inputParameters:
      - name: user_email
        in: path
      operations:
      - name: get-user-factors
        method: GET
Open in Framework → View in Fleet → okta-user-mfa-status-lookup.yml

Validates journal entries by pulling SAP data, running Snowflake rules, and creating ServiceNow tickets.

naftiko: '0.5'
info:
  label: SAP Financial Journal Entry Validation
  description: Validates journal entries by pulling SAP data, running Snowflake rules, and creating ServiceNow tickets.
  tags:
  - finance
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: sap-ops
    port: 8080
    tools:
    - name: sap-financial-journal-entry-validation
      description: Validates journal entries by pulling SAP data, running Snowflake rules, and creating ServiceNow tickets.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sap-data
        type: call
        call: sap.get-partner
        with:
          filter: BusinessPartnerCategory eq 1
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: SAP Financial Journal Entry Validation action required
          category: automated
          assigned_group: Operations
  consumes:
  - type: http
    namespace: sap
    baseUri: https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: partners
      path: /A_BusinessPartner
      operations:
      - name: get-partner
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sap-financial-journal-entry-validation.yml

Tracks IRB submissions by logging Snowflake status, updating SharePoint, and notifying clinical via Teams.

naftiko: '0.5'
info:
  label: Clinical IRB Submission Tracker
  description: Tracks IRB submissions by logging Snowflake status, updating SharePoint, and notifying clinical via Teams.
  tags:
  - clinical
  - regulatory
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-irb-submission-tracker
      description: Tracks IRB submissions by logging Snowflake status, updating SharePoint, and notifying clinical via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical IRB Submission Tracker completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-irb-submission-tracker.yml

Retrieves SAP purchase order status by PO number.

naftiko: '0.5'
info:
  label: SAP Purchase Order Status Check
  description: Retrieves SAP purchase order status by PO number.
  tags:
  - finance
  - procurement
  - sap
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: check-po-status
      description: Check SAP PO status.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The PO number.
      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
  consumes:
  - type: http
    namespace: sap
    baseUri: https://regeneron-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-purchase-order-status-check.yml

Retrieves a CMDB configuration item by asset tag.

naftiko: '0.5'
info:
  label: ServiceNow CMDB CI Lookup
  description: Retrieves a CMDB configuration item by asset tag.
  tags:
  - it-asset-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm-cmdb
    port: 8080
    tools:
    - name: get-cmdb-ci
      description: Look up CMDB CI.
      inputParameters:
      - name: asset_tag
        in: body
        type: string
        description: The asset tag.
      call: servicenow.get-ci
      with:
        sysparm_query: asset_tag={{asset_tag}}
      outputParameters:
      - name: owner
        type: string
        mapping: $.result[0].owned_by.display_value
      - name: status
        type: string
        mapping: $.result[0].operational_status
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb-ci
      path: /table/cmdb_ci
      operations:
      - name: get-ci
        method: GET
Open in Framework → View in Fleet → servicenow-cmdb-ci-lookup.yml

Provisions new hire access by creating Okta accounts, assigning ServiceNow assets, and confirming via Teams.

naftiko: '0.5'
info:
  label: IT Onboarding Access Provisioning Orchestrator
  description: Provisions new hire access by creating Okta accounts, assigning ServiceNow assets, and confirming via Teams.
  tags:
  - hr
  - onboarding
  - okta
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: it-onboarding-access-provisioning-orchestrator
      description: Provisions new hire access by creating Okta accounts, assigning ServiceNow assets, and confirming via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: check-identity
        type: call
        call: okta.get-users
        with:
          filter: status eq ACTIVE
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: IT Onboarding Access Provisioning Orchestrator action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: IT Onboarding Access Provisioning Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: okta
    baseUri: https://regeneron.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users
      operations:
      - name: get-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-onboarding-access-provisioning-orchestrator.yml

Reconciles clinical data by comparing Snowflake sources and notifying data management via Teams.

naftiko: '0.5'
info:
  label: Clinical Data Reconciliation Workflow
  description: Reconciles clinical data by comparing Snowflake sources and notifying data management via Teams.
  tags:
  - clinical
  - data-management
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-data-reconciliation-workflow
      description: Reconciles clinical data by comparing Snowflake sources and notifying data management via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Data Reconciliation Workflow completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-data-reconciliation-workflow.yml

Syncs metadata by extracting from Snowflake and notifying data stewards via Teams.

naftiko: '0.5'
info:
  label: Enterprise Data Catalog Metadata Sync
  description: Syncs metadata by extracting from Snowflake and notifying data stewards via Teams.
  tags:
  - data-governance
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: enterprise-ops
    port: 8080
    tools:
    - name: enterprise-data-catalog-metadata-sync
      description: Syncs metadata by extracting from Snowflake and notifying data stewards via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Enterprise Data Catalog Metadata Sync completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → enterprise-data-catalog-metadata-sync.yml

Responds to degradation by pulling Datadog metrics, creating ServiceNow incidents, and alerting SRE via Teams.

naftiko: '0.5'
info:
  label: Datadog Performance Degradation Response
  description: Responds to degradation by pulling Datadog metrics, creating ServiceNow incidents, and alerting SRE via Teams.
  tags:
  - observability
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: datadog-ops
    port: 8080
    tools:
    - name: datadog-performance-degradation-response
      description: Responds to degradation by pulling Datadog metrics, creating ServiceNow incidents, and alerting SRE via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: check-monitors
        type: call
        call: datadog.get-monitors
        with:
          tags: service:{{service_name}}
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Datadog Performance Degradation Response action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Datadog Performance Degradation Response completed successfully.
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-performance-degradation-response.yml

Refreshes executive dashboards by triggering Snowflake loads, Power BI refreshes, and posting to Teams.

naftiko: '0.5'
info:
  label: Power BI Executive Dashboard Orchestrator
  description: Refreshes executive dashboards by triggering Snowflake loads, Power BI refreshes, and posting to Teams.
  tags:
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: power-ops
    port: 8080
    tools:
    - name: power-bi-executive-dashboard-orchestrator
      description: Refreshes executive dashboards by triggering Snowflake loads, Power BI refreshes, and posting to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.dashboard_dataset_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Power BI Executive Dashboard Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-executive-dashboard-orchestrator.yml

Publishes pipeline results by querying Snowflake and notifying genomics team via Teams.

naftiko: '0.5'
info:
  label: Bioinformatics Pipeline Results Publisher
  description: Publishes pipeline results by querying Snowflake and notifying genomics team via Teams.
  tags:
  - research
  - genomics
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bioinformatics-ops
    port: 8080
    tools:
    - name: bioinformatics-pipeline-results-publisher
      description: Publishes pipeline results by querying Snowflake and notifying genomics team via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Bioinformatics Pipeline Results Publisher completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → bioinformatics-pipeline-results-publisher.yml

Tracks lab sample custody by logging Snowflake transfers, updating ServiceNow, and notifying lab managers via Teams.

naftiko: '0.5'
info:
  label: Laboratory Sample Chain of Custody
  description: Tracks lab sample custody by logging Snowflake transfers, updating ServiceNow, and notifying lab managers via Teams.
  tags:
  - quality
  - laboratory
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: laboratory-ops
    port: 8080
    tools:
    - name: laboratory-sample-chain-of-custody
      description: Tracks lab sample custody by logging Snowflake transfers, updating ServiceNow, and notifying lab managers via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Laboratory Sample Chain of Custody action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Laboratory Sample Chain of Custody completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → laboratory-sample-chain-of-custody.yml

Aggregates project status by pulling Jira data, combining Snowflake metrics, and posting digest to Teams.

naftiko: '0.5'
info:
  label: Cross-Functional Project Status Aggregator
  description: Aggregates project status by pulling Jira data, combining Snowflake metrics, and posting digest to Teams.
  tags:
  - project-management
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cross-ops
    port: 8080
    tools:
    - name: cross-functional-project-status-aggregator
      description: Aggregates project status by pulling Jira data, combining Snowflake metrics, and posting digest to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Cross-Functional Project Status Aggregator follow-up
          issue_type: Task
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Cross-Functional Project Status Aggregator completed successfully.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/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: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → cross-functional-project-status-aggregator.yml

Scans Okta for active users without MFA enrolled in research and commercial systems, and sends a compliance warning to the security Teams channel.

naftiko: '0.5'
info:
  label: Okta MFA Compliance Enforcement
  description: Scans Okta for active users without MFA enrolled in research and commercial systems, and sends a compliance warning to the security Teams channel.
  tags:
  - security
  - identity
  - okta
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: mfa-compliance
    port: 8080
    tools:
    - name: enforce-mfa-compliance
      description: Query Okta for active users without MFA enrolled, post a count of non-compliant users to the security compliance Teams channel, and return the list for escalation.
      inputParameters:
      - name: grace_days
        in: body
        type: integer
        description: Number of days before automatic account suspension for non-compliant users.
      steps:
      - name: get-non-mfa-users
        type: call
        call: okta.list-users-without-mfa
        with:
          status: ACTIVE
      - name: post-compliance-warning
        type: call
        call: msteams.broadcast-mfa-warning
        with:
          channel_id: security-compliance
          message: '{{get-non-mfa-users.count}} users have not enrolled in MFA. Grace period: {{grace_days}} days before suspension.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://regeneron.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: list-users-without-mfa
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: broadcast-mfa-warning
        method: POST
Open in Framework → View in Fleet → okta-mfa-compliance-enforcement.yml

Lists documents in a SharePoint library.

naftiko: '0.5'
info:
  label: SharePoint Document Listing
  description: Lists documents in a SharePoint library.
  tags:
  - collaboration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: collab-docs
    port: 8080
    tools:
    - name: list-sharepoint-docs
      description: List SharePoint documents.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The site ID.
      call: sharepoint.list-items
      with:
        site_id: '{{site_id}}'
      outputParameters:
      - name: files
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
Open in Framework → View in Fleet → sharepoint-document-listing.yml

Retrieves current stage of a Salesforce opportunity.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Stage Lookup
  description: Retrieves current stage of a Salesforce opportunity.
  tags:
  - commercial
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm-opportunity
    port: 8080
    tools:
    - name: get-opportunity-stage
      description: Look up opportunity stage.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The opportunity ID.
      call: salesforce.get-opportunity
      with:
        id: '{{opportunity_id}}'
      outputParameters:
      - name: stage
        type: string
        mapping: $.StageName
      - name: close_date
        type: string
        mapping: $.CloseDate
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.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
Open in Framework → View in Fleet → salesforce-opportunity-stage-lookup.yml

Triggers SAP S/4HANA period-close at month end, exports a journal entry summary, and notifies the finance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Period-Close Financial Reconciliation
  description: Triggers SAP S/4HANA period-close at month end, exports a journal entry summary, and notifies the finance team in Microsoft Teams.
  tags:
  - finance
  - erp
  - sap
  - microsoft-teams
  - period-close
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-period-close
      description: Given a fiscal period and company code, trigger SAP S/4HANA period-close postings and notify the finance team in Teams when complete.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code (e.g., 1000 for Regeneron US).
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period in YYYYMM format.
      steps:
      - name: trigger-close
        type: call
        call: sap.trigger-period-close
        with:
          company_code: '{{company_code}}'
          fiscal_period: '{{fiscal_period}}'
      - name: notify-finance
        type: call
        call: msteams.post-close-notification
        with:
          channel_id: finance-team
          message: 'Period close for {{fiscal_period}} (company {{company_code}}) initiated. SAP job ID: {{trigger-close.job_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://regeneron-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: period-close
      path: /A_CompanyCode('{{company_code}}')/to_PeriodClose
      inputParameters:
      - name: company_code
        in: path
      operations:
      - name: trigger-period-close
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-close-notification
        method: POST
Open in Framework → View in Fleet → sap-period-close-financial-reconciliation.yml

Processes position requests by validating Snowflake budget, creating Workday positions, and notifying HR via Teams.

naftiko: '0.5'
info:
  label: Workday New Position Approval Workflow
  description: Processes position requests by validating Snowflake budget, creating Workday positions, and notifying HR via Teams.
  tags:
  - hr
  - workforce-planning
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday-ops
    port: 8080
    tools:
    - name: workday-new-position-approval-workflow
      description: Processes position requests by validating Snowflake budget, creating Workday positions, and notifying HR via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Workday New Position Approval Workflow completed successfully.
  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: /regeneron/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-new-position-approval-workflow.yml

Queries Snowflake for the row count of a genomics data table for pipeline validation.

naftiko: '0.5'
info:
  label: Snowflake Genomics Table Row Count
  description: Queries Snowflake for the row count of a genomics data table for pipeline validation.
  tags:
  - data-engineering
  - snowflake
  - genomics
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: get-genomics-row-count
      description: Query row count of a Snowflake genomics table.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified table name.
      call: snowflake.run-query
      with:
        statement: SELECT COUNT(*) FROM {{table_name}}
      outputParameters:
      - name: row_count
        type: integer
        mapping: $.data[0][0]
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-genomics-table-row-count.yml

Assembles preclinical reports by collecting Snowflake data and posting to the research Teams channel.

naftiko: '0.5'
info:
  label: Preclinical Study Report Assembly
  description: Assembles preclinical reports by collecting Snowflake data and posting to the research Teams channel.
  tags:
  - research
  - preclinical
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: preclinical-ops
    port: 8080
    tools:
    - name: preclinical-study-report-assembly
      description: Assembles preclinical reports by collecting Snowflake data and posting to the research Teams channel.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Preclinical Study Report Assembly completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → preclinical-study-report-assembly.yml

Kicks off enrollment by pulling Workday data, notifying via Teams, and tracking in Snowflake.

naftiko: '0.5'
info:
  label: Workday Benefits Open Enrollment Kickoff
  description: Kicks off enrollment by pulling Workday data, notifying via Teams, and tracking in Snowflake.
  tags:
  - hr
  - benefits
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday-ops
    port: 8080
    tools:
    - name: workday-benefits-open-enrollment-kickoff
      description: Kicks off enrollment by pulling Workday data, notifying via Teams, and tracking in Snowflake.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Workday Benefits Open Enrollment Kickoff completed successfully.
  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: /regeneron/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-benefits-open-enrollment-kickoff.yml

Generates account health digests from Salesforce and Snowflake, posting to the commercial Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Key Account Health Digest
  description: Generates account health digests from Salesforce and Snowflake, posting to the commercial Teams channel.
  tags:
  - commercial
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce-ops
    port: 8080
    tools:
    - name: salesforce-key-account-health-digest
      description: Generates account health digests from Salesforce and Snowflake, posting to the commercial Teams channel.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Salesforce Key Account Health Digest completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-key-account-health-digest.yml

Tracks publications by logging Snowflake status, updating SharePoint, and notifying research via Teams.

naftiko: '0.5'
info:
  label: Scientific Publication Submission Tracker
  description: Tracks publications by logging Snowflake status, updating SharePoint, and notifying research via Teams.
  tags:
  - research
  - medical-affairs
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: scientific-ops
    port: 8080
    tools:
    - name: scientific-publication-submission-tracker
      description: Tracks publications by logging Snowflake status, updating SharePoint, and notifying research via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Scientific Publication Submission Tracker completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → scientific-publication-submission-tracker.yml

Monitors stability by pulling Snowflake test results, comparing specifications, and alerting quality via Teams.

naftiko: '0.5'
info:
  label: Drug Substance Stability Monitoring
  description: Monitors stability by pulling Snowflake test results, comparing specifications, and alerting quality via Teams.
  tags:
  - quality
  - manufacturing
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: drug-ops
    port: 8080
    tools:
    - name: drug-substance-stability-monitoring
      description: Monitors stability by pulling Snowflake test results, comparing specifications, and alerting quality via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Drug Substance Stability Monitoring completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → drug-substance-stability-monitoring.yml

When a ServiceNow P1 incident breaches its SLA for a critical research or commercial system, escalates by creating a Jira ticket and alerting leadership in Teams.

naftiko: '0.5'
info:
  label: ServiceNow P1 Incident Escalation to Jira
  description: When a ServiceNow P1 incident breaches its SLA for a critical research or commercial system, escalates by creating a Jira ticket and alerting leadership in Teams.
  tags:
  - itsm
  - incident-response
  - servicenow
  - jira
  - microsoft-teams
  - escalation
capability:
  exposes:
  - type: mcp
    namespace: incident-escalation
    port: 8080
    tools:
    - name: escalate-p1-incident
      description: Given a ServiceNow incident number that has breached its P1 SLA, create a Jira Engineering ticket and notify the executive escalation Teams channel.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number (e.g., INC0012345).
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: create-escalation
        type: call
        call: jira.create-escalation-ticket
        with:
          project_key: ENG
          issuetype: Incident
          summary: '[P1 Escalation] {{get-incident.short_description}}'
          description: 'ServiceNow: {{incident_number}}

            Impact: {{get-incident.impact}}

            Opened: {{get-incident.opened_at}}'
      - name: alert-leadership
        type: call
        call: msteams.post-escalation-alert
        with:
          channel_id: executive-escalations
          message: 'P1 SLA breach: {{incident_number}}. Jira: {{create-escalation.key}}. {{get-incident.short_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.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: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-escalation-ticket
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-escalation-alert
        method: POST
Open in Framework → View in Fleet → servicenow-p1-incident-escalation-to-jira.yml

Retrieves user account details from Microsoft Entra ID.

naftiko: '0.5'
info:
  label: Microsoft Entra User Lookup
  description: Retrieves user account details from Microsoft Entra ID.
  tags:
  - identity
  - microsoft-entra
capability:
  exposes:
  - type: mcp
    namespace: identity-mgmt
    port: 8080
    tools:
    - name: get-user-details
      description: Look up Entra user.
      inputParameters:
      - name: upn
        in: body
        type: string
        description: The user principal name.
      call: msgraph.get-user
      with:
        upn: '{{upn}}'
      outputParameters:
      - name: account_enabled
        type: boolean
        mapping: $.accountEnabled
      - name: display_name
        type: string
        mapping: $.displayName
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → microsoft-entra-user-lookup.yml

Orchestrates close by tracking Snowflake items, updating SAP periods, and notifying finance via Teams.

naftiko: '0.5'
info:
  label: Financial Close Checklist Orchestrator
  description: Orchestrates close by tracking Snowflake items, updating SAP periods, and notifying finance via Teams.
  tags:
  - finance
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: financial-ops
    port: 8080
    tools:
    - name: financial-close-checklist-orchestrator
      description: Orchestrates close by tracking Snowflake items, updating SAP periods, and notifying finance via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sap-data
        type: call
        call: sap.get-partner
        with:
          filter: BusinessPartnerCategory eq 1
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Financial Close Checklist Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: partners
      path: /A_BusinessPartner
      operations:
      - name: get-partner
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → financial-close-checklist-orchestrator.yml

Routes medical inquiries from Salesforce, logs in Snowflake, and notifies via Teams.

naftiko: '0.5'
info:
  label: Salesforce Medical Inquiry Routing
  description: Routes medical inquiries from Salesforce, logs in Snowflake, and notifies via Teams.
  tags:
  - medical-affairs
  - salesforce
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce-ops
    port: 8080
    tools:
    - name: salesforce-medical-inquiry-routing
      description: Routes medical inquiries from Salesforce, logs in Snowflake, and notifies via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Salesforce Medical Inquiry Routing completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      operations:
      - name: query
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-medical-inquiry-routing.yml

Tracks GxP deployments by verifying SharePoint documents, updating ServiceNow records, and notifying quality via Teams.

naftiko: '0.5'
info:
  label: GxP Validated System Deployment Tracker
  description: Tracks GxP deployments by verifying SharePoint documents, updating ServiceNow records, and notifying quality via Teams.
  tags:
  - quality
  - compliance
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: gxp-ops
    port: 8080
    tools:
    - name: gxp-validated-system-deployment-tracker
      description: Tracks GxP deployments by verifying SharePoint documents, updating ServiceNow records, and notifying quality via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: GxP Validated System Deployment Tracker action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: GxP Validated System Deployment Tracker completed successfully.
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → gxp-validated-system-deployment-tracker.yml

When a new clinical trial site is approved in Salesforce, creates a ServiceNow onboarding project, provisions a SharePoint collaboration space, and notifies the clinical operations team in Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Investigator Site Onboarding
  description: When a new clinical trial site is approved in Salesforce, creates a ServiceNow onboarding project, provisions a SharePoint collaboration space, and notifies the clinical operations team in Teams.
  tags:
  - clinical-trials
  - salesforce
  - servicenow
  - microsoft-teams
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: clinical-site-onboarding
    port: 8080
    tools:
    - name: onboard-clinical-site
      description: Given a Salesforce clinical site account ID, create a ServiceNow onboarding project for the investigator site and notify the clinical operations team in Teams.
      inputParameters:
      - name: site_account_id
        in: body
        type: string
        description: The Salesforce account ID for the clinical trial investigator site.
      steps:
      - name: get-site
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{site_account_id}}'
      - name: create-onboarding-project
        type: call
        call: servicenow.create-project
        with:
          name: 'Site Onboarding: {{get-site.name}}'
          description: Investigator site onboarding for {{get-site.name}} in trial {{get-site.trial_id}}
      - name: notify-clinical-ops
        type: call
        call: msteams.post-site-notice
        with:
          channel_id: clinical-operations
          message: 'Clinical site {{get-site.name}} onboarding initiated. ServiceNow: {{create-onboarding-project.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://regeneron.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: projects
      path: /table/pm_project
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-site-notice
        method: POST
Open in Framework → View in Fleet → clinical-trial-investigator-site-onboarding.yml

Tracks congress activities by logging Snowflake events, updating Salesforce, and posting to Teams.

naftiko: '0.5'
info:
  label: Medical Affairs Congress Activity Tracker
  description: Tracks congress activities by logging Snowflake events, updating Salesforce, and posting to Teams.
  tags:
  - medical-affairs
  - snowflake
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: medical-ops
    port: 8080
    tools:
    - name: medical-affairs-congress-activity-tracker
      description: Tracks congress activities by logging Snowflake events, updating Salesforce, and posting to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Medical Affairs Congress Activity Tracker completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      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: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → medical-affairs-congress-activity-tracker.yml

Generates patent reports by querying Snowflake IP data and posting to the legal Teams channel.

naftiko: '0.5'
info:
  label: Patent Landscape Analysis Report
  description: Generates patent reports by querying Snowflake IP data and posting to the legal Teams channel.
  tags:
  - research
  - legal
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: patent-ops
    port: 8080
    tools:
    - name: patent-landscape-analysis-report
      description: Generates patent reports by querying Snowflake IP data and posting to the legal Teams channel.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Patent Landscape Analysis Report completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → patent-landscape-analysis-report.yml

Processes invoices by validating SAP POs, posting to accounting, and notifying AP via Teams.

naftiko: '0.5'
info:
  label: SAP Vendor Invoice Processing Orchestrator
  description: Processes invoices by validating SAP POs, posting to accounting, and notifying AP via Teams.
  tags:
  - finance
  - procurement
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sap-ops
    port: 8080
    tools:
    - name: sap-vendor-invoice-processing-orchestrator
      description: Processes invoices by validating SAP POs, posting to accounting, and notifying AP via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sap-data
        type: call
        call: sap.get-partner
        with:
          filter: BusinessPartnerCategory eq 1
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: SAP Vendor Invoice Processing Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: partners
      path: /A_BusinessPartner
      operations:
      - name: get-partner
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-vendor-invoice-processing-orchestrator.yml

Manages major incidents by creating Teams war rooms and pulling ServiceNow CMDB data.

naftiko: '0.5'
info:
  label: ServiceNow Major Incident Bridge
  description: Manages major incidents by creating Teams war rooms and pulling ServiceNow CMDB data.
  tags:
  - it-service-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: servicenow-ops
    port: 8080
    tools:
    - name: servicenow-major-incident-bridge
      description: Manages major incidents by creating Teams war rooms and pulling ServiceNow CMDB data.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: ServiceNow Major Incident Bridge action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: ServiceNow Major Incident Bridge completed successfully.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-major-incident-bridge.yml

Tracks antibody discovery experiments by pulling assay results from Snowflake, updating Jira, and notifying the discovery team via Teams.

naftiko: '0.5'
info:
  label: Antibody Discovery Experiment Tracker
  description: Tracks antibody discovery experiments by pulling assay results from Snowflake, updating Jira, and notifying the discovery team via Teams.
  tags:
  - research
  - discovery
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: antibody-ops
    port: 8080
    tools:
    - name: antibody-discovery-experiment-tracker
      description: Tracks antibody discovery experiments by pulling assay results from Snowflake, updating Jira, and notifying the discovery team via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Antibody Discovery Experiment Tracker follow-up
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Antibody Discovery Experiment Tracker completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → antibody-discovery-experiment-tracker.yml

When a critical Datadog monitor fires for a Regeneron production or research system, automatically creates a ServiceNow incident with full alert context.

naftiko: '0.5'
info:
  label: Datadog Alert to ServiceNow Incident Bridge
  description: When a critical Datadog monitor fires for a Regeneron production or research system, automatically creates a ServiceNow incident with full alert context.
  tags:
  - observability
  - monitoring
  - datadog
  - servicenow
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: alert-incident-bridge
    port: 8080
    tools:
    - name: bridge-alert-to-incident
      description: Given a Datadog monitor ID and alert severity, create a ServiceNow incident pre-populated with monitor name, query, and severity for production and research systems.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that triggered the alert.
      - name: alert_severity
        in: body
        type: string
        description: 'Severity of the alert: critical, warning, or no_data.'
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-from-alert
        with:
          short_description: 'Datadog alert: {{get-monitor.name}}'
          description: 'Monitor: {{get-monitor.name}}

            Severity: {{alert_severity}}

            Query: {{get-monitor.query}}'
          urgency: '2'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-from-alert
        method: POST
Open in Framework → View in Fleet → datadog-alert-to-servicenow-incident-bridge.yml

Triages GitHub security alerts, creates Jira tickets, and alerts security via Teams.

naftiko: '0.5'
info:
  label: GitHub Security Alert Triage Workflow
  description: Triages GitHub security alerts, creates Jira tickets, and alerts security via Teams.
  tags:
  - security
  - devops
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github-ops
    port: 8080
    tools:
    - name: github-security-alert-triage-workflow
      description: Triages GitHub security alerts, creates Jira tickets, and alerts security via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-repo-info
        type: call
        call: github.get-repo
        with:
          repo: '{{repo_name}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: GitHub Security Alert Triage Workflow follow-up
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: GitHub Security Alert Triage Workflow completed successfully.
  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
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-security-alert-triage-workflow.yml

Queries Snowflake for genomics data pipeline task failures and ETL job anomalies, raising a Jira incident when failures are detected.

naftiko: '0.5'
info:
  label: Snowflake Genomics Data Pipeline Health Check
  description: Queries Snowflake for genomics data pipeline task failures and ETL job anomalies, raising a Jira incident when failures are detected.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - monitoring
  - genomics
capability:
  exposes:
  - type: mcp
    namespace: genomics-data-ops
    port: 8080
    tools:
    - name: check-genomics-pipeline-health
      description: Given a Snowflake warehouse name used for genomics ETL, query task history for failures in the last 24 hours and open a Jira incident if failures are detected.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: The Snowflake warehouse name for genomics pipelines.
      steps:
      - name: query-failures
        type: call
        call: snowflake.get-task-history
        with:
          warehouse_name: '{{warehouse_name}}'
      - name: create-incident
        type: call
        call: jira.create-data-incident
        with:
          project_key: DATA
          issuetype: Incident
          summary: Genomics pipeline failures in {{warehouse_name}}
          description: 'Failed tasks: {{query-failures.failure_count}} in warehouse {{warehouse_name}} in last 24 hours.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /warehouses/{{warehouse_name}}/tasks/history
      inputParameters:
      - name: warehouse_name
        in: path
      operations:
      - name: get-task-history
        method: GET
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-data-incident
        method: POST
Open in Framework → View in Fleet → snowflake-genomics-data-pipeline-health-check.yml

Scans dependencies by pulling GitHub alerts, creating Jira tickets, and alerting security via Teams.

naftiko: '0.5'
info:
  label: GitHub Dependency Vulnerability Scanner
  description: Scans dependencies by pulling GitHub alerts, creating Jira tickets, and alerting security via Teams.
  tags:
  - security
  - devops
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: github-ops
    port: 8080
    tools:
    - name: github-dependency-vulnerability-scanner
      description: Scans dependencies by pulling GitHub alerts, creating Jira tickets, and alerting security via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-repo-info
        type: call
        call: github.get-repo
        with:
          repo: '{{repo_name}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: GitHub Dependency Vulnerability Scanner follow-up
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: GitHub Dependency Vulnerability Scanner completed successfully.
  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
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-dependency-vulnerability-scanner.yml

Processes renewals by pulling Salesforce data and notifying account managers via Teams.

naftiko: '0.5'
info:
  label: Salesforce Contract Renewal Workflow
  description: Processes renewals by pulling Salesforce data and notifying account managers via Teams.
  tags:
  - commercial
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: salesforce-ops
    port: 8080
    tools:
    - name: salesforce-contract-renewal-workflow
      description: Processes renewals by pulling Salesforce data and notifying account managers via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-sf-data
        type: call
        call: salesforce.query
        with:
          q: SELECT Id, Name FROM Account LIMIT 10
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Salesforce Contract Renewal Workflow completed successfully.
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://login.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: sobjects
      path: /sobjects/Account
      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: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-contract-renewal-workflow.yml

Checks readiness by validating SharePoint documents, reviewing Snowflake findings, and alerting quality via Teams.

naftiko: '0.5'
info:
  label: Regulatory Inspection Readiness Check
  description: Checks readiness by validating SharePoint documents, reviewing Snowflake findings, and alerting quality via Teams.
  tags:
  - quality
  - regulatory
  - sharepoint
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: regulatory-inspection-readiness-check
      description: Checks readiness by validating SharePoint documents, reviewing Snowflake findings, and alerting quality via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Regulatory Inspection Readiness Check completed successfully.
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → regulatory-inspection-readiness-check.yml

Searches LinkedIn for candidates matching scientific and R&D job requisitions, imports matches into Workday Recruiting, and notifies the scientific recruiter in Teams.

naftiko: '0.5'
info:
  label: LinkedIn Scientific Talent Sourcing
  description: Searches LinkedIn for candidates matching scientific and R&D job requisitions, imports matches into Workday Recruiting, and notifies the scientific recruiter in Teams.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: scientific-talent-acquisition
    port: 8080
    tools:
    - name: source-scientific-candidates
      description: Given a Workday job requisition ID for a scientific or R&D role, search LinkedIn for matching candidates and notify the scientific recruiter in Teams with match count.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      - name: recruiter_email
        in: body
        type: string
        description: Email of the scientific recruiter to notify.
      steps:
      - name: get-requisition
        type: call
        call: workday.get-job-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: search-candidates
        type: call
        call: linkedin.search-people
        with:
          keywords: '{{get-requisition.title}}'
          location: '{{get-requisition.location}}'
      - name: notify-recruiter
        type: call
        call: msteams.send-recruiter-notice
        with:
          recipient: '{{recruiter_email}}'
          message: Found {{search-candidates.count}} LinkedIn candidates for {{get-requisition.title}} (req {{requisition_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: job-requisitions
      path: /regeneron/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: people-search
      path: /people
      operations:
      - name: search-people
        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}}/sendMail
      inputParameters:
      - name: recipient
        in: path
      operations:
      - name: send-recruiter-notice
        method: POST
Open in Framework → View in Fleet → linkedin-scientific-talent-sourcing.yml

Processes protocol amendments by updating SharePoint documents, creating ServiceNow change requests, and alerting clinical ops via Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Protocol Amendment Workflow
  description: Processes protocol amendments by updating SharePoint documents, creating ServiceNow change requests, and alerting clinical ops via Teams.
  tags:
  - clinical
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-trial-protocol-amendment-workflow
      description: Processes protocol amendments by updating SharePoint documents, creating ServiceNow change requests, and alerting clinical ops via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Clinical Trial Protocol Amendment Workflow action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Trial Protocol Amendment Workflow completed successfully.
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-protocol-amendment-workflow.yml

Retrieves metadata for a GitHub repository.

naftiko: '0.5'
info:
  label: GitHub Repository Status Check
  description: Retrieves metadata for a GitHub repository.
  tags:
  - devops
  - github
capability:
  exposes:
  - type: mcp
    namespace: devops-repo
    port: 8080
    tools:
    - name: get-repo-status
      description: Look up GitHub repository metadata.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repo (org/repo).
      call: github.get-repo
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: default_branch
        type: string
        mapping: $.default_branch
      - name: visibility
        type: string
        mapping: $.visibility
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{repo_name}}
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-status-check.yml

Monitors cleanroom conditions by pulling Snowflake sensor data and alerting manufacturing via Teams.

naftiko: '0.5'
info:
  label: Manufacturing Environmental Monitoring
  description: Monitors cleanroom conditions by pulling Snowflake sensor data and alerting manufacturing via Teams.
  tags:
  - manufacturing
  - quality
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-ops
    port: 8080
    tools:
    - name: manufacturing-environmental-monitoring
      description: Monitors cleanroom conditions by pulling Snowflake sensor data and alerting manufacturing via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Manufacturing Environmental Monitoring completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → manufacturing-environmental-monitoring.yml

Handles genomics pipeline failures by retrieving Snowflake errors, creating Jira tickets, and alerting bioinformatics via Teams.

naftiko: '0.5'
info:
  label: Genomics Data Pipeline Failure Handler
  description: Handles genomics pipeline failures by retrieving Snowflake errors, creating Jira tickets, and alerting bioinformatics via Teams.
  tags:
  - data-engineering
  - genomics
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: genomics-ops
    port: 8080
    tools:
    - name: genomics-data-pipeline-failure-handler
      description: Handles genomics pipeline failures by retrieving Snowflake errors, creating Jira tickets, and alerting bioinformatics via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Genomics Data Pipeline Failure Handler follow-up
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Genomics Data Pipeline Failure Handler completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → genomics-data-pipeline-failure-handler.yml

Retrieves an employee's current leave balances and pending absence requests from Workday for HR business partners and managers.

naftiko: '0.5'
info:
  label: Workday Leave Balance Lookup
  description: Retrieves an employee's current leave balances and pending absence requests from Workday for HR business partners and managers.
  tags:
  - hr
  - workday
  - leave-management
capability:
  exposes:
  - type: mcp
    namespace: hr-leave
    port: 8080
    tools:
    - name: get-leave-balance
      description: Given a Workday employee ID, return current PTO, sick leave, and other leave balances along with any pending absence requests.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-leave-balance
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: pto_balance
        type: number
        mapping: $.data.timeOffBalances.ptoBalance
      - name: sick_balance
        type: number
        mapping: $.data.timeOffBalances.sickBalance
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: leave-balances
      path: /regeneron/workers/{{worker_id}}/timeOffBalances
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-leave-balance
        method: GET
Open in Framework → View in Fleet → workday-leave-balance-lookup.yml

Processes annual reviews by pulling Workday data, loading to Snowflake, and notifying HR via Teams.

naftiko: '0.5'
info:
  label: Workday Annual Compensation Review
  description: Processes annual reviews by pulling Workday data, loading to Snowflake, and notifying HR via Teams.
  tags:
  - hr
  - compensation
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday-ops
    port: 8080
    tools:
    - name: workday-annual-compensation-review
      description: Processes annual reviews by pulling Workday data, loading to Snowflake, and notifying HR via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Workday Annual Compensation Review completed successfully.
  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: /regeneron/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-annual-compensation-review.yml

Fulfills IT requests by processing ServiceNow tickets, provisioning Okta access, and confirming via Teams.

naftiko: '0.5'
info:
  label: IT Service Request Fulfillment Orchestrator
  description: Fulfills IT requests by processing ServiceNow tickets, provisioning Okta access, and confirming via Teams.
  tags:
  - it-service-management
  - servicenow
  - okta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: it-service-request-fulfillment-orchestrator
      description: Fulfills IT requests by processing ServiceNow tickets, provisioning Okta access, and confirming via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: IT Service Request Fulfillment Orchestrator action required
          category: automated
          assigned_group: Operations
      - name: check-identity
        type: call
        call: okta.get-users
        with:
          filter: status eq ACTIVE
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: IT Service Request Fulfillment Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/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://regeneron.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users
      operations:
      - name: get-users
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-service-request-fulfillment-orchestrator.yml

Manages research data sharing by validating SharePoint agreements, granting Snowflake access, and logging in ServiceNow.

naftiko: '0.5'
info:
  label: Research Collaboration Data Sharing Workflow
  description: Manages research data sharing by validating SharePoint agreements, granting Snowflake access, and logging in ServiceNow.
  tags:
  - research
  - data-governance
  - sharepoint
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: research-ops
    port: 8080
    tools:
    - name: research-collaboration-data-sharing-workflow
      description: Manages research data sharing by validating SharePoint agreements, granting Snowflake access, and logging in ServiceNow.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Research Collaboration Data Sharing Workflow action required
          category: automated
          assigned_group: Operations
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → research-collaboration-data-sharing-workflow.yml

Kicks off reviews by pulling Workday data, creating Jira tasks, and notifying managers via Teams.

naftiko: '0.5'
info:
  label: Employee Performance Review Kickoff
  description: Kicks off reviews by pulling Workday data, creating Jira tasks, and notifying managers via Teams.
  tags:
  - hr
  - performance
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: employee-ops
    port: 8080
    tools:
    - name: employee-performance-review-kickoff
      description: Kicks off reviews by pulling Workday data, creating Jira tasks, and notifying managers via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: OPS
          summary: Employee Performance Review Kickoff follow-up
          issue_type: Task
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Employee Performance Review Kickoff completed successfully.
  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: /regeneron/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: jira
    baseUri: https://regeneron.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → employee-performance-review-kickoff.yml

Identifies orphaned Okta accounts by cross-referencing Workday, disabling in Okta, and logging in ServiceNow.

naftiko: '0.5'
info:
  label: Okta Orphaned Account Cleanup
  description: Identifies orphaned Okta accounts by cross-referencing Workday, disabling in Okta, and logging in ServiceNow.
  tags:
  - identity
  - security
  - okta
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: okta-ops
    port: 8080
    tools:
    - name: okta-orphaned-account-cleanup
      description: Identifies orphaned Okta accounts by cross-referencing Workday, disabling in Okta, and logging in ServiceNow.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: check-identity
        type: call
        call: okta.get-users
        with:
          filter: status eq ACTIVE
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Okta Orphaned Account Cleanup action required
          category: automated
          assigned_group: Operations
  consumes:
  - type: http
    namespace: okta
    baseUri: https://regeneron.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users
      operations:
      - name: get-users
        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: /regeneron/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-orphaned-account-cleanup.yml

Processes DSARs by searching Snowflake and logging completion in ServiceNow.

naftiko: '0.5'
info:
  label: Data Privacy Subject Access Request
  description: Processes DSARs by searching Snowflake and logging completion in ServiceNow.
  tags:
  - compliance
  - privacy
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: data-privacy-subject-access-request
      description: Processes DSARs by searching Snowflake and logging completion in ServiceNow.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Data Privacy Subject Access Request action required
          category: automated
          assigned_group: Operations
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → data-privacy-subject-access-request.yml

Checks whether a user is assigned to an Okta application.

naftiko: '0.5'
info:
  label: Okta Application Assignment Check
  description: Checks whether a user is assigned to an Okta application.
  tags:
  - identity
  - okta
capability:
  exposes:
  - type: mcp
    namespace: identity-app-access
    port: 8080
    tools:
    - name: check-app-assignment
      description: Check Okta app assignment.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The user ID.
      - name: app_id
        in: body
        type: string
        description: The app ID.
      call: okta.get-user-apps
      with:
        user_id: '{{user_id}}'
        app_id: '{{app_id}}'
      outputParameters:
      - name: assigned
        type: boolean
        mapping: $.assigned
  consumes:
  - type: http
    namespace: okta
    baseUri: https://regeneron.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: app-users
      path: /apps/{{app_id}}/users/{{user_id}}
      inputParameters:
      - name: app_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: get-user-apps
        method: GET
Open in Framework → View in Fleet → okta-application-assignment-check.yml

Generates monitoring reports by pulling Snowflake data, creating SharePoint docs, and notifying via Teams.

naftiko: '0.5'
info:
  label: Clinical Monitoring Report Generation
  description: Generates monitoring reports by pulling Snowflake data, creating SharePoint docs, and notifying via Teams.
  tags:
  - clinical
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-ops
    port: 8080
    tools:
    - name: clinical-monitoring-report-generation
      description: Generates monitoring reports by pulling Snowflake data, creating SharePoint docs, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Clinical Monitoring Report Generation completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-monitoring-report-generation.yml

Assesses IT change risks by pulling ServiceNow CMDB data, analyzing Snowflake scores, and posting to Teams.

naftiko: '0.5'
info:
  label: IT Change Risk Assessment Orchestrator
  description: Assesses IT change risks by pulling ServiceNow CMDB data, analyzing Snowflake scores, and posting to Teams.
  tags:
  - it-service-management
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: it-change-risk-assessment-orchestrator
      description: Assesses IT change risks by pulling ServiceNow CMDB data, analyzing Snowflake scores, and posting to Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: IT Change Risk Assessment Orchestrator action required
          category: automated
          assigned_group: Operations
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: IT Change Risk Assessment Orchestrator completed successfully.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/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: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-change-risk-assessment-orchestrator.yml

Posts a message to a Teams channel.

naftiko: '0.5'
info:
  label: Teams Channel Message Post
  description: Posts a message to a Teams channel.
  tags:
  - collaboration
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: collab-messaging
    port: 8080
    tools:
    - name: post-teams-message
      description: Post Teams channel message.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Team ID.
      - name: channel_id
        in: body
        type: string
        description: Channel ID.
      - name: message
        in: body
        type: string
        description: Message.
      call: msteams.post-channel-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        body: '{{message}}'
      outputParameters:
      - name: message_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → teams-channel-message-post.yml

Propagates org changes from Workday to Okta, ServiceNow, and notifies via Teams.

naftiko: '0.5'
info:
  label: Workday Organizational Change Propagation
  description: Propagates org changes from Workday to Okta, ServiceNow, and notifies via Teams.
  tags:
  - hr
  - workday
  - okta
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: workday-ops
    port: 8080
    tools:
    - name: workday-organizational-change-propagation
      description: Propagates org changes from Workday to Okta, ServiceNow, and notifies via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-employee-data
        type: call
        call: workday.get-workers
        with:
          department: all
      - name: check-identity
        type: call
        call: okta.get-users
        with:
          filter: status eq ACTIVE
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Workday Organizational Change Propagation action required
          category: automated
          assigned_group: Operations
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Workday Organizational Change Propagation completed successfully.
  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: /regeneron/workers
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: okta
    baseUri: https://regeneron.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users
      operations:
      - name: get-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-organizational-change-propagation.yml

Monitors Datadog SLOs for Regeneron's computational biology and genomics research platforms, opening a ServiceNow incident when health thresholds are breached.

naftiko: '0.5'
info:
  label: Datadog Research Platform Service Health Monitor
  description: Monitors Datadog SLOs for Regeneron's computational biology and genomics research platforms, opening a ServiceNow incident when health thresholds are breached.
  tags:
  - observability
  - monitoring
  - datadog
  - servicenow
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: research-platform-monitoring
    port: 8080
    tools:
    - name: check-research-platform-health
      description: Given a Datadog service name and SLO ID for a research computing platform, check SLO compliance and create a ServiceNow P1 incident if the error budget is exhausted.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name for the research platform.
      - name: slo_id
        in: body
        type: string
        description: The Datadog SLO ID to evaluate.
      steps:
      - name: get-slo
        type: call
        call: datadog.get-slo
        with:
          slo_id: '{{slo_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-p1-incident
        with:
          short_description: 'SLO breach: {{service_name}}'
          description: 'SLO {{slo_id}} compliance: {{get-slo.compliance}}. Error budget: {{get-slo.error_budget_remaining}}.'
          urgency: '1'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo/{{slo_id}}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-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
Open in Framework → View in Fleet → datadog-research-platform-service-health-monitor.yml

When a researcher is added to a Workday research group, provisions corresponding research application access in Okta and logs the action in ServiceNow.

naftiko: '0.5'
info:
  label: Okta User Access Provisioning for Research Systems
  description: When a researcher is added to a Workday research group, provisions corresponding research application access in Okta and logs the action in ServiceNow.
  tags:
  - identity
  - security
  - okta
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: research-access-provisioning
    port: 8080
    tools:
    - name: provision-researcher-access
      description: Given a Workday employee ID and target research Okta group, assign group membership and log the provisioning event in ServiceNow.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday worker ID of the researcher.
      - name: okta_group_id
        in: body
        type: string
        description: The Okta group ID for the research application to provision.
      steps:
      - name: get-researcher
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: assign-group
        type: call
        call: okta.add-user-to-group
        with:
          user_id: '{{get-researcher.okta_user_id}}'
          group_id: '{{okta_group_id}}'
      - name: log-access
        type: call
        call: servicenow.create-access-record
        with:
          short_description: 'Research access provisioned: {{get-researcher.full_name}} to {{okta_group_id}}'
          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: /regeneron/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://regeneron.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: add-user-to-group
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-access-record
        method: POST
Open in Framework → View in Fleet → okta-user-access-provisioning-for-research-systems.yml

Detects drift by comparing Datadog metrics against Snowflake baselines and creating ServiceNow tickets.

naftiko: '0.5'
info:
  label: Cloud Infrastructure Drift Detector
  description: Detects drift by comparing Datadog metrics against Snowflake baselines and creating ServiceNow tickets.
  tags:
  - infrastructure
  - datadog
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cloud-ops
    port: 8080
    tools:
    - name: cloud-infrastructure-drift-detector
      description: Detects drift by comparing Datadog metrics against Snowflake baselines and creating ServiceNow tickets.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: check-monitors
        type: call
        call: datadog.get-monitors
        with:
          tags: service:{{service_name}}
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Cloud Infrastructure Drift Detector action required
          category: automated
          assigned_group: Operations
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.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: servicenow
    baseUri: https://regeneron.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → cloud-infrastructure-drift-detector.yml

Generates a weekly digest of Salesforce physician engagement opportunities and key account activities, posted to the commercial operations Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Physician Engagement Pipeline Digest
  description: Generates a weekly digest of Salesforce physician engagement opportunities and key account activities, posted to the commercial operations Teams channel.
  tags:
  - crm
  - sales
  - salesforce
  - microsoft-teams
  - reporting
  - commercial
capability:
  exposes:
  - type: mcp
    namespace: commercial-reporting
    port: 8080
    tools:
    - name: digest-physician-pipeline
      description: Fetch open Salesforce opportunities with physician key account status and post a weekly pipeline digest to the commercial operations Teams channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for commercial operations.
      steps:
      - name: get-opportunities
        type: call
        call: salesforce.query-physician-opportunities
        with:
          account_type: Physician_KOL
      - name: post-digest
        type: call
        call: msteams.post-pipeline-digest
        with:
          channel_id: '{{channel_id}}'
          message: 'Physician pipeline digest: {{get-opportunities.total_value}} across {{get-opportunities.count}} open opportunities.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://regeneron.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /query
      operations:
      - name: query-physician-opportunities
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-pipeline-digest
        method: POST
Open in Framework → View in Fleet → salesforce-physician-engagement-pipeline-digest.yml

Retrieves the current sprint status for a Jira board.

naftiko: '0.5'
info:
  label: Jira Sprint Status Lookup
  description: Retrieves the current sprint status for a Jira board.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pm-sprint
    port: 8080
    tools:
    - name: get-sprint-status
      description: Look up Jira sprint status.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID.
      call: jira.get-active-sprint
      with:
        board_id: '{{board_id}}'
      outputParameters:
      - name: sprint_name
        type: string
        mapping: $.values[0].name
      - name: state
        type: string
        mapping: $.values[0].state
  consumes:
  - type: http
    namespace: jira
    baseUri: https://regeneron.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-active-sprint
        method: GET
Open in Framework → View in Fleet → jira-sprint-status-lookup.yml

Generates a weekly digest of Salesforce medical affairs accounts showing recent engagement activity, key contact changes, and pipeline status, posted to the medical affairs Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Medical Affairs Account Intelligence Digest
  description: Generates a weekly digest of Salesforce medical affairs accounts showing recent engagement activity, key contact changes, and pipeline status, posted to the medical affairs Teams channel.
  tags:
  - crm
  - sales
  - salesforce
  - microsoft-teams
  - reporting
  - medical-affairs
capability:
  exposes:
  - type: mcp
    namespace: medical-affairs-reporting
    port: 8080
    tools:
    - name: digest-account-intelligence
      description: Fetch Salesforce medical affairs account activity for the past week and post a formatted engagement digest to the medical affairs Teams channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the medical affairs team.
      steps:
      - name: get-account-activity
        type: call
        call: salesforce.query-account-activity
        with:
          account_type: Medical_Affairs
      - name: post-digest
        type: call
        call: msteams.post-account-digest
        with:
          channel_id: '{{channel_id}}'
          message: 'Medical affairs digest: {{get-account-activity.accounts_touched}} accounts engaged, {{get-account-activity.new_contacts}} new contacts this week.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://regeneron.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /query
      operations:
      - name: query-account-activity
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-account-digest
        method: POST
Open in Framework → View in Fleet → salesforce-medical-affairs-account-intelligence-digest.yml

Retires IT assets by updating ServiceNow CMDB, revoking Okta access, and notifying via Teams.

naftiko: '0.5'
info:
  label: IT Asset Lifecycle Retirement Workflow
  description: Retires IT assets by updating ServiceNow CMDB, revoking Okta access, and notifying via Teams.
  tags:
  - it-asset-management
  - servicenow
  - okta
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: it-asset-lifecycle-retirement-workflow
      description: Retires IT assets by updating ServiceNow CMDB, revoking Okta access, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: IT Asset Lifecycle Retirement Workflow action required
          category: automated
          assigned_group: Operations
      - name: check-identity
        type: call
        call: okta.get-users
        with:
          filter: status eq ACTIVE
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: IT Asset Lifecycle Retirement Workflow completed successfully.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://regeneron.service-now.com/api/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://regeneron.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users
      operations:
      - name: get-users
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-asset-lifecycle-retirement-workflow.yml

Retrieves current error rate for a service from Datadog APM.

naftiko: '0.5'
info:
  label: Datadog APM Error Rate Check
  description: Retrieves current error rate for a service from Datadog APM.
  tags:
  - observability
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: observability-apm
    port: 8080
    tools:
    - name: check-error-rate
      description: Check APM error rate.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The service name.
      call: datadog.get-apm-metrics
      with:
        service: '{{service_name}}'
      outputParameters:
      - name: error_rate
        type: string
        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
    resources:
    - name: query
      path: /query
      operations:
      - name: get-apm-metrics
        method: GET
Open in Framework → View in Fleet → datadog-apm-error-rate-check.yml

Manages reagent inventory by checking Snowflake stock, creating SAP requests, and notifying lab managers via Teams.

naftiko: '0.5'
info:
  label: Research Reagent Inventory Management
  description: Manages reagent inventory by checking Snowflake stock, creating SAP requests, and notifying lab managers via Teams.
  tags:
  - research
  - supply-chain
  - snowflake
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: research-ops
    port: 8080
    tools:
    - name: research-reagent-inventory-management
      description: Manages reagent inventory by checking Snowflake stock, creating SAP requests, and notifying lab managers via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: get-sap-data
        type: call
        call: sap.get-partner
        with:
          filter: BusinessPartnerCategory eq 1
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Research Reagent Inventory Management completed successfully.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sap
    baseUri: https://regeneron-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: partners
      path: /A_BusinessPartner
      operations:
      - name: get-partner
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → research-reagent-inventory-management.yml

Manages health authority inquiries by pulling SharePoint documents, tracking Snowflake timelines, and notifying via Teams.

naftiko: '0.5'
info:
  label: Regulatory Health Authority Response
  description: Manages health authority inquiries by pulling SharePoint documents, tracking Snowflake timelines, and notifying via Teams.
  tags:
  - regulatory
  - sharepoint
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: regulatory-ops
    port: 8080
    tools:
    - name: regulatory-health-authority-response
      description: Manages health authority inquiries by pulling SharePoint documents, tracking Snowflake timelines, and notifying via Teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The request or entity identifier.
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-items
        with:
          site_id: $secrets.default_site_id
      - name: query-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT * FROM analytics.summary LIMIT 100
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ops_team_id
          channel_id: $secrets.ops_channel_id
          body: Regulatory Health Authority Response completed successfully.
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drives
      path: /sites/{{site_id}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://regeneron.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → regulatory-health-authority-response.yml

Triggers a Power BI dataset refresh for clinical pipeline dashboards and notifies the clinical development team in Teams when the refresh is complete.

naftiko: '0.5'
info:
  label: Power BI Clinical Pipeline Dashboard Refresh
  description: Triggers a Power BI dataset refresh for clinical pipeline dashboards and notifies the clinical development team in Teams when the refresh is complete.
  tags:
  - data
  - analytics
  - power-bi
  - microsoft-teams
  - reporting
  - clinical-trials
capability:
  exposes:
  - type: mcp
    namespace: clinical-analytics
    port: 8080
    tools:
    - name: refresh-clinical-pipeline-dashboard
      description: Given a Power BI workspace and dataset ID for the clinical pipeline dashboard, trigger a data refresh and notify the clinical development leadership in Teams.
      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 for the clinical pipeline dashboard.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-clinical-leadership
        type: call
        call: msteams.post-refresh-notice
        with:
          channel_id: clinical-development
          message: Clinical pipeline Power BI dashboard (dataset {{dataset_id}}) has been refreshed successfully.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-refresh-notice
        method: POST
Open in Framework → View in Fleet → power-bi-clinical-pipeline-dashboard-refresh.yml

Synchronizes new or updated vendor records from SAP S/4HANA to SAP Ariba to maintain procurement catalog consistency across Roche's global supply chain.

naftiko: '0.5'
info:
  label: SAP Vendor Master Data Sync to Ariba
  description: Synchronizes new or updated vendor records from SAP S/4HANA to SAP Ariba to maintain procurement catalog consistency across Roche's global supply chain.
  tags:
  - procurement
  - finance
  - sap
  - sap-ariba
  - data-sync
capability:
  exposes:
  - type: mcp
    namespace: vendor-sync
    port: 8080
    tools:
    - name: sync-vendor-to-ariba
      description: Given a SAP vendor account number, fetch the vendor master record from SAP S/4HANA and upsert the corresponding supplier profile in SAP Ariba.
      inputParameters:
      - name: vendor_account
        in: body
        type: string
        description: The SAP vendor account number.
      steps:
      - name: get-vendor
        type: call
        call: sap.get-vendor
        with:
          vendor_account: '{{vendor_account}}'
      - name: upsert-supplier
        type: call
        call: ariba.upsert-supplier
        with:
          supplier_id: '{{get-vendor.vendor_account}}'
          name: '{{get-vendor.name}}'
          country: '{{get-vendor.country}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://roche-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_account}}')
      inputParameters:
      - name: vendor_account
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier/v1
    authentication:
      type: apikey
      key: APIKey
      value: $secrets.ariba_api_key
      placement: header
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: upsert-supplier
        method: PUT
Open in Framework → View in Fleet → sap-vendor-master-data-sync-to-ariba.yml

Opens a ServiceNow change control request for GxP-validated system changes, routes through quality assurance review, and notifies the global QA team in Teams.

naftiko: '0.5'
info:
  label: ServiceNow GxP Validated System Change Control
  description: Opens a ServiceNow change control request for GxP-validated system changes, routes through quality assurance review, and notifies the global QA team in Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - gxp
  - quality
capability:
  exposes:
  - type: mcp
    namespace: gxp-change-control
    port: 8080
    tools:
    - name: open-gxp-change-request
      description: Given a change description and GxP system name, create a ServiceNow validated system change request and notify the global QA review board in Teams.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the proposed change to the validated system.
      - name: system_name
        in: body
        type: string
        description: Name of the GxP-validated system being changed.
      - name: scheduled_start
        in: body
        type: string
        description: Planned start datetime in ISO 8601 format.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-gxp-change
        with:
          short_description: '{{short_description}}'
          system: '{{system_name}}'
          start_date: '{{scheduled_start}}'
          category: gxp_validated_system
      - name: notify-global-qa
        type: call
        call: msteams.notify-qa-board
        with:
          channel_id: global-quality-assurance
          message: 'GxP change request {{create-change.number}} submitted for {{system_name}}: {{short_description}} | Start: {{scheduled_start}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://roche.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-gxp-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/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: notify-qa-board
        method: POST
Open in Framework → View in Fleet → servicenow-gxp-validated-system-change-control.yml

Monitors Snowflake drug discovery data pipeline task failures and ETL anomalies, raising a Jira incident when failures exceed threshold.

naftiko: '0.5'
info:
  label: Snowflake Drug Discovery Data Pipeline Health Check
  description: Monitors Snowflake drug discovery data pipeline task failures and ETL anomalies, raising a Jira incident when failures exceed threshold.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - monitoring
  - drug-discovery
capability:
  exposes:
  - type: mcp
    namespace: drug-discovery-data-ops
    port: 8080
    tools:
    - name: check-drug-discovery-pipeline
      description: Given a Snowflake warehouse name used for drug discovery ETL, query task history for failures in the last 24 hours and open a Jira incident if failures are detected.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: The Snowflake warehouse for drug discovery data pipelines.
      steps:
      - name: query-task-failures
        type: call
        call: snowflake.get-task-history
        with:
          warehouse_name: '{{warehouse_name}}'
      - name: create-incident
        type: call
        call: jira.create-data-incident
        with:
          project_key: DATA
          issuetype: Incident
          summary: Drug discovery pipeline failures in {{warehouse_name}}
          description: 'Failed tasks: {{query-task-failures.failure_count}} in warehouse {{warehouse_name}} in last 24 hours.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://roche.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /warehouses/{{warehouse_name}}/tasks/history
      inputParameters:
      - name: warehouse_name
        in: path
      operations:
      - name: get-task-history
        method: GET
  - type: http
    namespace: jira
    baseUri: https://roche.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-data-incident
        method: POST
Open in Framework → View in Fleet → snowflake-drug-discovery-data-pipeline-health-check.yml

Searches LinkedIn for candidates matching global scientific and digital health R&D requisitions, and notifies Roche scientific recruiters in Teams.

naftiko: '0.5'
info:
  label: LinkedIn Global Scientific Talent Sourcing
  description: Searches LinkedIn for candidates matching global scientific and digital health R&D requisitions, and notifies Roche scientific recruiters in Teams.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: global-talent-acquisition
    port: 8080
    tools:
    - name: source-global-scientific-talent
      description: Given a Workday job requisition ID for a scientific or digital health R&D role, search LinkedIn and notify the scientific recruiter in Teams with the candidate match count.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      - name: recruiter_email
        in: body
        type: string
        description: Email of the scientific recruiter to notify.
      steps:
      - name: get-requisition
        type: call
        call: workday.get-job-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: search-candidates
        type: call
        call: linkedin.search-people
        with:
          keywords: '{{get-requisition.title}}'
          location: '{{get-requisition.location}}'
      - name: notify-recruiter
        type: call
        call: msteams.send-recruiter-notice
        with:
          recipient: '{{recruiter_email}}'
          message: Found {{search-candidates.count}} LinkedIn candidates for {{get-requisition.title}} (req {{requisition_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: job-requisitions
      path: /roche/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: people-search
      path: /people
      operations:
      - name: search-people
        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}}/sendMail
      inputParameters:
      - name: recipient
        in: path
      operations:
      - name: send-recruiter-notice
        method: POST
Open in Framework → View in Fleet → linkedin-global-scientific-talent-sourcing.yml

When a purchase requisition is submitted in SAP Ariba, validates budget in SAP S/4HANA and posts an approval notification to the procurement Microsoft Teams channel.

naftiko: '0.5'
info:
  label: SAP Ariba Procurement Requisition Approval
  description: When a purchase requisition is submitted in SAP Ariba, validates budget in SAP S/4HANA and posts an approval notification to the procurement Microsoft Teams channel.
  tags:
  - procurement
  - finance
  - sap-ariba
  - sap
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: procurement-approval
    port: 8080
    tools:
    - name: approve-requisition
      description: Given an SAP Ariba requisition ID, fetch requisition details, validate budget in SAP S/4HANA, and notify the approver in Teams.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba purchase requisition ID.
      - name: approver_email
        in: body
        type: string
        description: Email address of the designated approver.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: check-budget
        type: call
        call: sap-budget.get-budget
        with:
          cost_center: '{{get-requisition.cost_center}}'
      - name: notify-approver
        type: call
        call: msteams.send-approval-notice
        with:
          recipient: '{{approver_email}}'
          message: 'Requisition {{requisition_id}} for {{get-requisition.total_amount}} {{get-requisition.currency}} awaits approval. Budget available: {{check-budget.available_amount}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/purchase-requisition/v1
    authentication:
      type: apikey
      key: APIKey
      value: $secrets.ariba_api_key
      placement: header
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: sap-budget
    baseUri: https://roche-s4.sap.com/sap/opu/odata/sap/FM_BUDGET_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: budget-availability
      path: /BudgetAvailability
      operations:
      - name: get-budget
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient}}/sendMail
      inputParameters:
      - name: recipient
        in: path
      operations:
      - name: send-approval-notice
        method: POST
Open in Framework → View in Fleet → sap-ariba-procurement-requisition-approval.yml

Runs automated data quality checks on Snowflake clinical data warehouse tables and posts a validation report to the data engineering Teams channel.

naftiko: '0.5'
info:
  label: Snowflake Clinical Data Quality Validation
  description: Runs automated data quality checks on Snowflake clinical data warehouse tables and posts a validation report to the data engineering Teams channel.
  tags:
  - data
  - analytics
  - snowflake
  - microsoft-teams
  - data-quality
  - clinical-trials
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-quality
    port: 8080
    tools:
    - name: validate-clinical-data-quality
      description: Given a Snowflake database and schema containing clinical trial data, execute quality checks for completeness, referential integrity, and outliers, then post results to Teams.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: The Snowflake database containing clinical trial data.
      - name: schema_name
        in: body
        type: string
        description: The Snowflake schema to run quality checks on.
      - name: channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the data engineering team.
      steps:
      - name: run-checks
        type: call
        call: snowflake.execute-quality-check
        with:
          database: '{{database_name}}'
          schema: '{{schema_name}}'
      - name: post-report
        type: call
        call: msteams.post-quality-report
        with:
          channel_id: '{{channel_id}}'
          message: 'Clinical data quality check {{database_name}}.{{schema_name}}: {{run-checks.pass_count}} passed, {{run-checks.fail_count}} failed.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://roche.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: sql-statements
      path: /statements
      operations:
      - name: execute-quality-check
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-quality-report
        method: POST
Open in Framework → View in Fleet → snowflake-clinical-data-quality-validation.yml

Retrieves current headcount by division and cost center from Workday for use in global workforce planning and IFRS financial reporting.

naftiko: '0.5'
info:
  label: Payroll Headcount Snapshot by Division
  description: Retrieves current headcount by division and cost center from Workday for use in global workforce planning and IFRS financial reporting.
  tags:
  - hr
  - finance
  - payroll
  - workday
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-finance
    port: 8080
    tools:
    - name: get-headcount-by-division
      description: Returns active employees grouped by division and cost center from Workday. Use for global headcount planning, budget allocation, and Roche group reporting.
      call: workday.headcount-export
      outputParameters:
      - name: employees
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers-export
      path: /roche/workers
      operations:
      - name: headcount-export
        method: GET
Open in Framework → View in Fleet → payroll-headcount-snapshot-by-division.yml

Monitors Datadog SLOs for Roche's diagnostics instrument platform APIs and opens a ServiceNow incident when service health thresholds are breached.

naftiko: '0.5'
info:
  label: Datadog Diagnostics Platform Service Health Monitor
  description: Monitors Datadog SLOs for Roche's diagnostics instrument platform APIs and opens a ServiceNow incident when service health thresholds are breached.
  tags:
  - observability
  - monitoring
  - datadog
  - servicenow
  - incident-response
  - diagnostics
capability:
  exposes:
  - type: mcp
    namespace: diagnostics-monitoring
    port: 8080
    tools:
    - name: check-diagnostics-platform-health
      description: Given a Datadog service name and SLO ID for a diagnostics platform service, check SLO compliance and create a ServiceNow P1 incident if the error budget is exhausted.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name for the diagnostics platform.
      - name: slo_id
        in: body
        type: string
        description: The Datadog SLO ID to evaluate.
      steps:
      - name: get-slo
        type: call
        call: datadog.get-slo
        with:
          slo_id: '{{slo_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-p1-incident
        with:
          short_description: 'SLO breach: {{service_name}}'
          description: 'SLO {{slo_id}} compliance: {{get-slo.compliance}}. Error budget: {{get-slo.error_budget_remaining}}.'
          urgency: '1'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slos
      path: /slo/{{slo_id}}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://roche.service-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
Open in Framework → View in Fleet → datadog-diagnostics-platform-service-health-monitor.yml

Triggers a Power BI dataset refresh for Roche's pharmaceutical pipeline portfolio dashboard and notifies the pipeline management office in Teams.

naftiko: '0.5'
info:
  label: Power BI Portfolio Pipeline Dashboard Refresh
  description: Triggers a Power BI dataset refresh for Roche's pharmaceutical pipeline portfolio dashboard and notifies the pipeline management office in Teams.
  tags:
  - data
  - analytics
  - power-bi
  - microsoft-teams
  - reporting
  - portfolio
capability:
  exposes:
  - type: mcp
    namespace: portfolio-analytics
    port: 8080
    tools:
    - name: refresh-portfolio-dashboard
      description: Given a Power BI workspace and dataset ID for the pharmaceutical pipeline portfolio dashboard, trigger a refresh and notify the pipeline management office in Teams.
      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 for the portfolio dashboard.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-pmo
        type: call
        call: msteams.post-refresh-notice
        with:
          channel_id: pipeline-management-office
          message: Portfolio pipeline dashboard (dataset {{dataset_id}}) has been refreshed.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      path: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-refresh-notice
        method: POST
Open in Framework → View in Fleet → power-bi-portfolio-pipeline-dashboard-refresh.yml

Audits Palo Alto Networks security policy rules for overly permissive configurations and opens a Jira remediation ticket for each violation found.

naftiko: '0.5'
info:
  label: Palo Alto Networks Firewall Rule Audit
  description: Audits Palo Alto Networks security policy rules for overly permissive configurations and opens a Jira remediation ticket for each violation found.
  tags:
  - security
  - network
  - palo-alto-networks
  - jira
  - audit
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: audit-firewall-rules
      description: Query Palo Alto Networks for all security policy rules in a device group, detect overly broad rules, and create a Jira remediation ticket for each violation.
      inputParameters:
      - name: device_group
        in: body
        type: string
        description: The Palo Alto Networks device group to audit.
      steps:
      - name: get-security-rules
        type: call
        call: paloalto.list-security-rules
        with:
          device_group: '{{device_group}}'
      - name: create-remediation
        type: call
        call: jira.create-remediation-ticket
        with:
          project_key: GISO
          issuetype: Task
          summary: Firewall rule audit violations in {{device_group}}
          description: Audit found {{get-security-rules.violation_count}} overly permissive rules in device group {{device_group}}.
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://roche-panorama.paloaltonetworks.com/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: security-rules
      path: /Objects/SecurityRules
      operations:
      - name: list-security-rules
        method: GET
  - type: http
    namespace: jira
    baseUri: https://roche.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-remediation-ticket
        method: POST
Open in Framework → View in Fleet → palo-alto-networks-firewall-rule-audit.yml

When a new oncology product launch campaign is created in Salesforce, activates target HCP accounts, creates ServiceNow launch coordination tasks, and notifies the brand team in Teams.

naftiko: '0.5'
info:
  label: Salesforce Oncology Product Launch Campaign
  description: When a new oncology product launch campaign is created in Salesforce, activates target HCP accounts, creates ServiceNow launch coordination tasks, and notifies the brand team in Teams.
  tags:
  - crm
  - sales
  - salesforce
  - servicenow
  - microsoft-teams
  - product-launch
  - oncology
capability:
  exposes:
  - type: mcp
    namespace: product-launch
    port: 8080
    tools:
    - name: activate-oncology-launch
      description: Given a Salesforce campaign ID for an oncology product launch, activate target HCP accounts, create ServiceNow coordination tasks, and alert the brand team in Teams.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID for the oncology product launch.
      steps:
      - name: get-campaign
        type: call
        call: salesforce.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: create-launch-tasks
        type: call
        call: servicenow.create-launch-project
        with:
          name: 'Launch: {{get-campaign.name}}'
          description: Coordination tasks for {{get-campaign.name}} targeting {{get-campaign.target_count}} HCP accounts.
      - name: notify-brand-team
        type: call
        call: msteams.post-launch-notice
        with:
          channel_id: brand-management
          message: 'Oncology launch campaign ''{{get-campaign.name}}'' activated. ServiceNow project: {{create-launch-tasks.number}}. Target HCPs: {{get-campaign.target_count}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://roche.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://roche.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: projects
      path: /table/pm_project
      operations:
      - name: create-launch-project
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-launch-notice
        method: POST
Open in Framework → View in Fleet → salesforce-oncology-product-launch-campaign.yml

When a new GitHub release is tagged in a digital health or diagnostics repository, fetches release details and posts an announcement to the product engineering Teams channel.

naftiko: '0.5'
info:
  label: GitHub Release Notes Publisher
  description: When a new GitHub release is tagged in a digital health or diagnostics repository, fetches release details and posts an announcement to the product engineering Teams channel.
  tags:
  - devops
  - engineering
  - github
  - microsoft-teams
  - 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 the release details and post a formatted release announcement to the product engineering Teams channel.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: release_tag
        in: body
        type: string
        description: The release tag name (e.g., v5.1.0).
      steps:
      - name: get-release
        type: call
        call: github.get-release-by-tag
        with:
          repository: '{{repository}}'
          tag: '{{release_tag}}'
      - name: post-announcement
        type: call
        call: msteams.post-release-announcement
        with:
          channel_id: product-engineering
          message: 'Release {{release_tag}} published for {{repository}}: {{get-release.name}}. {{get-release.body}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/{{repository}}/releases/tags/{{tag}}
      inputParameters:
      - name: repository
        in: path
      - name: tag
        in: path
      operations:
      - name: get-release-by-tag
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-release-announcement
        method: POST
Open in Framework → View in Fleet → github-release-notes-publisher.yml

Tracks lab instrument calibration schedules by querying SAP PM for upcoming calibrations, creating ServiceNow work orders, and notifying the lab manager via Teams.

naftiko: '0.5'
info:
  label: Lab Instrument Calibration Tracking
  description: Tracks lab instrument calibration schedules by querying SAP PM for upcoming calibrations, creating ServiceNow work orders, and notifying the lab manager via Teams.
  tags:
  - quality
  - manufacturing
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-calibration
    port: 8080
    tools:
    - name: track-calibration
      description: 'Track upcoming instrument calibrations: query SAP PM, create work orders, and notify lab manager.'
      inputParameters:
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      - name: days_ahead
        in: body
        type: integer
        description: Number of days to look ahead.
      steps:
      - name: get-upcoming-calibrations
        type: call
        call: sap-pm.get-maintenance-orders
        with:
          plant: '{{plant}}'
          order_type: calibration
      - name: create-work-order
        type: call
        call: servicenow.create-incident
        with:
          short_description: Lab instrument calibration due at plant {{plant}}
          category: lab_calibration
          assigned_group: Lab_Maintenance
      - name: notify-lab-manager
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.lab_team_id
          channel_id: $secrets.lab_channel_id
          body: 'Upcoming calibrations at plant {{plant}}: work order {{create-work-order.number}} created.'
  consumes:
  - type: http
    namespace: sap-pm
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: maintenance-orders
      path: /MaintenanceOrder
      operations:
      - name: get-maintenance-orders
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → lab-instrument-calibration-tracking.yml

Collects audit evidence by gathering control test results from ServiceNow, pulling supporting data from Snowflake, and assembling the evidence package in SharePoint.

naftiko: '0.5'
info:
  label: Compliance Audit Evidence Collector
  description: Collects audit evidence by gathering control test results from ServiceNow, pulling supporting data from Snowflake, and assembling the evidence package in SharePoint.
  tags:
  - compliance
  - audit
  - servicenow
  - snowflake
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: compliance-audit
    port: 8080
    tools:
    - name: collect-audit-evidence
      description: 'Collect audit evidence: gather control results, pull data, and assemble evidence package.'
      inputParameters:
      - name: audit_id
        in: body
        type: string
        description: The audit identifier.
      - name: control_id
        in: body
        type: string
        description: The control identifier.
      steps:
      - name: get-control-results
        type: call
        call: servicenow.get-control-test
        with:
          audit_id: '{{audit_id}}'
          control_id: '{{control_id}}'
      - name: get-supporting-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT evidence_type, description, collected_at FROM compliance.audit_evidence WHERE audit_id='{{audit_id}}' AND control_id='{{control_id}}'
      - name: upload-to-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: $secrets.audit_site_id
          folder: '{{audit_id}}/{{control_id}}'
          file_name: evidence_package.json
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: control-tests
      path: /table/sn_compliance_control_test
      operations:
      - name: get-control-test
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: 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: upload-file
        method: PUT
Open in Framework → View in Fleet → compliance-audit-evidence-collector.yml

Validates clinical trial data lock readiness by running quality checks in Snowflake, verifying edit checks in Veeva Vault, and generating a lock-readiness report posted to Teams.

naftiko: '0.5'
info:
  label: Clinical Data Lock Validation
  description: Validates clinical trial data lock readiness by running quality checks in Snowflake, verifying edit checks in Veeva Vault, and generating a lock-readiness report posted to Teams.
  tags:
  - clinical
  - data-management
  - snowflake
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-lock
    port: 8080
    tools:
    - name: validate-data-lock
      description: 'Validate clinical data lock readiness: run quality checks, verify edit checks, and generate report.'
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: The clinical trial ID.
      - name: database_name
        in: body
        type: string
        description: The clinical database name.
      steps:
      - name: run-quality-checks
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT check_name, status, error_count FROM clinical.data_quality_checks WHERE trial_id='{{trial_id}}' AND database_name='{{database_name}}'
      - name: verify-edit-checks
        type: call
        call: veeva-vault.query-documents
        with:
          query: SELECT id, status__v FROM documents WHERE trial_id__v='{{trial_id}}' AND type__v='edit_check_report'
      - name: post-report
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.clinical_dm_team_id
          channel_id: $secrets.clinical_dm_channel_id
          body: 'Data lock validation for trial {{trial_id}}, database {{database_name}}: quality checks and edit checks completed. Review results for lock readiness.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-documents
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-data-lock-validation.yml

When AWS spend anomalies exceed the configured threshold, creates a ServiceNow change request to investigate and notifies the cloud FinOps team in Teams.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Alert
  description: When AWS spend anomalies exceed the configured threshold, creates a ServiceNow change request to investigate and notifies the cloud FinOps team in Teams.
  tags:
  - cloud
  - finops
  - aws
  - servicenow
  - microsoft-teams
  - 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 amount, create a ServiceNow investigation request and alert the FinOps team in Teams.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The AWS account ID where the cost anomaly was detected.
      - name: service_name
        in: body
        type: string
        description: The AWS service with anomalous spend.
      - name: anomaly_amount
        in: body
        type: number
        description: The unexpected spend amount in USD.
      steps:
      - name: create-change
        type: call
        call: servicenow-cost.create-change
        with:
          short_description: 'AWS cost anomaly: ${{anomaly_amount}} on {{service_name}} in account {{account_id}}'
          category: cloud_finops
          priority: '2'
      - name: notify-finops
        type: call
        call: msteams-cost.post-message
        with:
          channel: cloud-cost-ops
          message: 'Cost anomaly: {{service_name}} in {{account_id}} — ${{anomaly_amount}} | SNOW: {{create-change.number}}'
  consumes:
  - type: http
    namespace: servicenow-cost
    baseUri: https://sanofi.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-cost
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-alert.yml

Retrieves clinical trial milestone status from Veeva Vault for a given study, returning milestone completion dates, upcoming deadlines, and at-risk indicators.

naftiko: '0.5'
info:
  label: Veeva Vault Clinical Trial Milestone Tracker
  description: Retrieves clinical trial milestone status from Veeva Vault for a given study, returning milestone completion dates, upcoming deadlines, and at-risk indicators.
  tags:
  - clinical-trials
  - veeva
  - regulatory
  - milestones
capability:
  exposes:
  - type: mcp
    namespace: vault-milestones
    port: 8080
    tools:
    - name: get-trial-milestones
      description: Look up clinical trial milestone status for a study by study number in Veeva Vault.
      inputParameters:
      - name: study_number
        in: body
        type: string
        description: The clinical study number.
      call: veeva.get-milestones
      with:
        study_number: '{{study_number}}'
      outputParameters:
      - name: milestones
        type: array
        mapping: $.data
      - name: at_risk_count
        type: number
        mapping: $.summary.atRiskCount
      - name: next_deadline
        type: string
        mapping: $.summary.nextDeadline
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: milestones
      path: /query?q=SELECT+milestone_name__v,+status__v,+planned_date__v,+actual_date__v+FROM+study_milestone__v+WHERE+study__vr.name__v='{{study_number}}'
      inputParameters:
      - name: study_number
        in: query
      operations:
      - name: get-milestones
        method: GET
Open in Framework → View in Fleet → veeva-vault-clinical-trial-milestone-tracker.yml

Reviews enterprise software license utilization by pulling usage data from Microsoft Entra, comparing against entitlements in Snowflake, and creating optimization recommendations in ServiceNow.

naftiko: '0.5'
info:
  label: Enterprise License Optimization Review
  description: Reviews enterprise software license utilization by pulling usage data from Microsoft Entra, comparing against entitlements in Snowflake, and creating optimization recommendations in ServiceNow.
  tags:
  - finops
  - identity
  - microsoft-entra
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: finops-license
    port: 8080
    tools:
    - name: review-license-utilization
      description: 'Review license utilization: pull usage data, compare entitlements, and create optimization tickets.'
      inputParameters:
      - name: application_name
        in: body
        type: string
        description: The enterprise application name.
      steps:
      - name: get-usage-data
        type: call
        call: msgraph.get-app-usage
        with:
          app_name: '{{application_name}}'
      - name: compare-entitlements
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT licensed_count, active_users, utilization_pct FROM finops.license_entitlements WHERE application_name='{{application_name}}'
      - name: create-optimization-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'License optimization: {{application_name}}'
          category: finops_license
          assigned_group: IT_Asset_Management
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: app-usage
      path: /reports/getOffice365ActiveUserDetail
      operations:
      - name: get-app-usage
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → enterprise-license-optimization-review.yml

Posts a message to a specified Microsoft Teams channel, used for automated notifications and alerts.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Message Post
  description: Posts a message to a specified Microsoft Teams channel, used for automated notifications and alerts.
  tags:
  - collaboration
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: collab-messaging
    port: 8080
    tools:
    - name: post-channel-message
      description: Post a message to a Microsoft Teams channel. Provide team ID, channel ID, and message body.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: The Microsoft Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: The Teams channel ID.
      - name: message
        in: body
        type: string
        description: The message content to post.
      call: msteams.post-channel-message
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
        body: '{{message}}'
      outputParameters:
      - name: message_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-message-post.yml

Monitors data freshness for Power BI reports by checking Snowflake pipeline timestamps, verifying refresh status in Power BI, and alerting the BI team via Teams if data is stale.

naftiko: '0.5'
info:
  label: BI Report Data Freshness Monitor
  description: Monitors data freshness for Power BI reports by checking Snowflake pipeline timestamps, verifying refresh status in Power BI, and alerting the BI team via Teams if data is stale.
  tags:
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics-freshness
    port: 8080
    tools:
    - name: monitor-data-freshness
      description: 'Monitor BI data freshness: check pipeline timestamps, verify refresh status, and alert on staleness.'
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      - name: pipeline_name
        in: body
        type: string
        description: The Snowflake pipeline name.
      steps:
      - name: check-pipeline
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT last_run_at, status FROM data_ops.pipeline_runs WHERE pipeline_name='{{pipeline_name}}' ORDER BY last_run_at DESC LIMIT 1
      - name: check-refresh
        type: call
        call: powerbi.get-refresh-history
        with:
          dataset_id: '{{dataset_id}}'
      - name: alert-bi-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.bi_team_id
          channel_id: $secrets.bi_channel_id
          body: 'Data freshness check for dataset {{dataset_id}}: Pipeline {{pipeline_name}} last ran at {{check-pipeline.last_run_at}}. Power BI refresh status: {{check-refresh.status}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: refresh-history
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → bi-report-data-freshness-monitor.yml

Generates patient enrollment analytics by pulling data from Snowflake, refreshing the Power BI enrollment dashboard, and posting a summary to the clinical ops Teams channel.

naftiko: '0.5'
info:
  label: Clinical Trial Patient Enrollment Dashboard
  description: Generates patient enrollment analytics by pulling data from Snowflake, refreshing the Power BI enrollment dashboard, and posting a summary to the clinical ops Teams channel.
  tags:
  - clinical
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-enrollment
    port: 8080
    tools:
    - name: refresh-enrollment-dashboard
      description: 'Refresh enrollment dashboard: pull Snowflake data, refresh Power BI, and post summary.'
      inputParameters:
      - name: trial_id
        in: body
        type: string
        description: The clinical trial ID.
      steps:
      - name: get-enrollment-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT site_id, enrolled_count, target_count, enrollment_rate FROM clinical.patient_enrollment WHERE trial_id='{{trial_id}}'
      - name: refresh-powerbi
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.enrollment_dataset_id
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.clinical_ops_team_id
          channel_id: $secrets.clinical_ops_channel_id
          body: Enrollment dashboard refreshed for trial {{trial_id}}. Check Power BI for updated site-level metrics.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-patient-enrollment-dashboard.yml

Initiates a deviation investigation by creating a quality event in Veeva Vault, pulling batch parameters from SAP, and assigning a CAPA to the quality team via ServiceNow.

naftiko: '0.5'
info:
  label: Manufacturing Deviation Investigation Workflow
  description: Initiates a deviation investigation by creating a quality event in Veeva Vault, pulling batch parameters from SAP, and assigning a CAPA to the quality team via ServiceNow.
  tags:
  - manufacturing
  - quality
  - veeva
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: mfg-quality
    port: 8080
    tools:
    - name: investigate-deviation
      description: 'Orchestrate deviation investigation: create quality event, retrieve batch data, and assign CAPA.'
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The batch number with the deviation.
      - name: deviation_description
        in: body
        type: string
        description: Description of the deviation.
      steps:
      - name: create-quality-event
        type: call
        call: veeva-vault.create-document
        with:
          type: quality_event
          batch_number: '{{batch_number}}'
          description: '{{deviation_description}}'
      - name: get-batch-params
        type: call
        call: sap-qm.get-inspection-lot
        with:
          batch: '{{batch_number}}'
      - name: create-capa
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'CAPA required: Deviation on batch {{batch_number}}'
          category: quality_capa
          assigned_group: QA_Investigations
          description: '{{deviation_description}}. Quality event: {{create-quality-event.id}}.'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: sap-qm
    baseUri: https://sanofi-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
      operations:
      - name: get-inspection-lot
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → manufacturing-deviation-investigation-workflow.yml

Retrieves the current regulatory submission status for a given dossier from Veeva Vault, returning lifecycle state, country, and last update date.

naftiko: '0.5'
info:
  label: Veeva Vault Regulatory Submission Status Lookup
  description: Retrieves the current regulatory submission status for a given dossier from Veeva Vault, returning lifecycle state, country, and last update date.
  tags:
  - regulatory
  - veeva
  - pharma
  - compliance
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: regulatory-lookup
    port: 8080
    tools:
    - name: get-submission-status
      description: Look up the regulatory submission status for a Veeva Vault dossier by ID. Returns lifecycle state, target country, and last modified date. Use for regulatory timeline tracking.
      inputParameters:
      - name: dossier_id
        in: body
        type: string
        description: The Veeva Vault dossier document ID.
      call: veeva-reg.get-submission
      with:
        doc_id: '{{dossier_id}}'
      outputParameters:
      - name: lifecycle_state
        type: string
        mapping: $.data[0].lifecycle_state__v
      - name: country
        type: string
        mapping: $.data[0].country__v
      - name: last_modified
        type: string
        mapping: $.data[0].modified_date__v
  consumes:
  - type: http
    namespace: veeva-reg
    baseUri: https://sanofi.veevavault.com/api/v21.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: submissions
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-submission
        method: GET
Open in Framework → View in Fleet → veeva-vault-regulatory-submission-status-lookup.yml

Retrieves SLO compliance burn rates from Datadog across Sanofi's digital platforms and posts a weekly digest to the engineering leadership channel in Teams.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Digest
  description: Retrieves SLO compliance burn rates from Datadog across Sanofi's digital platforms and posts a weekly digest to the engineering leadership channel in Teams.
  tags:
  - observability
  - datadog
  - microsoft-teams
  - slo
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: observability-reporting
    port: 8080
    tools:
    - name: digest-slo-compliance
      description: Retrieve active SLO compliance percentages from Datadog filtered by team tag and post a weekly digest to the Teams engineering leadership channel.
      inputParameters:
      - name: slo_tag
        in: body
        type: string
        description: A Datadog tag to filter SLOs by (e.g., team:digital-health).
      steps:
      - name: get-slos
        type: call
        call: datadog-slo.list-slos
        with:
          tags_query: '{{slo_tag}}'
      - name: post-digest
        type: call
        call: msteams-slo.post-message
        with:
          channel: engineering-leadership
          message: '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: msteams-slo
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-compliance-digest.yml

When a Databricks job fails, retrieves error logs, creates a Jira ticket for the data engineering team, and posts a failure alert to the data ops Teams channel.

naftiko: '0.5'
info:
  label: Data Pipeline Failure Recovery Orchestrator
  description: When a Databricks job fails, retrieves error logs, creates a Jira ticket for the data engineering team, and posts a failure alert to the data ops Teams channel.
  tags:
  - data-engineering
  - databricks
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-ops-recovery
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: 'Handle data pipeline failure: get error logs, create Jira ticket, and alert data ops.'
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The failed Databricks job run ID.
      - name: job_name
        in: body
        type: string
        description: The Databricks job name.
      steps:
      - name: get-run-details
        type: call
        call: databricks.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project: DATAENG
          summary: 'Pipeline failure: {{job_name}} (run {{run_id}})'
          description: 'State: {{get-run-details.state.result_state}}. Error: {{get-run-details.state.state_message}}'
          issue_type: Bug
      - name: alert-data-ops
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.dataops_team_id
          channel_id: $secrets.dataops_channel_id
          body: 'Pipeline {{job_name}} failed. Run ID: {{run_id}}. Jira: {{create-jira-ticket.key}}.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://sanofi.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: job-runs
      path: /jobs/runs/get
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: jira
    baseUri: https://sanofi.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → data-pipeline-failure-recovery-orchestrator.yml

When a Datadog critical monitor fires for Sanofi infrastructure, automatically creates a P1 ServiceNow incident and notifies the IT operations team in Teams.

naftiko: '0.5'
info:
  label: Datadog Alert to ServiceNow Incident
  description: When a Datadog critical monitor fires for Sanofi infrastructure, automatically creates a P1 ServiceNow incident and notifies the IT operations team in Teams.
  tags:
  - itsm
  - observability
  - datadog
  - servicenow
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: itsm-alerting
    port: 8080
    tools:
    - name: handle-datadog-alert
      description: Given a Datadog monitor ID, name, and alert body, create a P1 ServiceNow incident and notify the IT operations team in Teams.
      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 alert message body from Datadog.
      steps:
      - name: create-incident
        type: call
        call: servicenow-dd.create-incident
        with:
          short_description: 'Datadog Alert: {{monitor_name}}'
          description: '{{alert_body}}'
          urgency: '1'
          impact: '1'
      - name: notify-it-ops
        type: call
        call: msteams-dd.post-message
        with:
          channel: it-incidents
          message: 'P1 Incident: {{monitor_name}} | SNOW: {{create-incident.number}} | Monitor: {{monitor_id}}'
  consumes:
  - type: http
    namespace: servicenow-dd
    baseUri: https://sanofi.service-now.com/api/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-dd
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-alert-to-servicenow-incident.yml

Handles EHS incidents by creating a record in ServiceNow, logging details in Snowflake for trend analysis, and alerting the EHS team via Teams.

naftiko: '0.5'
info:
  label: Environmental Health Safety Incident Handler
  description: Handles EHS incidents by creating a record in ServiceNow, logging details in Snowflake for trend analysis, and alerting the EHS team via Teams.
  tags:
  - ehs
  - servicenow
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ehs-incident
    port: 8080
    tools:
    - name: handle-ehs-incident
      description: 'Handle EHS incident: create ServiceNow record, log to Snowflake, and alert EHS team.'
      inputParameters:
      - name: incident_type
        in: body
        type: string
        description: Type of EHS incident.
      - name: location
        in: body
        type: string
        description: Facility location.
      - name: description
        in: body
        type: string
        description: Incident description.
      steps:
      - name: create-ehs-record
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'EHS incident: {{incident_type}} at {{location}}'
          category: ehs
          description: '{{description}}'
      - name: log-to-analytics
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO ehs.incidents (type, location, description, ticket_number, reported_at) VALUES ('{{incident_type}}', '{{location}}', '{{description}}', '{{create-ehs-record.number}}', CURRENT_TIMESTAMP())
      - name: alert-ehs-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ehs_team_id
          channel_id: $secrets.ehs_channel_id
          body: 'EHS incident reported at {{location}}: {{incident_type}}. Ticket: {{create-ehs-record.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/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: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → environmental-health-safety-incident-handler.yml

Validates healthcare professional engagements by checking Veeva CRM interaction records, verifying compliance limits in Snowflake, and logging the audit trail in ServiceNow.

naftiko: '0.5'
info:
  label: HCP Engagement Compliance Orchestrator
  description: Validates healthcare professional engagements by checking Veeva CRM interaction records, verifying compliance limits in Snowflake, and logging the audit trail in ServiceNow.
  tags:
  - compliance
  - commercial
  - veeva
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance-hcp
    port: 8080
    tools:
    - name: validate-hcp-engagement
      description: 'Validate HCP engagement compliance: check CRM records, verify spend limits, and log audit trail.'
      inputParameters:
      - name: hcp_id
        in: body
        type: string
        description: The healthcare professional ID.
      - name: engagement_type
        in: body
        type: string
        description: Type of engagement (e.g., advisory_board, speaker_program).
      steps:
      - name: get-interactions
        type: call
        call: veeva-crm.get-interactions
        with:
          hcp_id: '{{hcp_id}}'
          type: '{{engagement_type}}'
      - name: check-spend-limits
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT SUM(amount) as total_spend, max_annual_limit FROM compliance.hcp_spend_tracking WHERE hcp_id='{{hcp_id}}' AND year=YEAR(CURRENT_DATE()) GROUP BY max_annual_limit
      - name: log-audit
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'HCP engagement compliance check: {{hcp_id}} - {{engagement_type}}'
          category: compliance_audit
          assigned_group: Compliance_Team
  consumes:
  - type: http
    namespace: veeva-crm
    baseUri: https://sanofi.veevanetwork.com/api/v1
    authentication:
      type: bearer
      token: $secrets.veeva_crm_token
    resources:
    - name: interactions
      path: /interactions
      operations:
      - name: get-interactions
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → hcp-engagement-compliance-orchestrator.yml

Sources candidates from LinkedIn Recruiter, creates candidate profiles in Workday Recruiting, and notifies hiring managers via Teams.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline to Workday
  description: Sources candidates from LinkedIn Recruiter, creates candidate profiles in Workday Recruiting, and notifies hiring managers via Teams.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-recruiting
    port: 8080
    tools:
    - name: pipeline-candidate
      description: 'Pipeline a LinkedIn candidate: source profile, create Workday candidate, and notify hiring manager.'
      inputParameters:
      - name: linkedin_profile_url
        in: body
        type: string
        description: The LinkedIn profile URL.
      - name: job_requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      steps:
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-profile
        with:
          profile_url: '{{linkedin_profile_url}}'
      - name: create-candidate
        type: call
        call: workday.create-candidate
        with:
          name: '{{get-linkedin-profile.fullName}}'
          email: '{{get-linkedin-profile.emailAddress}}'
          requisition_id: '{{job_requisition_id}}'
      - name: notify-hiring-manager
        type: call
        call: msteams.post-message
        with:
          recipient: $secrets.hiring_manager_email
          message: New candidate {{get-linkedin-profile.fullName}} added to requisition {{job_requisition_id}} from LinkedIn.
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: profiles
      path: /people/{{profile_url}}
      inputParameters:
      - name: profile_url
        in: path
      operations:
      - name: get-profile
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: candidates
      path: /sanofi/recruiting/candidates
      operations:
      - name: create-candidate
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-pipeline-to-workday.yml

Queries Snowflake to return the row count for a specified table, used for data pipeline validation and monitoring.

naftiko: '0.5'
info:
  label: Snowflake Table Row Count Check
  description: Queries Snowflake to return the row count for a specified table, used for data pipeline validation and monitoring.
  tags:
  - data-engineering
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: get-table-row-count
      description: Query Snowflake for the row count of a given table. Use for data pipeline completeness checks.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified Snowflake table name (database.schema.table).
      call: snowflake.run-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://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-table-row-count-check.yml

Grants Snowflake data sharing access by validating the request in ServiceNow, executing the share command in Snowflake, and logging the grant in the governance audit trail.

naftiko: '0.5'
info:
  label: Snowflake Data Sharing Access Grant
  description: Grants Snowflake data sharing access by validating the request in ServiceNow, executing the share command in Snowflake, and logging the grant in the governance audit trail.
  tags:
  - data-governance
  - snowflake
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-sharing
    port: 8080
    tools:
    - name: grant-data-share
      description: 'Grant data share access: validate request, execute share, and log for governance.'
      inputParameters:
      - name: share_name
        in: body
        type: string
        description: The Snowflake share name.
      - name: consumer_account
        in: body
        type: string
        description: The consumer Snowflake account.
      - name: approval_ticket
        in: body
        type: string
        description: The ServiceNow approval ticket number.
      steps:
      - name: validate-approval
        type: call
        call: servicenow.get-change
        with:
          number: '{{approval_ticket}}'
      - name: execute-share
        type: call
        call: snowflake.run-query
        with:
          statement: ALTER SHARE {{share_name}} ADD ACCOUNTS = {{consumer_account}}
      - name: log-governance
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO governance.data_sharing_log (share_name, consumer_account, approval_ticket, granted_at) VALUES ('{{share_name}}', '{{consumer_account}}', '{{approval_ticket}}', CURRENT_TIMESTAMP())
      - name: notify-governance
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.governance_team_id
          channel_id: $secrets.governance_channel_id
          body: 'Data share {{share_name}} granted to {{consumer_account}}. Approval: {{approval_ticket}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: get-change
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-sharing-access-grant.yml

Searches ServiceNow knowledge base by keyword, returning matching articles with titles, summaries, and links for employee self-service.

naftiko: '0.5'
info:
  label: ServiceNow Knowledge Article Lookup
  description: Searches ServiceNow knowledge base by keyword, returning matching articles with titles, summaries, and links for employee self-service.
  tags:
  - it-service-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: itsm-knowledge
    port: 8080
    tools:
    - name: search-knowledge-articles
      description: Search ServiceNow knowledge base articles by keyword. Returns matching article titles, short descriptions, and URLs.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search keyword or phrase.
      call: servicenow.search-kb
      with:
        sysparm_query: short_descriptionLIKE{{query}}
      outputParameters:
      - name: articles
        type: array
        mapping: $.result
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: knowledge-articles
      path: /table/kb_knowledge
      operations:
      - name: search-kb
        method: GET
Open in Framework → View in Fleet → servicenow-knowledge-article-lookup.yml

Generates batch traceability reports by querying SAP for batch genealogy, enriching with quality data from Snowflake, and posting the report to the quality team via Teams.

naftiko: '0.5'
info:
  label: SAP Batch Traceability Report
  description: Generates batch traceability reports by querying SAP for batch genealogy, enriching with quality data from Snowflake, and posting the report to the quality team via Teams.
  tags:
  - quality
  - manufacturing
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-traceability
    port: 8080
    tools:
    - name: generate-traceability-report
      description: 'Generate batch traceability report: query SAP genealogy, enrich with quality data, and post report.'
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The batch number to trace.
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      steps:
      - name: get-batch-genealogy
        type: call
        call: sap-qm.get-batch-where-used
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
      - name: get-quality-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT test_name, result, specification FROM quality.batch_test_results WHERE batch_number='{{batch_number}}'
      - name: post-report
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.quality_team_id
          channel_id: $secrets.quality_channel_id
          body: Batch traceability report for {{batch_number}} (material {{material_number}}) generated. Genealogy and quality data compiled.
  consumes:
  - type: http
    namespace: sap-qm
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /Batch
      operations:
      - name: get-batch-where-used
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-batch-traceability-report.yml

Pulls cost center budget and actual spend from SAP S/4HANA for a specified fiscal period and posts a variance summary to the finance leadership channel in Teams.

naftiko: '0.5'
info:
  label: SAP S/4HANA Budget vs Actuals Report
  description: Pulls cost center budget and actual spend from SAP S/4HANA for a specified fiscal period and posts a variance summary to the finance leadership channel in Teams.
  tags:
  - finance
  - sap
  - microsoft-teams
  - reporting
  - budget
capability:
  exposes:
  - type: mcp
    namespace: finance-budget
    port: 8080
    tools:
    - name: report-budget-variance
      description: Given an SAP cost center and fiscal period, retrieve budget vs. actuals from SAP S/4HANA and post a variance digest to the finance Teams channel.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The SAP cost center ID (e.g., CC2001).
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period in YYYYMM format (e.g., 202503).
      steps:
      - name: get-actuals
        type: call
        call: sap-budget.get-cost-center-actuals
        with:
          costCenter: '{{cost_center}}'
          fiscalPeriod: '{{fiscal_period}}'
      - name: post-report
        type: call
        call: msteams-budget.post-message
        with:
          channel: finance-leadership
          message: 'Budget vs Actuals for {{cost_center}} ({{fiscal_period}}): Budget={{get-actuals.budget}}, Actual={{get-actuals.actual}}, Variance={{get-actuals.variance}}'
  consumes:
  - type: http
    namespace: sap-budget
    baseUri: https://sanofi-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-actuals
      path: /A_CostCenter('{{costCenter}}')
      inputParameters:
      - name: costCenter
        in: path
      operations:
      - name: get-cost-center-actuals
        method: GET
        outputRawFormat: xml
  - type: http
    namespace: msteams-budget
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-s-4hana-budget-vs-actuals-report.yml

When a GitHub release is published, creates a ServiceNow change record with release notes, links the CI, and notifies the release management channel in Teams.

naftiko: '0.5'
info:
  label: GitHub Release to ServiceNow Change Record
  description: When a GitHub release is published, creates a ServiceNow change record with release notes, links the CI, and notifies the release management channel in Teams.
  tags:
  - devops
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: devops-release
    port: 8080
    tools:
    - name: process-release
      description: 'Process a GitHub release: create ServiceNow change record and notify release management.'
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository (org/repo).
      - name: release_tag
        in: body
        type: string
        description: The release tag name.
      steps:
      - name: get-release
        type: call
        call: github.get-release
        with:
          repo: '{{repo_name}}'
          tag: '{{release_tag}}'
      - name: create-change-record
        type: call
        call: servicenow.create-change
        with:
          short_description: Release {{release_tag}} for {{repo_name}}
          description: '{{get-release.body}}'
          category: software_release
      - name: notify-release-mgmt
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.release_team_id
          channel_id: $secrets.release_channel_id
          body: 'Release {{release_tag}} for {{repo_name}} published. Change record: {{create-change-record.number}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/{{repo}}/releases/tags/{{tag}}
      inputParameters:
      - name: repo
        in: path
      - name: tag
        in: path
      operations:
      - name: get-release
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-release-to-servicenow-change-record.yml

Processes drug pricing updates by retrieving current pricing from SAP SD, updating reference prices in Snowflake, and notifying the market access team via Teams.

naftiko: '0.5'
info:
  label: Market Access Pricing Update Workflow
  description: Processes drug pricing updates by retrieving current pricing from SAP SD, updating reference prices in Snowflake, and notifying the market access team via Teams.
  tags:
  - commercial
  - market-access
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: commercial-pricing
    port: 8080
    tools:
    - name: update-pricing
      description: 'Update drug pricing: get SAP pricing, update Snowflake reference tables, and notify market access.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the drug product.
      - name: new_price
        in: body
        type: string
        description: The new list price.
      - name: market
        in: body
        type: string
        description: The market/country code.
      steps:
      - name: get-current-pricing
        type: call
        call: sap-sd.get-pricing
        with:
          material: '{{material_number}}'
          market: '{{market}}'
      - name: update-reference-price
        type: call
        call: snowflake.run-query
        with:
          statement: UPDATE commercial.reference_pricing SET price='{{new_price}}', effective_date=CURRENT_DATE(), previous_price='{{get-current-pricing.list_price}}' WHERE material='{{material_number}}' AND market='{{market}}'
      - name: notify-market-access
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.market_access_team_id
          channel_id: $secrets.market_access_channel_id
          body: 'Pricing update for {{material_number}} in {{market}}: {{get-current-pricing.list_price}} -> {{new_price}}.'
  consumes:
  - type: http
    namespace: sap-sd
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_SLSPRICINGCONDITIONRECORD_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: pricing-conditions
      path: /A_SlsPrcgCndnRecdValidity
      operations:
      - name: get-pricing
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → market-access-pricing-update-workflow.yml

Reviews a SAP Concur travel request against corporate travel policy in Snowflake, flags exceptions, and routes non-compliant requests to the travel manager via Teams.

naftiko: '0.5'
info:
  label: SAP Concur Travel Request Compliance Check
  description: Reviews a SAP Concur travel request against corporate travel policy in Snowflake, flags exceptions, and routes non-compliant requests to the travel manager via Teams.
  tags:
  - travel
  - sap-concur
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: travel-compliance
    port: 8080
    tools:
    - name: check-travel-compliance
      description: 'Check travel request compliance: get request details from Concur, validate against policy, and flag exceptions.'
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The SAP Concur travel request ID.
      steps:
      - name: get-request
        type: call
        call: concur.get-travel-request
        with:
          request_id: '{{request_id}}'
      - name: check-policy
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT max_daily_hotel, max_flight_class FROM corporate.travel_policy WHERE region = '{{get-request.region}}'
      - name: notify-travel-manager
        type: call
        call: msteams.post-message
        with:
          recipient: $secrets.travel_manager_email
          message: 'Travel request {{request_id}} for {{get-request.traveler_name}} reviewed. Destination: {{get-request.destination}}. Policy check complete.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: travel-requests
      path: /travelrequest/requests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-travel-request
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-request-compliance-check.yml

Manages promotional material review by checking document status in Veeva Vault, verifying compliance claims in Snowflake, and routing approval notifications via Teams.

naftiko: '0.5'
info:
  label: Veeva PromoMats Review and Approval
  description: Manages promotional material review by checking document status in Veeva Vault, verifying compliance claims in Snowflake, and routing approval notifications via Teams.
  tags:
  - commercial
  - compliance
  - veeva
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: commercial-promomats
    port: 8080
    tools:
    - name: review-promomat
      description: 'Review promotional material: check Veeva status, verify claims, and route approval.'
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault promotional material document ID.
      steps:
      - name: get-promomat
        type: call
        call: veeva-vault.get-document
        with:
          doc_id: '{{document_id}}'
      - name: verify-claims
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT claim_text, approved, reference_id FROM commercial.promomat_claims WHERE document_id='{{document_id}}'
      - name: route-approval
        type: call
        call: msteams.post-message
        with:
          recipient: '{{get-promomat.reviewer_email}}'
          message: 'Promotional material {{document_id}} ready for review. Status: {{get-promomat.status__v}}. Claims verification complete.'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → veeva-promomats-review-and-approval.yml

Retrieves the title and body content of a Confluence page by page ID, for knowledge management and documentation queries.

naftiko: '0.5'
info:
  label: Confluence Page Content Lookup
  description: Retrieves the title and body content of a Confluence page by page ID, for knowledge management and documentation queries.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: km-docs
    port: 8080
    tools:
    - name: get-page-content
      description: Look up a Confluence page by ID. Returns the page title and body content.
      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://sanofi.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}?expand=body.storage
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-page-content-lookup.yml

When an employee's role changes in Workday, updates Microsoft Entra ID group memberships and notifies IT of any elevated permissions requiring security review.

naftiko: '0.5'
info:
  label: Workday Role Change Access Sync
  description: When an employee's role changes in Workday, updates Microsoft Entra ID group memberships and notifies IT of any elevated permissions requiring security review.
  tags:
  - hr
  - identity
  - workday
  - microsoft-365
  - microsoft-teams
  - 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 Microsoft Entra ID group memberships and notify the IT access review team in Teams.
      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-role.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: update-groups
        type: call
        call: msgraph-role.update-member-groups
        with:
          userId: '{{get-employee.entraObjectId}}'
          newRole: '{{new_role}}'
      - name: notify-it
        type: call
        call: msteams-role.post-message
        with:
          channel: it-access-reviews
          message: 'Role change: {{get-employee.displayName}} moved from {{old_role}} to {{new_role}}. Entra groups updated. Review if privileged access changed.'
  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: /sanofi/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msgraph-role
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: user-groups
      path: /users/{{userId}}/memberOf
      inputParameters:
      - name: userId
        in: path
      operations:
      - name: update-member-groups
        method: POST
  - type: http
    namespace: msteams-role
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-role-change-access-sync.yml

Queries Datadog for the current health status of a monitored service, returning overall state and last check timestamp.

naftiko: '0.5'
info:
  label: Datadog Service Status Check
  description: Queries Datadog for the current health status of a monitored service, returning overall state and last check timestamp.
  tags:
  - observability
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: observability-health
    port: 8080
    tools:
    - name: get-service-status
      description: Check the health status of a Datadog-monitored service by service name. Returns current state and last evaluation time.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog.get-monitor-status
      with:
        service: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.overall_state
      - name: last_check
        type: string
        mapping: $.overall_state_modified
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: monitors
      path: /monitor
      operations:
      - name: get-monitor-status
        method: GET
Open in Framework → View in Fleet → datadog-service-status-check.yml

Audits Microsoft Entra conditional access policies, compares against compliance baselines in Snowflake, and creates a ServiceNow audit finding for any deviations.

naftiko: '0.5'
info:
  label: Azure AD Conditional Access Policy Audit
  description: Audits Microsoft Entra conditional access policies, compares against compliance baselines in Snowflake, and creates a ServiceNow audit finding for any deviations.
  tags:
  - security
  - identity
  - microsoft-entra
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: security-identity-audit
    port: 8080
    tools:
    - name: audit-conditional-access
      description: 'Audit conditional access policies: pull Entra policies, compare baselines, and log findings.'
      inputParameters:
      - name: policy_scope
        in: body
        type: string
        description: The scope of policies to audit (e.g., all, gxp, corporate).
      steps:
      - name: get-policies
        type: call
        call: msgraph.get-ca-policies
        with:
          scope: '{{policy_scope}}'
      - name: get-baselines
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT policy_name, required_controls FROM security.ca_policy_baselines WHERE scope='{{policy_scope}}'
      - name: create-audit-finding
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Conditional access policy audit: {{policy_scope}} scope'
          category: security_audit
          assigned_group: Identity_Security
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: ca-policies
      path: /identity/conditionalAccess/policies
      operations:
      - name: get-ca-policies
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → azure-ad-conditional-access-policy-audit.yml

Identifies SOPs due for periodic review in SharePoint, creates review tasks in Jira, and notifies document owners via Teams.

naftiko: '0.5'
info:
  label: SharePoint SOP Review Reminder
  description: Identifies SOPs due for periodic review in SharePoint, creates review tasks in Jira, and notifies document owners via Teams.
  tags:
  - quality
  - compliance
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-sop-review
    port: 8080
    tools:
    - name: trigger-sop-review
      description: 'Trigger SOP review cycle: find due SOPs in SharePoint, create Jira tasks, and notify owners.'
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID containing SOPs.
      steps:
      - name: get-due-sops
        type: call
        call: sharepoint.list-items
        with:
          site_id: '{{site_id}}'
          filter: reviewDueDate le today
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project: QUALITY
          summary: SOP periodic review due
          issue_type: Task
      - name: notify-owners
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.quality_team_id
          channel_id: $secrets.quality_channel_id
          body: SOP review cycle initiated. Review tasks created in Jira. Please check your assignments.
  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}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
  - type: http
    namespace: jira
    baseUri: https://sanofi.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sharepoint-sop-review-reminder.yml

Identifies the slowest-running Snowflake queries in the past 24 hours and posts an optimization digest to the data engineering channel in Teams.

naftiko: '0.5'
info:
  label: Snowflake Query Performance Digest
  description: Identifies the slowest-running Snowflake queries in the past 24 hours and posts an optimization digest to the data engineering channel in Teams.
  tags:
  - data
  - snowflake
  - microsoft-teams
  - performance
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data-performance
    port: 8080
    tools:
    - name: digest-slow-queries
      description: Query Snowflake's query history to identify the 10 slowest-running queries in the last 24 hours and post an optimization digest to the data engineering Teams channel.
      inputParameters:
      - name: warehouse
        in: body
        type: string
        description: The Snowflake virtual warehouse to analyze query performance for.
      steps:
      - name: get-slow-queries
        type: call
        call: snowflake-perf.query-history
        with:
          warehouse: '{{warehouse}}'
      - name: post-digest
        type: call
        call: msteams-perf.post-message
        with:
          channel: data-engineering
          message: 'Top slow queries in warehouse {{warehouse}} (last 24h): {{get-slow-queries.summary}}'
  consumes:
  - type: http
    namespace: snowflake-perf
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: query-history
      path: /warehouses/{{warehouse}}/queries
      inputParameters:
      - name: warehouse
        in: path
      operations:
      - name: query-history
        method: GET
  - type: http
    namespace: msteams-perf
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-query-performance-digest.yml

Converts an approved SAP Ariba requisition into a SAP S/4HANA purchase order, assigns the vendor, and sends a confirmation to the requestor via Teams.

naftiko: '0.5'
info:
  label: Procurement Requisition to PO Workflow
  description: Converts an approved SAP Ariba requisition into a SAP S/4HANA purchase order, assigns the vendor, and sends a confirmation to the requestor via Teams.
  tags:
  - procurement
  - sap-ariba
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-req-to-po
    port: 8080
    tools:
    - name: convert-requisition-to-po
      description: Convert an approved Ariba requisition to a SAP PO, assign vendor, and confirm with requestor.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP Ariba requisition ID.
      steps:
      - name: get-requisition
        type: call
        call: ariba.get-requisition
        with:
          req_id: '{{requisition_id}}'
      - name: create-po
        type: call
        call: sap-po.create-po
        with:
          vendor: '{{get-requisition.supplier.id}}'
          material: '{{get-requisition.lineItems[0].material}}'
          quantity: '{{get-requisition.lineItems[0].quantity}}'
          plant: '{{get-requisition.deliverTo.plant}}'
      - name: notify-requestor
        type: call
        call: msteams.post-message
        with:
          recipient: '{{get-requisition.requester.email}}'
          message: Your requisition {{requisition_id}} has been converted to PO {{create-po.PurchaseOrder}}.
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/procurement/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions/{{req_id}}
      inputParameters:
      - name: req_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: sap-po
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder
      operations:
      - name: create-po
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → procurement-requisition-to-po-workflow.yml

Refreshes real-world evidence datasets by triggering Databricks ETL pipelines, validating data quality in Snowflake, and notifying the RWE team via Teams.

naftiko: '0.5'
info:
  label: Real World Evidence Data Refresh
  description: Refreshes real-world evidence datasets by triggering Databricks ETL pipelines, validating data quality in Snowflake, and notifying the RWE team via Teams.
  tags:
  - research
  - data-engineering
  - databricks
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rwe-data-refresh
    port: 8080
    tools:
    - name: refresh-rwe-data
      description: 'Refresh RWE data: trigger Databricks pipeline, validate quality, and notify team.'
      inputParameters:
      - name: dataset_name
        in: body
        type: string
        description: The RWE dataset name.
      steps:
      - name: trigger-etl
        type: call
        call: databricks.run-job
        with:
          job_name: rwe_{{dataset_name}}_refresh
      - name: validate-quality
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT check_name, status FROM rwe.data_quality_checks WHERE dataset_name='{{dataset_name}}' ORDER BY run_date DESC LIMIT 10
      - name: notify-rwe-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.rwe_team_id
          channel_id: $secrets.rwe_channel_id
          body: 'RWE dataset {{dataset_name}} refresh triggered. Databricks job: {{trigger-etl.run_id}}. Quality validation in progress.'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://sanofi.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: run-job
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → real-world-evidence-data-refresh.yml

Retrieves healthcare professional account details from Veeva CRM by account ID, returning specialty, address, and territory.

naftiko: '0.5'
info:
  label: Veeva CRM Account Detail Lookup
  description: Retrieves healthcare professional account details from Veeva CRM by account ID, returning specialty, address, and territory.
  tags:
  - commercial
  - veeva
capability:
  exposes:
  - type: mcp
    namespace: commercial-crm
    port: 8080
    tools:
    - name: get-hcp-account
      description: Look up a Veeva CRM HCP account by ID. Returns specialty, primary address, and territory assignment.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Veeva CRM account ID.
      call: veeva-crm.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: specialty
        type: string
        mapping: $.Specialty_1_vod__c
      - name: address
        type: string
        mapping: $.Primary_Address_vod__c
      - name: territory
        type: string
        mapping: $.Territory_vod__c
  consumes:
  - type: http
    namespace: veeva-crm
    baseUri: https://sanofi.veevanetwork.com/api/v1
    authentication:
      type: bearer
      token: $secrets.veeva_crm_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
Open in Framework → View in Fleet → veeva-crm-account-detail-lookup.yml

Syncs benefits enrollment data from Workday to the insurance carrier via SAP, updates tracking in Snowflake, and confirms enrollment to the employee via Teams.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Sync
  description: Syncs benefits enrollment data from Workday to the insurance carrier via SAP, updates tracking in Snowflake, and confirms enrollment to the employee via Teams.
  tags:
  - hr
  - benefits
  - workday
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-benefits
    port: 8080
    tools:
    - name: sync-benefits-enrollment
      description: 'Sync benefits enrollment: extract from Workday, send to carrier, update tracking, and confirm.'
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: plan_code
        in: body
        type: string
        description: The benefits plan code.
      steps:
      - name: get-enrollment
        type: call
        call: workday.get-benefits-enrollment
        with:
          worker_id: '{{worker_id}}'
          plan: '{{plan_code}}'
      - name: send-to-carrier
        type: call
        call: sap-hr.submit-benefits
        with:
          employee_id: '{{get-enrollment.sapId}}'
          plan: '{{plan_code}}'
          coverage_level: '{{get-enrollment.coverageLevel}}'
      - name: update-tracking
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO hr.benefits_enrollment_log (worker_id, plan_code, coverage_level, synced_at) VALUES ('{{worker_id}}', '{{plan_code}}', '{{get-enrollment.coverageLevel}}', CURRENT_TIMESTAMP())
      - name: confirm-enrollment
        type: call
        call: msteams.post-message
        with:
          recipient: '{{get-enrollment.email}}'
          message: Your benefits enrollment for plan {{plan_code}} has been synced successfully.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: benefits
      path: /sanofi/workers/{{worker_id}}/benefits
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-benefits-enrollment
        method: GET
  - type: http
    namespace: sap-hr
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: benefits
      path: /A_BusinessPartner
      operations:
      - name: submit-benefits
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-benefits-enrollment-sync.yml

Retrieves month-to-date cost for a specified Azure resource group, used for cloud FinOps reporting and budget tracking.

naftiko: '0.5'
info:
  label: Azure Resource Group Cost Lookup
  description: Retrieves month-to-date cost for a specified Azure resource group, used for cloud FinOps reporting and budget tracking.
  tags:
  - finops
  - microsoft-azure
capability:
  exposes:
  - type: mcp
    namespace: finops-cloud
    port: 8080
    tools:
    - name: get-resource-group-cost
      description: Look up Azure month-to-date cost for a resource group. Returns total cost and currency.
      inputParameters:
      - name: resource_group
        in: body
        type: string
        description: The Azure resource group name.
      call: azure-cost.get-cost
      with:
        resource_group: '{{resource_group}}'
      outputParameters:
      - name: total_cost
        type: string
        mapping: $.properties.rows[0][0]
      - name: currency
        type: string
        mapping: $.properties.rows[0][1]
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cost-query
      path: /subscriptions/$secrets.azure_subscription_id/resourceGroups/{{resource_group}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: resource_group
        in: path
      operations:
      - name: get-cost
        method: POST
Open in Framework → View in Fleet → azure-resource-group-cost-lookup.yml

Orchestrates batch release by pulling QC results from SAP QM, checking compliance in Veeva Vault, notifying QA via Teams, and updating the batch record in Snowflake.

naftiko: '0.5'
info:
  label: Drug Product Batch Release Workflow
  description: Orchestrates batch release by pulling QC results from SAP QM, checking compliance in Veeva Vault, notifying QA via Teams, and updating the batch record in Snowflake.
  tags:
  - manufacturing
  - quality
  - sap
  - veeva
  - microsoft-teams
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: mfg-batch-release
    port: 8080
    tools:
    - name: release-batch
      description: 'Orchestrate drug product batch release: pull QC results, verify compliance documents, notify QA team, and update analytics.'
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The manufacturing batch number.
      - name: material_number
        in: body
        type: string
        description: The SAP material number for the drug product.
      steps:
      - name: get-qc-results
        type: call
        call: sap-qm.get-inspection-lot
        with:
          batch: '{{batch_number}}'
          material: '{{material_number}}'
      - name: check-compliance-doc
        type: call
        call: veeva-vault.get-document
        with:
          doc_id: '{{get-qc-results.compliance_doc_id}}'
      - name: notify-qa
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.qa_team_id
          channel_id: $secrets.qa_channel_id
          body: 'Batch {{batch_number}} QC complete. Status: {{get-qc-results.inspection_result}}. Compliance doc: {{check-compliance-doc.status__v}}.'
      - name: update-analytics
        type: call
        call: snowflake.run-query
        with:
          statement: UPDATE manufacturing.batch_records SET qc_status='{{get-qc-results.inspection_result}}', released_at=CURRENT_TIMESTAMP() WHERE batch_number='{{batch_number}}'
  consumes:
  - type: http
    namespace: sap-qm
    baseUri: https://sanofi-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
      operations:
      - name: get-inspection-lot
        method: GET
  - type: http
    namespace: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-document
        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
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → drug-product-batch-release-workflow.yml

Lists documents in a SharePoint document library by site and library name, returning file names, sizes, and last modified dates.

naftiko: '0.5'
info:
  label: SharePoint Document Library Listing
  description: Lists documents in a SharePoint document library by site and library name, returning file names, sizes, and last modified dates.
  tags:
  - collaboration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: collab-docs
    port: 8080
    tools:
    - name: list-documents
      description: List files in a SharePoint document library. Returns file names, sizes, and last modified dates.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site ID.
      - name: library_name
        in: body
        type: string
        description: The document library name.
      call: sharepoint.list-items
      with:
        site_id: '{{site_id}}'
        library: '{{library_name}}'
      outputParameters:
      - name: files
        type: array
        mapping: $.value
  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}}/drives
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
Open in Framework → View in Fleet → sharepoint-document-library-listing.yml

Reviews contract manufacturer quality by pulling batch data from SAP QM, checking quality KPIs in Snowflake, and creating a review report in ServiceNow.

naftiko: '0.5'
info:
  label: Contract Manufacturer Quality Review
  description: Reviews contract manufacturer quality by pulling batch data from SAP QM, checking quality KPIs in Snowflake, and creating a review report in ServiceNow.
  tags:
  - quality
  - manufacturing
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: quality-cmo-review
    port: 8080
    tools:
    - name: review-cmo-quality
      description: 'Review CMO quality: pull batch data, check KPIs, and create review report.'
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The contract manufacturer vendor ID.
      - name: review_period
        in: body
        type: string
        description: The review period.
      steps:
      - name: get-batch-data
        type: call
        call: sap-qm.get-vendor-lots
        with:
          vendor_id: '{{vendor_id}}'
          period: '{{review_period}}'
      - name: get-quality-kpis
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT rejection_rate, deviation_count, otif_score FROM quality.cmo_kpis WHERE vendor_id='{{vendor_id}}' AND period='{{review_period}}'
      - name: create-review-report
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'CMO quality review: vendor {{vendor_id}} for {{review_period}}'
          category: quality_review
          assigned_group: Quality_Operations
  consumes:
  - type: http
    namespace: sap-qm
    baseUri: https://sanofi-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
      operations:
      - name: get-vendor-lots
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → contract-manufacturer-quality-review.yml

Promotes SAP transport requests through landscapes by verifying approvals in ServiceNow, executing the transport in SAP, and logging the promotion in Snowflake for audit.

naftiko: '0.5'
info:
  label: SAP Transport Request Promotion Workflow
  description: Promotes SAP transport requests through landscapes by verifying approvals in ServiceNow, executing the transport in SAP, and logging the promotion in Snowflake for audit.
  tags:
  - devops
  - sap
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: sap-transport
    port: 8080
    tools:
    - name: promote-transport
      description: 'Promote SAP transport: verify approval, execute transport, and log for audit.'
      inputParameters:
      - name: transport_number
        in: body
        type: string
        description: The SAP transport request number.
      - name: target_system
        in: body
        type: string
        description: The target SAP system (QAS, PRD).
      steps:
      - name: verify-approval
        type: call
        call: servicenow.get-change
        with:
          transport: '{{transport_number}}'
      - name: execute-transport
        type: call
        call: sap-basis.import-transport
        with:
          transport: '{{transport_number}}'
          target: '{{target_system}}'
      - name: log-promotion
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO sap_ops.transport_promotions (transport_number, target_system, approval_ticket, promoted_at) VALUES ('{{transport_number}}', '{{target_system}}', '{{verify-approval.number}}', CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: get-change
        method: GET
  - type: http
    namespace: sap-basis
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_TRANSPORT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: transports
      path: /TransportRequest
      operations:
      - name: import-transport
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → sap-transport-request-promotion-workflow.yml

Realigns sales territories by updating Veeva CRM assignments, syncing changes to Snowflake analytics, and notifying field managers via Teams.

naftiko: '0.5'
info:
  label: Commercial Field Force Territory Realignment
  description: Realigns sales territories by updating Veeva CRM assignments, syncing changes to Snowflake analytics, and notifying field managers via Teams.
  tags:
  - commercial
  - veeva
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: commercial-territory
    port: 8080
    tools:
    - name: realign-territory
      description: 'Realign a sales territory: update Veeva CRM, sync to Snowflake, and notify field managers.'
      inputParameters:
      - name: rep_id
        in: body
        type: string
        description: The sales representative ID.
      - name: new_territory
        in: body
        type: string
        description: The new territory code.
      steps:
      - name: update-crm
        type: call
        call: veeva-crm.update-territory
        with:
          rep_id: '{{rep_id}}'
          territory: '{{new_territory}}'
      - name: sync-analytics
        type: call
        call: snowflake.run-query
        with:
          statement: UPDATE commercial.territory_assignments SET territory_code='{{new_territory}}', updated_at=CURRENT_TIMESTAMP() WHERE rep_id='{{rep_id}}'
      - name: notify-manager
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.commercial_team_id
          channel_id: $secrets.commercial_channel_id
          body: 'Territory realignment: Rep {{rep_id}} reassigned to territory {{new_territory}}.'
  consumes:
  - type: http
    namespace: veeva-crm
    baseUri: https://sanofi.veevanetwork.com/api/v1
    authentication:
      type: bearer
      token: $secrets.veeva_crm_token
    resources:
    - name: territory-assignments
      path: /territories/{{rep_id}}
      inputParameters:
      - name: rep_id
        in: path
      operations:
      - name: update-territory
        method: PUT
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → commercial-field-force-territory-realignment.yml

Captures a point-in-time headcount snapshot from Workday, loads it into Snowflake for trend analysis, and generates a Power BI dashboard refresh with summary posted to Teams.

naftiko: '0.5'
info:
  label: Workday Headcount Planning Snapshot
  description: Captures a point-in-time headcount snapshot from Workday, loads it into Snowflake for trend analysis, and generates a Power BI dashboard refresh with summary posted to Teams.
  tags:
  - hr
  - workforce-planning
  - workday
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-workforce-planning
    port: 8080
    tools:
    - name: capture-headcount-snapshot
      description: 'Capture headcount snapshot: pull from Workday, load to Snowflake, refresh Power BI, and notify HR.'
      inputParameters:
      - name: snapshot_date
        in: body
        type: string
        description: The snapshot date in YYYY-MM-DD format.
      steps:
      - name: get-headcount
        type: call
        call: workday.get-headcount
        with:
          effective_date: '{{snapshot_date}}'
      - name: load-to-snowflake
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO hr.headcount_snapshots (snapshot_date, total_headcount, captured_at) VALUES ('{{snapshot_date}}', '{{get-headcount.total}}', CURRENT_TIMESTAMP())
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.headcount_dataset_id
      - name: notify-hr
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.hr_team_id
          channel_id: $secrets.hr_channel_id
          body: 'Headcount snapshot for {{snapshot_date}}: {{get-headcount.total}} employees. Dashboard refreshing.'
  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: /sanofi/workers
      operations:
      - name: get-headcount
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-planning-snapshot.yml

When a time-off request is submitted in Workday, notifies the employee's manager in Microsoft Teams so they can plan coverage proactively.

naftiko: '0.5'
info:
  label: Workday Time-Off Request Manager Notification
  description: When a time-off request is submitted in Workday, notifies the employee's manager in Microsoft Teams so they can plan coverage proactively.
  tags:
  - hr
  - workday
  - microsoft-teams
  - 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 manager in Teams.
      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: msteams-leave.post-message
        with:
          recipient: '{{get-request.managerEmail}}'
          message: '{{get-request.employeeName}} has 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: /sanofi/timeOffRequests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-timeoff-request
        method: GET
  - type: http
    namespace: msteams-leave
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-time-off-request-manager-notification.yml

Handles temperature excursions in vaccine cold chain by logging the event in SAP QM, creating a quality deviation in Veeva Vault, and alerting supply chain quality via Teams.

naftiko: '0.5'
info:
  label: Vaccine Cold Chain Temperature Excursion Handler
  description: Handles temperature excursions in vaccine cold chain by logging the event in SAP QM, creating a quality deviation in Veeva Vault, and alerting supply chain quality via Teams.
  tags:
  - supply-chain
  - quality
  - sap
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: scm-cold-chain
    port: 8080
    tools:
    - name: handle-temperature-excursion
      description: 'Handle cold chain temperature excursion: log in SAP, create deviation, and alert quality team.'
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: The shipment identifier.
      - name: max_temperature
        in: body
        type: string
        description: The maximum recorded temperature.
      - name: location
        in: body
        type: string
        description: The location where excursion occurred.
      steps:
      - name: log-excursion
        type: call
        call: sap-qm.create-notification
        with:
          type: temperature_excursion
          shipment: '{{shipment_id}}'
          temperature: '{{max_temperature}}'
          location: '{{location}}'
      - name: create-deviation
        type: call
        call: veeva-vault.create-document
        with:
          type: quality_deviation
          description: 'Temperature excursion on shipment {{shipment_id}} at {{location}}. Max temp: {{max_temperature}}'
      - name: alert-quality
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.scm_quality_team_id
          channel_id: $secrets.scm_quality_channel_id
          body: 'ALERT: Temperature excursion on shipment {{shipment_id}} at {{location}}. Max temp: {{max_temperature}}. SAP notification: {{log-excursion.notification_id}}. Deviation: {{create-deviation.id}}.'
  consumes:
  - type: http
    namespace: sap-qm
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_QUALITYNOTIFICATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: notifications
      path: /QualityNotification
      operations:
      - name: create-notification
        method: POST
  - type: http
    namespace: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → vaccine-cold-chain-temperature-excursion-handler.yml

Automates period-end close by pulling trial balance from SAP, comparing against Snowflake analytics, and posting the reconciliation summary to the finance Teams channel.

naftiko: '0.5'
info:
  label: Financial Period Close Reconciliation
  description: Automates period-end close by pulling trial balance from SAP, comparing against Snowflake analytics, and posting the reconciliation summary to the finance Teams channel.
  tags:
  - finance
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: reconcile-period-close
      description: 'Reconcile financial period close: pull SAP trial balance, compare with Snowflake, and notify finance.'
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period (e.g., 2026-03).
      - name: company_code
        in: body
        type: string
        description: The SAP company code.
      steps:
      - name: get-trial-balance
        type: call
        call: sap-fi.get-trial-balance
        with:
          period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: get-analytics-totals
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT account_group, SUM(amount) as total FROM finance.gl_entries WHERE period = '{{fiscal_period}}' GROUP BY account_group
      - name: post-reconciliation
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.finance_team_id
          channel_id: $secrets.finance_channel_id
          body: Period {{fiscal_period}} reconciliation complete for company code {{company_code}}. SAP trial balance and Snowflake analytics compared.
  consumes:
  - type: http
    namespace: sap-fi
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entries
      path: /A_JournalEntryItemBasic
      operations:
      - name: get-trial-balance
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → financial-period-close-reconciliation.yml

Checks the Azure Recovery Services vault for failed or missed VM backups and creates a ServiceNow alert for any failures found in the Sanofi production subscription.

naftiko: '0.5'
info:
  label: Azure VM Backup Verification
  description: Checks the Azure Recovery Services vault for failed or missed VM backups and creates a ServiceNow alert for any failures found in the Sanofi production subscription.
  tags:
  - cloud
  - azure
  - servicenow
  - backup
  - operations
capability:
  exposes:
  - type: mcp
    namespace: cloud-backup
    port: 8080
    tools:
    - name: verify-vm-backups
      description: Check the Azure Recovery Services vault for failed or missed VM backup jobs in the past 24 hours and create a ServiceNow incident for each failure.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The Azure subscription ID to check for backup failures.
      - name: vault_name
        in: body
        type: string
        description: The Azure Recovery Services vault name.
      - name: resource_group
        in: body
        type: string
        description: The Azure resource group containing the vault.
      steps:
      - name: get-backup-jobs
        type: call
        call: azure-backup.list-backup-jobs
        with:
          subscriptionId: '{{subscription_id}}'
          vaultName: '{{vault_name}}'
          resourceGroup: '{{resource_group}}'
      - name: create-alert
        type: call
        call: servicenow-backup.create-incident
        with:
          short_description: Azure VM backup failure in vault {{vault_name}}
          description: 'Failed jobs: {{get-backup-jobs.failedJobs}}'
          urgency: '2'
  consumes:
  - type: http
    namespace: azure-backup
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: backup-jobs
      path: /subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.RecoveryServices/vaults/{{vaultName}}/backupJobs
      inputParameters:
      - name: subscriptionId
        in: path
      - name: resourceGroup
        in: path
      - name: vaultName
        in: path
      operations:
      - name: list-backup-jobs
        method: GET
  - type: http
    namespace: servicenow-backup
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → azure-vm-backup-verification.yml

Integrates biomarker assay results by loading data into Snowflake from lab systems, updating the clinical database status in Veeva Vault, and notifying the biostatistics team via Teams.

naftiko: '0.5'
info:
  label: Clinical Biomarker Data Integration
  description: Integrates biomarker assay results by loading data into Snowflake from lab systems, updating the clinical database status in Veeva Vault, and notifying the biostatistics team via Teams.
  tags:
  - clinical
  - research
  - snowflake
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-biomarker
    port: 8080
    tools:
    - name: integrate-biomarker-data
      description: 'Integrate biomarker data: load to Snowflake, update Veeva status, and notify biostatistics.'
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The clinical study ID.
      - name: assay_batch_id
        in: body
        type: string
        description: The assay batch identifier.
      steps:
      - name: load-assay-results
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO clinical.biomarker_results (study_id, assay_batch_id, loaded_at) VALUES ('{{study_id}}', '{{assay_batch_id}}', CURRENT_TIMESTAMP())
      - name: update-vault-status
        type: call
        call: veeva-vault.update-document
        with:
          doc_id: '{{assay_batch_id}}'
          status: data_loaded
      - name: notify-biostats
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.biostats_team_id
          channel_id: $secrets.biostats_channel_id
          body: Biomarker data loaded for study {{study_id}}, batch {{assay_batch_id}}. Ready for analysis.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: update-document
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → clinical-biomarker-data-integration.yml

Assesses supplier risk by pulling vendor data from SAP, checking compliance scores in Snowflake, and creating risk review tickets in ServiceNow.

naftiko: '0.5'
info:
  label: Supplier Risk Assessment Orchestrator
  description: Assesses supplier risk by pulling vendor data from SAP, checking compliance scores in Snowflake, and creating risk review tickets in ServiceNow.
  tags:
  - procurement
  - risk-management
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: procurement-risk
    port: 8080
    tools:
    - name: assess-supplier-risk
      description: 'Assess supplier risk: get vendor data, check compliance scores, and create risk review.'
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP vendor ID.
      steps:
      - name: get-vendor-data
        type: call
        call: sap-mm.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: get-compliance-score
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT risk_score, last_audit_date, compliance_status FROM procurement.supplier_risk WHERE vendor_id='{{vendor_id}}'
      - name: create-risk-review
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Supplier risk review: {{get-vendor-data.CompanyName}} ({{vendor_id}})'
          category: supplier_risk
          assigned_group: Procurement_Risk
  consumes:
  - type: http
    namespace: sap-mm
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_BusinessPartner('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → supplier-risk-assessment-orchestrator.yml

Checks whether branch protection rules are enabled on the main branch of a GitHub repository, returning required reviews and status checks.

naftiko: '0.5'
info:
  label: GitHub Repository Branch Protection Check
  description: Checks whether branch protection rules are enabled on the main branch of a GitHub repository, returning required reviews and status checks.
  tags:
  - devops
  - github
capability:
  exposes:
  - type: mcp
    namespace: devops-compliance
    port: 8080
    tools:
    - name: check-branch-protection
      description: Check branch protection settings for the main branch of a GitHub repo. Returns required reviewers and status check enforcement.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository name (org/repo).
      call: github.get-branch-protection
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: required_reviews
        type: integer
        mapping: $.required_pull_request_reviews.required_approving_review_count
      - name: enforce_status_checks
        type: boolean
        mapping: $.required_status_checks.strict
  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/main/protection
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-branch-protection
        method: GET
Open in Framework → View in Fleet → github-repository-branch-protection-check.yml

Queries Veeva Vault for clinical trial data completeness issues and posts a data quality digest to the clinical data management team channel in Teams.

naftiko: '0.5'
info:
  label: Clinical Trial Data Quality Check
  description: Queries Veeva Vault for clinical trial data completeness issues and posts a data quality digest to the clinical data management team channel in Teams.
  tags:
  - clinical
  - veeva
  - microsoft-teams
  - data-quality
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: clinical-data-ops
    port: 8080
    tools:
    - name: check-trial-data-quality
      description: Given a Veeva Vault study ID, retrieve data entry completeness metrics and post a quality digest to the clinical data management Teams channel.
      inputParameters:
      - name: study_id
        in: body
        type: string
        description: The Veeva Vault clinical study ID to check.
      - name: cutoff_date
        in: body
        type: string
        description: The data cutoff date for the quality check in YYYY-MM-DD format.
      steps:
      - name: get-study-metrics
        type: call
        call: veeva-cdm.get-study-metrics
        with:
          study_id: '{{study_id}}'
          cutoff: '{{cutoff_date}}'
      - name: post-digest
        type: call
        call: msteams-cdm.post-message
        with:
          channel: clinical-data-management
          message: 'Data quality digest for study {{study_id}} (cutoff: {{cutoff_date}}): Completeness={{get-study-metrics.completeness}}%, Open queries={{get-study-metrics.openQueries}}'
  consumes:
  - type: http
    namespace: veeva-cdm
    baseUri: https://sanofi.veevavault.com/api/v21.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: study-metrics
      path: /objects/studies/{{study_id}}/metrics
      inputParameters:
      - name: study_id
        in: path
      operations:
      - name: get-study-metrics
        method: GET
  - type: http
    namespace: msteams-cdm
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → clinical-trial-data-quality-check.yml

Checks SAP S/4HANA for the goods receipt status of a purchase order, returning posting date and quantity received.

naftiko: '0.5'
info:
  label: SAP Goods Receipt Status Lookup
  description: Checks SAP S/4HANA for the goods receipt status of a purchase order, returning posting date and quantity received.
  tags:
  - supply-chain
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: scm-receiving
    port: 8080
    tools:
    - name: get-goods-receipt-status
      description: Look up goods receipt status for a SAP purchase order. Returns posting date, received quantity, and delivery status.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      call: sap-gr.get-receipt
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: posting_date
        type: string
        mapping: $.d.PostingDate
      - name: quantity_received
        type: string
        mapping: $.d.QuantityInEntryUnit
      - name: delivery_completed
        type: boolean
        mapping: $.d.DeliveryCompleted
  consumes:
  - type: http
    namespace: sap-gr
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-documents
      path: /A_MaterialDocumentHeader
      operations:
      - name: get-receipt
        method: GET
Open in Framework → View in Fleet → sap-goods-receipt-status-lookup.yml

When a clinical document is approved in Veeva Vault, retrieves its metadata and posts a Teams notification to the regulatory affairs team to initiate submission workflows.

naftiko: '0.5'
info:
  label: Veeva Vault Clinical Document Submission
  description: When a clinical document is approved in Veeva Vault, retrieves its metadata and posts a Teams notification to the regulatory affairs team to initiate submission workflows.
  tags:
  - regulatory
  - veeva
  - microsoft-teams
  - clinical-operations
  - pharma
capability:
  exposes:
  - type: mcp
    namespace: regulatory-submissions
    port: 8080
    tools:
    - name: notify-document-approval
      description: Given a Veeva Vault document ID, retrieve its approval status and metadata, then notify the regulatory affairs team in Teams to proceed with submission activities.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Veeva Vault document ID that has been approved.
      - name: submission_type
        in: body
        type: string
        description: The regulatory submission type (e.g., IND, NDA, MAA).
      steps:
      - name: get-document
        type: call
        call: veeva.get-document
        with:
          doc_id: '{{document_id}}'
      - name: notify-reg-affairs
        type: call
        call: msteams-reg.post-message
        with:
          channel: regulatory-affairs
          message: 'Document {{document_id}} ({{get-document.name}}) approved in Veeva. Submission type: {{submission_type}}. Please initiate filing workflow.'
  consumes:
  - type: http
    namespace: veeva
    baseUri: https://sanofi.veevavault.com/api/v21.1
    authentication:
      type: bearer
      token: $secrets.veeva_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: msteams-reg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → veeva-vault-clinical-document-submission.yml

Syncs digital marketing campaign performance from HubSpot to Snowflake analytics, refreshes the Power BI marketing dashboard, and posts highlights to the marketing Teams channel.

naftiko: '0.5'
info:
  label: Digital Marketing Campaign Performance Sync
  description: Syncs digital marketing campaign performance from HubSpot to Snowflake analytics, refreshes the Power BI marketing dashboard, and posts highlights to the marketing Teams channel.
  tags:
  - marketing
  - hubspot
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: sync-campaign-performance
      description: 'Sync campaign performance: pull HubSpot data, load to Snowflake, refresh dashboard, and notify marketing.'
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The HubSpot campaign ID.
      steps:
      - name: get-campaign-data
        type: call
        call: hubspot.get-campaign
        with:
          campaign_id: '{{campaign_id}}'
      - name: load-to-snowflake
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO marketing.campaign_metrics (campaign_id, impressions, clicks, conversions, synced_at) VALUES ('{{campaign_id}}', '{{get-campaign-data.counters.impressions}}', '{{get-campaign-data.counters.clicks}}', '{{get-campaign-data.counters.conversions}}', CURRENT_TIMESTAMP())
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: $secrets.marketing_dataset_id
      - name: notify-marketing
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.marketing_team_id
          channel_id: $secrets.marketing_channel_id
          body: Campaign {{campaign_id}} metrics synced. Dashboard refreshing.
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /marketing/v3/campaigns/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refresh
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → digital-marketing-campaign-performance-sync.yml

Retrieves pending SAP Concur expense reports above threshold and routes each to the employee's manager in Teams for one-click review and approval.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Approval Routing
  description: Retrieves pending SAP Concur expense reports above threshold and routes each to the employee's manager in Teams for one-click review and approval.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: finance-expenses
    port: 8080
    tools:
    - name: route-expense-approval
      description: Given an SAP Concur expense report ID and approver email, retrieve report details and send an approval notification to the manager in Teams.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID to route for approval.
      - name: approver_email
        in: body
        type: string
        description: The Teams UPN of the approving manager.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: notify-approver
        type: call
        call: msteams-expense.post-message
        with:
          recipient: '{{approver_email}}'
          message: 'Expense report {{report_id}} from {{get-report.employeeName}} — Total: {{get-report.total}} {{get-report.currency}}. Please review in 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/reportdigests/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: msteams-expense
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-report-approval-routing.yml

Retrieves a SAP plant maintenance order by number, returning equipment details, work center, and order status for manufacturing operations.

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

Processes master data change requests by validating against SAP MDG rules, creating a ServiceNow approval workflow, and logging the change in Snowflake.

naftiko: '0.5'
info:
  label: Master Data Governance Change Request
  description: Processes master data change requests by validating against SAP MDG rules, creating a ServiceNow approval workflow, and logging the change in Snowflake.
  tags:
  - data-governance
  - sap
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: mdg-change
    port: 8080
    tools:
    - name: process-mdg-change
      description: 'Process master data change: validate SAP rules, create approval workflow, and log change.'
      inputParameters:
      - name: entity_type
        in: body
        type: string
        description: The master data entity type (material, vendor, customer).
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      - name: change_description
        in: body
        type: string
        description: Description of the requested change.
      steps:
      - name: validate-entity
        type: call
        call: sap-mdg.validate-change
        with:
          entity_type: '{{entity_type}}'
          entity_id: '{{entity_id}}'
      - name: create-approval
        type: call
        call: servicenow.create-change
        with:
          short_description: 'MDG change: {{entity_type}} {{entity_id}}'
          description: '{{change_description}}'
          category: master_data
      - name: log-change
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO governance.mdg_changes (entity_type, entity_id, description, approval_ticket, requested_at) VALUES ('{{entity_type}}', '{{entity_id}}', '{{change_description}}', '{{create-approval.number}}', CURRENT_TIMESTAMP())
  consumes:
  - type: http
    namespace: sap-mdg
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: validation
      path: /A_BusinessPartner
      operations:
      - name: validate-change
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.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: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → master-data-governance-change-request.yml

Retrieves approved job requisition details from Workday and publishes the role to LinkedIn, enabling faster candidate sourcing for Sanofi positions.

naftiko: '0.5'
info:
  label: LinkedIn Job Posting Publication
  description: Retrieves approved job requisition details from Workday and publishes the role to LinkedIn, enabling faster candidate sourcing for Sanofi positions.
  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 approved details and publish a structured job posting to Sanofi'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: Sanofi's LinkedIn company page ID.
      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: /sanofi/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: linkedin-jobs
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings
      operations:
      - name: create-job-posting
        method: POST
Open in Framework → View in Fleet → linkedin-job-posting-publication.yml

Tracks medical publication milestones by querying Veeva Vault for manuscript status, updating Snowflake tracking tables, and alerting the medical affairs team via Teams.

naftiko: '0.5'
info:
  label: Medical Affairs Publication Tracker
  description: Tracks medical publication milestones by querying Veeva Vault for manuscript status, updating Snowflake tracking tables, and alerting the medical affairs team via Teams.
  tags:
  - medical-affairs
  - veeva
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: medaffairs-pubs
    port: 8080
    tools:
    - name: track-publication
      description: 'Track publication progress: check Veeva Vault manuscript status, update Snowflake tracker, and notify medical affairs.'
      inputParameters:
      - name: manuscript_id
        in: body
        type: string
        description: The Veeva Vault manuscript document ID.
      steps:
      - name: get-manuscript
        type: call
        call: veeva-vault.get-document
        with:
          doc_id: '{{manuscript_id}}'
      - name: update-tracker
        type: call
        call: snowflake.run-query
        with:
          statement: UPDATE medical_affairs.publication_tracker SET status='{{get-manuscript.status__v}}', updated_at=CURRENT_TIMESTAMP() WHERE manuscript_id='{{manuscript_id}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.medaffairs_team_id
          channel_id: $secrets.medaffairs_channel_id
          body: 'Manuscript {{manuscript_id}} status: {{get-manuscript.status__v}}. Tracker updated.'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → medical-affairs-publication-tracker.yml

When an employee transfers departments in Workday, updates their cost center in SAP, reassigns ServiceNow groups, and notifies both old and new managers via Teams.

naftiko: '0.5'
info:
  label: Employee Transfer Cross-System Update
  description: When an employee transfers departments in Workday, updates their cost center in SAP, reassigns ServiceNow groups, and notifies both old and new managers via Teams.
  tags:
  - hr
  - workday
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-transfer
    port: 8080
    tools:
    - name: process-transfer
      description: 'Process employee department transfer: update SAP cost center, reassign ServiceNow groups, and notify managers.'
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      - name: new_department
        in: body
        type: string
        description: The new department name.
      - name: new_cost_center
        in: body
        type: string
        description: The new SAP cost center.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: update-cost-center
        type: call
        call: sap-hr.update-cost-center
        with:
          employee_id: '{{get-employee.sapEmployeeId}}'
          cost_center: '{{new_cost_center}}'
      - name: update-servicenow-group
        type: call
        call: servicenow.update-user
        with:
          user_name: '{{get-employee.workEmail}}'
          department: '{{new_department}}'
      - name: notify-managers
        type: call
        call: msteams.post-message
        with:
          recipient: '{{get-employee.manager.email}}'
          message: '{{get-employee.displayName}} has transferred to {{new_department}}. SAP cost center updated to {{new_cost_center}}.'
  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: /sanofi/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: sap-hr
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: employees
      path: /A_BusinessPartner
      operations:
      - name: update-cost-center
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: users
      path: /table/sys_user
      operations:
      - name: update-user
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → employee-transfer-cross-system-update.yml

Retrieves base pay, bonus target, and pay grade for a Workday employee by worker ID, for total rewards inquiries.

naftiko: '0.5'
info:
  label: Workday Compensation Detail Lookup
  description: Retrieves base pay, bonus target, and pay grade for a Workday employee by worker ID, for total rewards inquiries.
  tags:
  - hr
  - compensation
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: get-compensation
      description: Look up Workday compensation details by worker ID. Returns base pay, bonus target percentage, and pay grade.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker ID.
      call: workday.get-compensation
      with:
        worker_id: '{{worker_id}}'
      outputParameters:
      - name: base_pay
        type: string
        mapping: $.compensation.basePay
      - name: bonus_target
        type: string
        mapping: $.compensation.bonusTarget
      - name: pay_grade
        type: string
        mapping: $.compensation.payGrade
  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: /sanofi/workers/{{worker_id}}/compensation
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-compensation
        method: GET
Open in Framework → View in Fleet → workday-compensation-detail-lookup.yml

Performs periodic GxP system access reviews by pulling user lists from Microsoft Entra, cross-referencing with Workday active employees, and creating ServiceNow tasks for orphaned accounts.

naftiko: '0.5'
info:
  label: GxP System Access Review Workflow
  description: Performs periodic GxP system access reviews by pulling user lists from Microsoft Entra, cross-referencing with Workday active employees, and creating ServiceNow tasks for orphaned accounts.
  tags:
  - compliance
  - gxp
  - microsoft-entra
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance-access-review
    port: 8080
    tools:
    - name: review-gxp-access
      description: 'Review GxP system access: pull Entra users, validate against Workday, and create tasks for orphaned accounts.'
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Microsoft Entra application ID for the GxP system.
      steps:
      - name: get-app-users
        type: call
        call: msgraph.get-app-users
        with:
          app_id: '{{application_id}}'
      - name: validate-employees
        type: call
        call: workday.get-active-workers
        with:
          department: all
      - name: create-review-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'GxP access review: orphaned accounts found for app {{application_id}}'
          category: compliance_review
          assigned_group: GxP_Compliance
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: app-role-assignments
      path: /servicePrincipals/{{app_id}}/appRoleAssignedTo
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-users
        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: /sanofi/workers
      operations:
      - name: get-active-workers
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → gxp-system-access-review-workflow.yml

Assigns the appropriate Microsoft 365 license SKU to a newly provisioned Sanofi employee in Microsoft Entra ID based on their role and department.

naftiko: '0.5'
info:
  label: Microsoft Entra User License Assignment
  description: Assigns the appropriate Microsoft 365 license SKU to a newly provisioned Sanofi employee in Microsoft Entra ID based on their role and department.
  tags:
  - identity
  - microsoft-365
  - azure
  - hr
  - license-management
capability:
  exposes:
  - type: mcp
    namespace: identity-licensing
    port: 8080
    tools:
    - name: assign-user-license
      description: Given a user principal name and Microsoft 365 license SKU ID, assign the license in Entra ID. Use after provisioning a new Sanofi employee account.
      inputParameters:
      - name: user_upn
        in: body
        type: string
        description: The UPN of the newly provisioned employee (e.g., firstname.lastname@sanofi.com).
      - name: sku_id
        in: body
        type: string
        description: The Microsoft 365 license SKU GUID to assign.
      call: msgraph-lic.assign-license
      with:
        userPrincipalName: '{{user_upn}}'
        skuId: '{{sku_id}}'
      outputParameters:
      - name: assigned_licenses
        type: array
        mapping: $.assignedLicenses
  consumes:
  - type: http
    namespace: msgraph-lic
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: user-licenses
      path: /users/{{userPrincipalName}}/assignLicense
      inputParameters:
      - name: userPrincipalName
        in: path
      operations:
      - name: assign-license
        method: POST
Open in Framework → View in Fleet → microsoft-entra-user-license-assignment.yml

Retrieves contract details from SAP Ariba by contract ID, returning effective dates, supplier name, and contract value.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Detail Lookup
  description: Retrieves contract details from SAP Ariba by contract ID, returning effective dates, supplier name, and contract value.
  tags:
  - procurement
  - sap-ariba
capability:
  exposes:
  - type: mcp
    namespace: procurement-contracts
    port: 8080
    tools:
    - name: get-contract-detail
      description: Look up a SAP Ariba contract by ID. Returns effective date, expiry date, supplier, and total contract value.
      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: effective_date
        type: string
        mapping: $.effectiveDate
      - name: expiry_date
        type: string
        mapping: $.expirationDate
      - name: supplier
        type: string
        mapping: $.supplier.name
      - name: contract_value
        type: string
        mapping: $.amount.value
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract-compliance/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
Open in Framework → View in Fleet → sap-ariba-contract-detail-lookup.yml

Performs automated three-way matching of a vendor invoice against the SAP purchase order and goods receipt, then routes discrepancies to ServiceNow for resolution.

naftiko: '0.5'
info:
  label: Vendor Invoice Three-Way Match
  description: Performs automated three-way matching of a vendor invoice against the SAP purchase order and goods receipt, then routes discrepancies to ServiceNow for resolution.
  tags:
  - finance
  - procurement
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: finance-ap
    port: 8080
    tools:
    - name: three-way-match
      description: 'Perform three-way match for a vendor invoice: retrieve PO, check goods receipt, compare amounts, and create a ServiceNow ticket if discrepancies exist.'
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The vendor invoice number.
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      steps:
      - name: get-po
        type: call
        call: sap-po.get-po
        with:
          po_number: '{{po_number}}'
      - name: get-receipt
        type: call
        call: sap-gr.get-receipt
        with:
          po_number: '{{po_number}}'
      - name: get-invoice
        type: call
        call: sap-fi.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: create-discrepancy-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: Invoice {{invoice_number}} three-way match discrepancy for PO {{po_number}}
          category: finance_ap
          assigned_group: AP_Resolution
  consumes:
  - type: http
    namespace: sap-po
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: sap-gr
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: material-documents
      path: /A_MaterialDocumentHeader
      operations:
      - name: get-receipt
        method: GET
  - type: http
    namespace: sap-fi
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_SupplierInvoice('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → vendor-invoice-three-way-match.yml

Runs safety signal detection queries in Snowflake, creates a safety review record in Veeva Vault, and escalates findings to the pharmacovigilance team via Teams.

naftiko: '0.5'
info:
  label: Pharmacovigilance Signal Detection Alert
  description: Runs safety signal detection queries in Snowflake, creates a safety review record in Veeva Vault, and escalates findings to the pharmacovigilance team via Teams.
  tags:
  - pharmacovigilance
  - snowflake
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pv-signal-detection
    port: 8080
    tools:
    - name: detect-safety-signal
      description: 'Detect safety signals: query adverse event data, create review record, and escalate to PV team.'
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The drug product name.
      - name: signal_type
        in: body
        type: string
        description: The type of safety signal to detect.
      steps:
      - name: run-signal-query
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT event_type, COUNT(*) as cnt FROM pv.adverse_events WHERE product_name='{{product_name}}' AND reported_date > DATEADD(month, -3, CURRENT_DATE()) GROUP BY event_type HAVING cnt > 10
      - name: create-review-record
        type: call
        call: veeva-vault.create-document
        with:
          type: safety_signal_review
          product: '{{product_name}}'
          signal_type: '{{signal_type}}'
      - name: escalate-to-pv
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.pv_team_id
          channel_id: $secrets.pv_channel_id
          body: 'Safety signal detected for {{product_name}}. Signal type: {{signal_type}}. Review record: {{create-review-record.id}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → pharmacovigilance-signal-detection-alert.yml

Advances a ServiceNow change request to CAB approval state and notifies the requester in Teams with review timeline and next steps.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Approval
  description: Advances a ServiceNow change request to CAB approval state and notifies the requester in Teams with review timeline and next steps.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: itsm-change
    port: 8080
    tools:
    - name: submit-change-for-approval
      description: Given a ServiceNow change request number, advance it to CAB approval state and notify the requester in Teams.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number (e.g., CHG0099887).
      - name: requester_email
        in: body
        type: string
        description: The Teams UPN of the change requester.
      steps:
      - name: get-change
        type: call
        call: servicenow-chg.get-change
        with:
          number: '{{change_number}}'
      - name: submit-approval
        type: call
        call: servicenow-chg.update-change
        with:
          sys_id: '{{get-change.sys_id}}'
          state: approval
      - name: notify-requester
        type: call
        call: msteams-chg.post-message
        with:
          recipient: '{{requester_email}}'
          message: Your change request {{change_number}} has been submitted for CAB approval.
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://sanofi.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
      - name: update-change
        method: PATCH
  - type: http
    namespace: msteams-chg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-approval.yml

When a sales territory is reorganized, updates Veeva CRM account assignments for the affected medical representatives and notifies the commercial ops team in Teams.

naftiko: '0.5'
info:
  label: Veeva CRM Territory Assignment Update
  description: When a sales territory is reorganized, updates Veeva CRM account assignments for the affected medical representatives and notifies the commercial ops team in Teams.
  tags:
  - crm
  - veeva
  - microsoft-teams
  - sales-ops
  - pharma
  - territory-management
capability:
  exposes:
  - type: mcp
    namespace: crm-territory
    port: 8080
    tools:
    - name: update-territory-assignment
      description: Given a Veeva CRM territory ID and new representative ID, update all account assignments in the territory and notify the commercial operations team in Teams.
      inputParameters:
      - name: territory_id
        in: body
        type: string
        description: The Veeva CRM territory ID being reassigned.
      - name: new_rep_id
        in: body
        type: string
        description: The Veeva CRM user ID of the new medical representative.
      - name: effective_date
        in: body
        type: string
        description: The effective date of the territory change in YYYY-MM-DD format.
      steps:
      - name: get-territory
        type: call
        call: veeva-crm.get-territory
        with:
          territory_id: '{{territory_id}}'
      - name: update-assignment
        type: call
        call: veeva-crm.update-territory-rep
        with:
          territory_id: '{{territory_id}}'
          rep_id: '{{new_rep_id}}'
          effectiveDate: '{{effective_date}}'
      - name: notify-commercial-ops
        type: call
        call: msteams-crm.post-message
        with:
          channel: commercial-operations
          message: Territory {{territory_id}} ({{get-territory.name}}) reassigned to rep {{new_rep_id}} effective {{effective_date}}.
  consumes:
  - type: http
    namespace: veeva-crm
    baseUri: https://sanofi.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.veeva_crm_token
    resources:
    - name: territories
      path: /sobjects/Territory2/{{territory_id}}
      inputParameters:
      - name: territory_id
        in: path
      operations:
      - name: get-territory
        method: GET
      - name: update-territory-rep
        method: PATCH
  - type: http
    namespace: msteams-crm
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → veeva-crm-territory-assignment-update.yml

Orchestrates inter-plant stock transfers by creating transfer orders in SAP, updating inventory projections in Snowflake, and notifying warehouse managers via Teams.

naftiko: '0.5'
info:
  label: SAP Warehouse Stock Transfer Orchestrator
  description: Orchestrates inter-plant stock transfers by creating transfer orders in SAP, updating inventory projections in Snowflake, and notifying warehouse managers via Teams.
  tags:
  - supply-chain
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: scm-stock-transfer
    port: 8080
    tools:
    - name: transfer-stock
      description: 'Orchestrate stock transfer: create SAP transfer order, update projections, and notify managers.'
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: source_plant
        in: body
        type: string
        description: The source plant code.
      - name: target_plant
        in: body
        type: string
        description: The target plant code.
      - name: quantity
        in: body
        type: string
        description: The transfer quantity.
      steps:
      - name: create-transfer-order
        type: call
        call: sap-mm.create-transfer
        with:
          material: '{{material_number}}'
          source: '{{source_plant}}'
          target: '{{target_plant}}'
          quantity: '{{quantity}}'
      - name: update-projections
        type: call
        call: snowflake.run-query
        with:
          statement: UPDATE supply_chain.inventory_projections SET projected_qty=projected_qty-{{quantity}} WHERE material='{{material_number}}' AND plant='{{source_plant}}'
      - name: notify-managers
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.warehouse_team_id
          channel_id: $secrets.warehouse_channel_id
          body: 'Stock transfer initiated: {{quantity}} units of {{material_number}} from {{source_plant}} to {{target_plant}}. Transfer order: {{create-transfer-order.order_id}}.'
  consumes:
  - type: http
    namespace: sap-mm
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: transfers
      path: /StockTransferOrder
      operations:
      - name: create-transfer
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-warehouse-stock-transfer-orchestrator.yml

When a supplier invoice is received in SAP Ariba, validates it against the matched PO in SAP S/4HANA and posts it for payment if within tolerance.

naftiko: '0.5'
info:
  label: SAP Ariba Invoice Approval and Posting
  description: When a supplier invoice is received in SAP Ariba, validates it against the matched PO in SAP S/4HANA and posts it for payment if within tolerance.
  tags:
  - finance
  - procurement
  - sap-ariba
  - sap
  - invoice
  - approval
capability:
  exposes:
  - type: mcp
    namespace: finance-invoicing
    port: 8080
    tools:
    - name: process-invoice
      description: Given an SAP Ariba invoice ID, fetch details, validate against the SAP S/4HANA PO, and post for payment if within the approved tolerance threshold.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The SAP Ariba invoice ID to process.
      - name: tolerance_pct
        in: body
        type: number
        description: Acceptable variance percentage between invoice and PO amount (e.g., 2.0).
      steps:
      - name: get-invoice
        type: call
        call: ariba-inv.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-po
        type: call
        call: sap-inv.get-po
        with:
          po_number: '{{get-invoice.purchaseOrderId}}'
      - name: post-payment
        type: call
        call: sap-inv.post-invoice
        with:
          po_number: '{{get-invoice.purchaseOrderId}}'
          invoice_amount: '{{get-invoice.totalAmount}}'
          vendor_id: '{{get-po.vendorId}}'
  consumes:
  - type: http
    namespace: ariba-inv
    baseUri: https://openapi.ariba.com/api/invoice/v1
    authentication:
      type: apikey
      key: APIKey
      value: $secrets.ariba_api_key
      placement: header
    resources:
    - name: invoices
      path: /invoices/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap-inv
    baseUri: https://sanofi-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
    - name: invoice-postings
      path: /A_SupplierInvoice
      operations:
      - name: post-invoice
        method: POST
Open in Framework → View in Fleet → sap-ariba-invoice-approval-and-posting.yml

Tracks mandatory training compliance by pulling completion data from Workday Learning, comparing against requirements in Snowflake, and notifying managers of non-compliant employees via Teams.

naftiko: '0.5'
info:
  label: Learning Management Training Compliance Tracker
  description: Tracks mandatory training compliance by pulling completion data from Workday Learning, comparing against requirements in Snowflake, and notifying managers of non-compliant employees via Teams.
  tags:
  - hr
  - compliance
  - workday
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-training-compliance
    port: 8080
    tools:
    - name: track-training-compliance
      description: 'Track training compliance: pull completions, compare requirements, and notify managers.'
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to check.
      - name: training_code
        in: body
        type: string
        description: The mandatory training course code.
      steps:
      - name: get-completions
        type: call
        call: workday.get-training-completions
        with:
          department: '{{department}}'
          course_code: '{{training_code}}'
      - name: check-requirements
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT employee_id, due_date FROM hr.training_requirements WHERE department='{{department}}' AND course_code='{{training_code}}' AND completed=false
      - name: notify-managers
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.hr_team_id
          channel_id: $secrets.hr_compliance_channel_id
          body: 'Training compliance check for {{training_code}} in {{department}}: review non-compliant employees.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /sanofi/learning/completions
      operations:
      - name: get-training-completions
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → learning-management-training-compliance-tracker.yml

When Datadog detects API rate limit breaches, creates a Jira investigation ticket, logs the event in Snowflake, and alerts the platform engineering team via Teams.

naftiko: '0.5'
info:
  label: API Gateway Rate Limit Breach Handler
  description: When Datadog detects API rate limit breaches, creates a Jira investigation ticket, logs the event in Snowflake, and alerts the platform engineering team via Teams.
  tags:
  - platform-engineering
  - datadog
  - jira
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: platform-api-health
    port: 8080
    tools:
    - name: handle-rate-limit-breach
      description: 'Handle API rate limit breach: create Jira ticket, log event, and alert platform team.'
      inputParameters:
      - name: api_name
        in: body
        type: string
        description: The API name that breached rate limits.
      - name: client_id
        in: body
        type: string
        description: The client ID that exceeded the limit.
      steps:
      - name: get-breach-details
        type: call
        call: datadog.get-events
        with:
          tags: api:{{api_name}},client:{{client_id}}
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: PLATFORM
          summary: 'API rate limit breach: {{api_name}} by {{client_id}}'
          issue_type: Task
      - name: log-event
        type: call
        call: snowflake.run-query
        with:
          statement: INSERT INTO platform.rate_limit_breaches (api_name, client_id, ticket_key, detected_at) VALUES ('{{api_name}}', '{{client_id}}', '{{create-ticket.key}}', CURRENT_TIMESTAMP())
      - name: alert-platform
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.platform_team_id
          channel_id: $secrets.platform_channel_id
          body: 'Rate limit breach: {{api_name}} by client {{client_id}}. Jira: {{create-ticket.key}}.'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: get-events
        method: GET
  - type: http
    namespace: jira
    baseUri: https://sanofi.atlassian.net/rest/api/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: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → api-gateway-rate-limit-breach-handler.yml

Checks the status of a Databricks job run by run ID, returning state, start time, and duration for data pipeline monitoring.

naftiko: '0.5'
info:
  label: Databricks Job Run Status Lookup
  description: Checks the status of a Databricks job run by run ID, returning state, start time, and duration for data pipeline monitoring.
  tags:
  - data-engineering
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: data-pipeline
    port: 8080
    tools:
    - name: get-job-run-status
      description: Check status of a Databricks job run by run ID. Returns state, start time, and execution duration.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Databricks job run ID.
      call: databricks.get-run
      with:
        run_id: '{{run_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.state.life_cycle_state
      - name: start_time
        type: string
        mapping: $.start_time
      - name: duration_ms
        type: integer
        mapping: $.execution_duration
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://sanofi.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: job-runs
      path: /jobs/runs/get
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → databricks-job-run-status-lookup.yml

Retrieves user account status from Microsoft Entra ID by UPN, returning account enabled state, last sign-in, and assigned licenses.

naftiko: '0.5'
info:
  label: Microsoft Entra User Status Lookup
  description: Retrieves user account status from Microsoft Entra ID by UPN, returning account enabled state, last sign-in, and assigned licenses.
  tags:
  - identity
  - microsoft-entra
capability:
  exposes:
  - type: mcp
    namespace: identity-mgmt
    port: 8080
    tools:
    - name: get-user-status
      description: Look up a Microsoft Entra user by UPN. Returns account enabled flag, last sign-in time, and license assignments.
      inputParameters:
      - name: user_principal_name
        in: body
        type: string
        description: The user principal name (email).
      call: msgraph.get-user
      with:
        upn: '{{user_principal_name}}'
      outputParameters:
      - name: account_enabled
        type: boolean
        mapping: $.accountEnabled
      - name: last_sign_in
        type: string
        mapping: $.signInActivity.lastSignInDateTime
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → microsoft-entra-user-status-lookup.yml

Retrieves SAP S/4HANA vendor master record details for a given vendor ID, surfacing payment terms, compliance flags, and company information.

naftiko: '0.5'
info:
  label: SAP Vendor Master Data Lookup
  description: Retrieves SAP S/4HANA vendor master record details for a given vendor ID, surfacing payment terms, compliance flags, and company information.
  tags:
  - finance
  - procurement
  - sap
  - vendor-management
capability:
  exposes:
  - type: mcp
    namespace: erp-vendor
    port: 8080
    tools:
    - name: get-vendor-record
      description: Look up a SAP S/4HANA vendor master record by vendor ID. Returns company name, payment terms, and compliance status. Use before approving new supplier engagements.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The SAP vendor (supplier) ID to look up.
      call: sap-vendor.get-vendor
      with:
        vendor_id: '{{vendor_id}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.d.BusinessPartnerFullName
      - name: payment_terms
        type: string
        mapping: $.d.PaymentTerms
      - name: currency
        type: string
        mapping: $.d.Currency
  consumes:
  - type: http
    namespace: sap-vendor
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_Supplier('{{vendor_id}}')
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
        outputRawFormat: xml
Open in Framework → View in Fleet → sap-vendor-master-data-lookup.yml

Monitors SAP inventory levels, triggers a purchase requisition when stock falls below threshold, and alerts the supply chain team via Teams.

naftiko: '0.5'
info:
  label: Supply Chain Inventory Reorder Trigger
  description: Monitors SAP inventory levels, triggers a purchase requisition when stock falls below threshold, and alerts the supply chain team via Teams.
  tags:
  - supply-chain
  - sap
  - sap-ariba
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: scm-reorder
    port: 8080
    tools:
    - name: trigger-reorder
      description: Check inventory levels and trigger reorder if below threshold.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      steps:
      - name: check-inventory
        type: call
        call: sap-mm.get-stock
        with:
          material: '{{material_number}}'
          plant: '{{plant}}'
      - name: create-requisition
        type: call
        call: ariba.create-requisition
        with:
          material: '{{material_number}}'
          quantity: '{{check-inventory.reorder_quantity}}'
          plant: '{{plant}}'
      - name: notify-supply-chain
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.scm_team_id
          channel_id: $secrets.scm_channel_id
          body: Reorder triggered for material {{material_number}} at plant {{plant}}. Requisition {{create-requisition.id}} created.
  consumes:
  - type: http
    namespace: sap-mm
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-stock
        method: GET
  - 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: post-channel-message
        method: POST
Open in Framework → View in Fleet → supply-chain-inventory-reorder-trigger.yml

Plans infrastructure capacity by pulling Datadog metrics, comparing against thresholds in Snowflake, and creating ServiceNow capacity requests for over-utilized resources.

naftiko: '0.5'
info:
  label: IT Infrastructure Capacity Planning
  description: Plans infrastructure capacity by pulling Datadog metrics, comparing against thresholds in Snowflake, and creating ServiceNow capacity requests for over-utilized resources.
  tags:
  - infrastructure
  - datadog
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: infra-capacity
    port: 8080
    tools:
    - name: plan-capacity
      description: 'Plan infrastructure capacity: pull metrics, compare thresholds, and create capacity requests.'
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The service name to evaluate.
      steps:
      - name: get-metrics
        type: call
        call: datadog.get-metrics
        with:
          service: '{{service_name}}'
          metric: system.cpu.user
      - name: check-thresholds
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT cpu_threshold, memory_threshold FROM infrastructure.capacity_thresholds WHERE service_name='{{service_name}}'
      - name: create-capacity-request
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Capacity planning: {{service_name}} approaching resource limits'
          category: infrastructure_capacity
          assigned_group: Cloud_Infrastructure
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → it-infrastructure-capacity-planning.yml

Generates periodic safety update reports by pulling aggregate data from Snowflake, creating the report document in Veeva Vault, and notifying the drug safety team via Teams.

naftiko: '0.5'
info:
  label: Drug Safety Periodic Report Generation
  description: Generates periodic safety update reports by pulling aggregate data from Snowflake, creating the report document in Veeva Vault, and notifying the drug safety team via Teams.
  tags:
  - pharmacovigilance
  - snowflake
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pv-periodic-report
    port: 8080
    tools:
    - name: generate-safety-report
      description: 'Generate periodic safety report: aggregate data, create Veeva document, and notify safety team.'
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: The drug product name.
      - name: report_period
        in: body
        type: string
        description: The reporting period (e.g., 2026-Q1).
      steps:
      - name: aggregate-safety-data
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT event_type, COUNT(*) as event_count, severity FROM pv.adverse_events WHERE product_name='{{product_name}}' AND report_period='{{report_period}}' GROUP BY event_type, severity
      - name: create-report-doc
        type: call
        call: veeva-vault.create-document
        with:
          type: periodic_safety_report
          product: '{{product_name}}'
          period: '{{report_period}}'
      - name: notify-safety-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.pv_team_id
          channel_id: $secrets.pv_channel_id
          body: 'Periodic safety report for {{product_name}} ({{report_period}}) generated. Document ID: {{create-report-doc.id}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → drug-safety-periodic-report-generation.yml

When a critical vulnerability is detected, creates a ServiceNow security incident, assigns it to the responsible team based on CMDB ownership, and alerts the security channel in Teams.

naftiko: '0.5'
info:
  label: IT Security Vulnerability Remediation
  description: When a critical vulnerability is detected, creates a ServiceNow security incident, assigns it to the responsible team based on CMDB ownership, and alerts the security channel in Teams.
  tags:
  - security
  - servicenow
  - microsoft-teams
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: security-vuln
    port: 8080
    tools:
    - name: remediate-vulnerability
      description: 'Orchestrate vulnerability remediation: look up asset owner in CMDB, create security incident, and alert the security team.'
      inputParameters:
      - name: cve_id
        in: body
        type: string
        description: The CVE identifier.
      - name: asset_tag
        in: body
        type: string
        description: The affected asset tag.
      steps:
      - name: get-asset-owner
        type: call
        call: servicenow.get-ci
        with:
          sysparm_query: asset_tag={{asset_tag}}
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Critical vulnerability {{cve_id}} on {{asset_tag}}
          category: security
          assigned_group: '{{get-asset-owner.support_group}}'
          priority: '1'
      - name: alert-security-channel
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.security_team_id
          channel_id: $secrets.security_channel_id
          body: 'CRITICAL: {{cve_id}} detected on {{asset_tag}}. Incident {{create-security-incident.number}} created and assigned to {{get-asset-owner.support_group}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://sanofi.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb-ci
      path: /table/cmdb_ci
      operations:
      - name: get-ci
        method: GET
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → it-security-vulnerability-remediation.yml

Tracks clinical trial site activation by checking Veeva Vault for regulatory documents, verifying site readiness in Snowflake, and updating the project manager via Teams.

naftiko: '0.5'
info:
  label: Clinical Site Activation Tracker
  description: Tracks clinical trial site activation by checking Veeva Vault for regulatory documents, verifying site readiness in Snowflake, and updating the project manager via Teams.
  tags:
  - clinical
  - veeva
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: clinical-site-mgmt
    port: 8080
    tools:
    - name: check-site-activation
      description: 'Check site activation readiness: verify regulatory documents in Veeva, check site milestones in Snowflake, and notify the project manager.'
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The clinical trial site identifier.
      - name: trial_id
        in: body
        type: string
        description: The clinical trial ID.
      steps:
      - name: check-regulatory-docs
        type: call
        call: veeva-vault.query-documents
        with:
          query: SELECT id, status__v FROM documents WHERE site_id__v = '{{site_id}}' AND type__v = 'regulatory_essential'
      - name: check-milestones
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT milestone_name, status FROM clinical.site_milestones WHERE site_id = '{{site_id}}' AND trial_id = '{{trial_id}}'
      - name: notify-pm
        type: call
        call: msteams.post-message
        with:
          recipient: $secrets.clinical_pm_email
          message: 'Site {{site_id}} for trial {{trial_id}}: regulatory docs checked, milestones reviewed. Ready for activation assessment.'
  consumes:
  - type: http
    namespace: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-documents
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /chats/{{chat_id}}/messages
      inputParameters:
      - name: chat_id
        in: path
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → clinical-site-activation-tracker.yml

Optimizes production scheduling by pulling current orders from SAP PP, analyzing capacity in Snowflake, and updating the manufacturing team via Teams.

naftiko: '0.5'
info:
  label: SAP Production Order Scheduling Optimizer
  description: Optimizes production scheduling by pulling current orders from SAP PP, analyzing capacity in Snowflake, and updating the manufacturing team via Teams.
  tags:
  - manufacturing
  - sap
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mfg-scheduling
    port: 8080
    tools:
    - name: optimize-schedule
      description: 'Optimize production scheduling: pull SAP orders, analyze capacity, and update team.'
      inputParameters:
      - name: plant
        in: body
        type: string
        description: The SAP plant code.
      - name: production_line
        in: body
        type: string
        description: The production line identifier.
      steps:
      - name: get-production-orders
        type: call
        call: sap-pp.get-orders
        with:
          plant: '{{plant}}'
          production_line: '{{production_line}}'
      - name: analyze-capacity
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT available_hours, utilization_pct FROM manufacturing.capacity WHERE plant='{{plant}}' AND line='{{production_line}}'
      - name: notify-mfg-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.mfg_team_id
          channel_id: $secrets.mfg_channel_id
          body: Production schedule optimized for plant {{plant}}, line {{production_line}}. Capacity utilization analyzed.
  consumes:
  - type: http
    namespace: sap-pp
    baseUri: https://sanofi-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder_2
      operations:
      - name: get-orders
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-production-order-scheduling-optimizer.yml

Tracks patent filing status by querying Snowflake IP databases, updating Veeva Vault document metadata, and notifying the IP legal team via Teams.

naftiko: '0.5'
info:
  label: R&D Patent Filing Status Tracker
  description: Tracks patent filing status by querying Snowflake IP databases, updating Veeva Vault document metadata, and notifying the IP legal team via Teams.
  tags:
  - research
  - legal
  - snowflake
  - veeva
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: rd-ip-tracking
    port: 8080
    tools:
    - name: track-patent-filing
      description: 'Track patent filing status: query IP database, update document metadata, and notify legal team.'
      inputParameters:
      - name: patent_id
        in: body
        type: string
        description: The patent application identifier.
      steps:
      - name: get-filing-status
        type: call
        call: snowflake.run-query
        with:
          statement: SELECT filing_date, jurisdiction, status, examiner_notes FROM ip.patent_filings WHERE patent_id='{{patent_id}}'
      - name: update-vault-doc
        type: call
        call: veeva-vault.update-document
        with:
          doc_id: '{{patent_id}}'
          status: '{{get-filing-status.status}}'
      - name: notify-ip-team
        type: call
        call: msteams.post-channel-message
        with:
          team_id: $secrets.ip_team_id
          channel_id: $secrets.ip_channel_id
          body: 'Patent {{patent_id}} filing update: Status is {{get-filing-status.status}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sanofi.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: veeva-vault
    baseUri: https://sanofi.veevavault.com/api/v24.1
    authentication:
      type: bearer
      token: $secrets.veeva_vault_token
    resources:
    - name: documents
      path: /objects/documents/{{doc_id}}
      inputParameters:
      - name: doc_id
        in: path
      operations:
      - name: update-document
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → r-d-patent-filing-status-tracker.yml

Retrieves the full traceability record for a medical device lot number, including manufacturing date, components, and distribution history.

naftiko: '0.5'
info:
  label: Device Lot Traceability Lookup
  description: Retrieves the full traceability record for a medical device lot number, including manufacturing date, components, and distribution history.
  tags:
  - manufacturing
  - traceability
  - quality
capability:
  exposes:
  - type: mcp
    namespace: traceability
    port: 8080
    tools:
    - name: get-lot-traceability
      description: Look up the full traceability record for a device lot number.
      inputParameters:
      - name: lot_number
        in: body
        type: string
        description: The manufacturing lot number.
      call: manufacturing-api.get-lot
      with:
        lot: '{{lot_number}}'
  consumes:
  - type: http
    namespace: manufacturing-api
    baseUri: https://api.stryker.com/manufacturing/v1
    authentication:
      type: bearer
      token: $secrets.stryker_manufacturing_token
    resources:
    - name: lots
      path: /lots/{{lot}}/traceability
      inputParameters:
      - name: lot
        in: path
      operations:
      - name: get-lot
        method: GET
Open in Framework → View in Fleet → device-lot-traceability-lookup.yml

Monitors post-market device performance by aggregating complaint data from Salesforce and adverse event reports, generating trend reports.

naftiko: '0.5'
info:
  label: Post-Market Surveillance Pipeline
  description: Monitors post-market device performance by aggregating complaint data from Salesforce and adverse event reports, generating trend reports.
  tags:
  - regulatory
  - salesforce
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: run-post-market-surveillance-pipeline
      description: Monitors post-market device performance by aggregating complaint data from Salesforce and adverse event reports, generating trend 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 Post-Market Surveillance Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → post-market-surveillance-pipeline.yml

Retrieves AutoCAD design files for a product from the engineering document management system.

naftiko: '0.5'
info:
  label: AutoCAD Design File Retrieval
  description: Retrieves AutoCAD design files for a product from the engineering document management system.
  tags:
  - engineering
  - autocad
  - design
capability:
  exposes:
  - type: mcp
    namespace: engineering-docs
    port: 8080
    tools:
    - name: get-design-file
      description: Retrieve an AutoCAD design file by product and revision.
      inputParameters:
      - name: product_number
        in: body
        type: string
        description: The product part number.
      - name: revision
        in: body
        type: string
        description: The design revision (e.g., Rev A, Rev B).
      call: edms-api.get-file
      with:
        product: '{{product_number}}'
        rev: '{{revision}}'
  consumes:
  - type: http
    namespace: edms-api
    baseUri: https://api.stryker.com/edms/v1
    authentication:
      type: bearer
      token: $secrets.stryker_edms_token
    resources:
    - name: files
      path: /designs/{{product}}/revisions/{{rev}}
      inputParameters:
      - name: product
        in: path
      - name: rev
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → autocad-design-file-retrieval.yml

Retrieves website traffic metrics from Google Analytics.

naftiko: '0.5'
info:
  label: Google Analytics Traffic Report
  description: Retrieves website traffic metrics from Google Analytics.
  tags:
  - marketing
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: get-traffic-report
      description: Look up Google Analytics traffic metrics.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: The Google Analytics property ID.
      call: google-analytics.get-report
      with:
        property_id: '{{property_id}}'
  consumes:
  - type: http
    namespace: google-analytics
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: properties
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-traffic-report.yml

Retrieves regulatory submission documents from Box by file ID.

naftiko: '0.5'
info:
  label: Box Regulatory Document Viewer
  description: Retrieves regulatory submission documents from Box by file ID.
  tags:
  - regulatory
  - box
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: get-document
      description: Retrieve a regulatory document from Box by file ID.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Box file ID.
      call: box.get-file
      with:
        file_id: '{{file_id}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → box-regulatory-document-viewer.yml

Queries Dynatrace for performance problems impacting manufacturing execution systems.

naftiko: '0.5'
info:
  label: Dynatrace Manufacturing System Monitor
  description: Queries Dynatrace for performance problems impacting manufacturing execution systems.
  tags:
  - monitoring
  - dynatrace
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: mes-monitoring
    port: 8080
    tools:
    - name: get-mes-problems
      description: Get active Dynatrace problems for manufacturing systems.
      inputParameters:
      - name: severity
        in: body
        type: string
        description: Minimum severity level.
      call: dynatrace.get-problems
      with:
        severity: '{{severity}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://stryker.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems?problemSelector=status("OPEN")&severityLevel={{severity}}
      inputParameters:
      - name: severity
        in: query
      operations:
      - name: get-problems
        method: GET
Open in Framework → View in Fleet → dynatrace-manufacturing-system-monitor.yml

Retrieves sterilization validation records for a manufacturing batch from the sterilization tracking system.

naftiko: '0.5'
info:
  label: Device Sterilization Record Lookup
  description: Retrieves sterilization validation records for a manufacturing batch from the sterilization tracking system.
  tags:
  - manufacturing
  - sterilization
  - quality
capability:
  exposes:
  - type: mcp
    namespace: sterilization
    port: 8080
    tools:
    - name: get-sterilization-record
      description: Look up sterilization records for a manufacturing batch.
      inputParameters:
      - name: batch_number
        in: body
        type: string
        description: The sterilization batch number.
      call: manufacturing-api.get-sterilization
      with:
        batch: '{{batch_number}}'
  consumes:
  - type: http
    namespace: manufacturing-api
    baseUri: https://api.stryker.com/manufacturing/v1
    authentication:
      type: bearer
      token: $secrets.stryker_manufacturing_token
    resources:
    - name: sterilization
      path: /sterilization/{{batch}}
      inputParameters:
      - name: batch
        in: path
      operations:
      - name: get-sterilization
        method: GET
Open in Framework → View in Fleet → device-sterilization-record-lookup.yml

Registers a new medical device by creating entries in the UDI database, filing with the FDA GUDID system, and updating the product catalog.

naftiko: '0.5'
info:
  label: Device Registration Pipeline
  description: Registers a new medical device by creating entries in the UDI database, filing with the FDA GUDID system, and updating the product catalog.
  tags:
  - regulatory
  - product-management
  - fda
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: run-device-registration-pipeline
      description: Registers a new medical device by creating entries in the UDI database, filing with the FDA GUDID system, and updating the product catalog.
      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 Device Registration Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → device-registration-pipeline.yml

Tracks the shipment status of medical device orders from the distribution center to the customer.

naftiko: '0.5'
info:
  label: Distribution Shipment Tracker
  description: Tracks the shipment status of medical device orders from the distribution center to the customer.
  tags:
  - distribution
  - logistics
  - shipping
capability:
  exposes:
  - type: mcp
    namespace: distribution
    port: 8080
    tools:
    - name: track-shipment
      description: Track the status of a medical device shipment by tracking number.
      inputParameters:
      - name: tracking_number
        in: body
        type: string
        description: The shipment tracking number.
      call: distribution-api.get-shipment
      with:
        tracking: '{{tracking_number}}'
  consumes:
  - type: http
    namespace: distribution-api
    baseUri: https://api.stryker.com/distribution/v1
    authentication:
      type: bearer
      token: $secrets.stryker_distribution_token
    resources:
    - name: shipments
      path: /shipments/{{tracking}}
      inputParameters:
      - name: tracking
        in: path
      operations:
      - name: get-shipment
        method: GET
Open in Framework → View in Fleet → distribution-shipment-tracker.yml

Retrieves the execution status of a validation protocol (IQ/OQ/PQ) from the validation management system.

naftiko: '0.5'
info:
  label: Validation Protocol Status
  description: Retrieves the execution status of a validation protocol (IQ/OQ/PQ) from the validation management system.
  tags:
  - quality
  - validation
  - manufacturing
capability:
  exposes:
  - type: mcp
    namespace: validation
    port: 8080
    tools:
    - name: get-validation-status
      description: Get the execution status of a validation protocol.
      inputParameters:
      - name: protocol_number
        in: body
        type: string
        description: The validation protocol number.
      call: qms-api.get-validation
      with:
        protocol: '{{protocol_number}}'
  consumes:
  - type: http
    namespace: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: validations
      path: /validations/{{protocol}}
      inputParameters:
      - name: protocol
        in: path
      operations:
      - name: get-validation
        method: GET
Open in Framework → View in Fleet → validation-protocol-status.yml

Searches for a hospital or healthcare facility account in Salesforce CRM.

naftiko: '0.5'
info:
  label: Salesforce Hospital Account Lookup
  description: Searches for a hospital or healthcare facility account in Salesforce CRM.
  tags:
  - sales
  - salesforce
  - healthcare
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: search-hospital-account
      description: Search for a hospital account in Salesforce by name.
      inputParameters:
      - name: hospital_name
        in: body
        type: string
        description: The hospital or facility name.
      call: salesforce.search-accounts
      with:
        query: '{{hospital_name}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://stryker.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/search?q={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-accounts
        method: GET
Open in Framework → View in Fleet → salesforce-hospital-account-lookup.yml

Validates product launch readiness by checking regulatory approval status, verifying inventory in SAP, and confirming sales training completion.

naftiko: '0.5'
info:
  label: Product Launch Readiness Orchestrator
  description: Validates product launch readiness by checking regulatory approval status, verifying inventory in SAP, and confirming sales training completion.
  tags:
  - product-management
  - regulatory
  - sap
  - pluralsight
capability:
  exposes:
  - type: mcp
    namespace: product-management
    port: 8080
    tools:
    - name: run-product-launch-readiness-orchestrator
      description: Validates product launch readiness by checking regulatory approval status, verifying inventory in SAP, and confirming sales training completion.
      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 Product Launch Readiness Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → product-launch-readiness-orchestrator.yml

Generates ESG reports by pulling environmental data, social metrics from Workday, and governance data from ServiceNow, then publishing via SharePoint.

naftiko: '0.5'
info:
  label: ESG Reporting Pipeline
  description: Generates ESG reports by pulling environmental data, social metrics from Workday, and governance data from ServiceNow, then publishing via SharePoint.
  tags:
  - sustainability
  - workday
  - servicenow
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: run-esg-reporting-pipeline
      description: Generates ESG reports by pulling environmental data, social metrics from Workday, and governance data from ServiceNow, then publishing via SharePoint.
      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 ESG Reporting Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → esg-reporting-pipeline.yml

Creates a non-conformance report in the QMS, links it to the SAP production order, creates a Jira investigation task, and notifies quality engineers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Non-Conformance Report Orchestrator
  description: Creates a non-conformance report in the QMS, links it to the SAP production order, creates a Jira investigation task, and notifies quality engineers via Microsoft Teams.
  tags:
  - quality
  - non-conformance
  - sap
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ncr-mgmt
    port: 8080
    tools:
    - name: create-ncr
      description: Create a non-conformance report with cross-system tracking.
      inputParameters:
      - name: production_order
        in: body
        type: string
        description: The SAP production order number.
      - name: defect_type
        in: body
        type: string
        description: The type of non-conformance.
      - name: description
        in: body
        type: string
        description: Description of the non-conformance.
      - name: severity
        in: body
        type: string
        description: The severity level (critical, major, minor).
      steps:
      - name: get-order
        type: call
        call: sap.get-production-order
        with:
          order_number: '{{production_order}}'
      - name: create-ncr-record
        type: call
        call: qms-api.create-ncr
        with:
          production_order: '{{production_order}}'
          product: '{{get-order.material_number}}'
          defect_type: '{{defect_type}}'
          description: '{{description}}'
          severity: '{{severity}}'
      - name: create-investigation
        type: call
        call: jira.create-issue
        with:
          project: NCR
          summary: 'NCR-{{create-ncr-record.ncr_number}}: {{defect_type}} on {{get-order.material_number}}'
          description: 'Production Order: {{production_order}}. Severity: {{severity}}. {{description}}'
          issuetype: Bug
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: quality_engineering
          channel_id: ncrs
          text: 'NCR {{create-ncr-record.ncr_number}}: {{defect_type}} ({{severity}}) on {{get-order.material_description}}. Jira: {{create-investigation.key}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.stryker.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-production-order
        method: GET
  - type: http
    namespace: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: ncrs
      path: /non-conformances
      operations:
      - name: create-ncr
        method: POST
  - type: http
    namespace: jira
    baseUri: https://stryker.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → non-conformance-report-orchestrator.yml

Calculates Overall Equipment Effectiveness (OEE) for a manufacturing line by pulling data from the MES and posting results to the operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Manufacturing Line Efficiency Dashboard
  description: Calculates Overall Equipment Effectiveness (OEE) for a manufacturing line by pulling data from the MES and posting results to the operations Microsoft Teams channel.
  tags:
  - manufacturing
  - analytics
  - microsoft-teams
  - oee
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-analytics
    port: 8080
    tools:
    - name: calculate-oee
      description: Calculate OEE for a manufacturing line and post results to the ops channel.
      inputParameters:
      - name: line_id
        in: body
        type: string
        description: The manufacturing line identifier.
      - name: shift_date
        in: body
        type: string
        description: The shift date in YYYY-MM-DD format.
      - name: shift
        in: body
        type: string
        description: The shift (day, evening, night).
      steps:
      - name: get-production-data
        type: call
        call: manufacturing-api.get-line-metrics
        with:
          line: '{{line_id}}'
          date: '{{shift_date}}'
          shift: '{{shift}}'
      - name: post-results
        type: call
        call: msteams.send-channel-message
        with:
          team_id: manufacturing_ops
          channel_id: oee_reports
          text: 'OEE for Line {{line_id}} ({{shift}} shift, {{shift_date}}): Availability: {{get-production-data.availability}}%, Performance: {{get-production-data.performance}}%, Quality: {{get-production-data.quality}}%, OEE: {{get-production-data.oee}}%.'
  consumes:
  - type: http
    namespace: manufacturing-api
    baseUri: https://api.stryker.com/manufacturing/v1
    authentication:
      type: bearer
      token: $secrets.stryker_manufacturing_token
    resources:
    - name: line-metrics
      path: /lines/{{line}}/metrics?date={{date}}&shift={{shift}}
      inputParameters:
      - name: line
        in: path
      - name: date
        in: query
      - name: shift
        in: query
      operations:
      - name: get-line-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → manufacturing-line-efficiency-dashboard.yml

Retrieves cloud infrastructure cost summary from Oracle Cloud for a given time period.

naftiko: '0.5'
info:
  label: Oracle Cloud Cost Lookup
  description: Retrieves cloud infrastructure cost summary from Oracle Cloud for a given time period.
  tags:
  - finance
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: get-cloud-cost
      description: Look up Oracle Cloud infrastructure costs 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: oracle-cloud.get-cost
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://usageapi.us-ashburn-1.oci.oraclecloud.com/20200107
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: usage
      path: /usage
      operations:
      - name: get-cost
        method: POST
Open in Framework → View in Fleet → oracle-cloud-cost-lookup.yml

When a regulatory change is identified, assesses impacted products by querying the product registry, creates assessment tasks in Jira, and documents the impact in Confluence.

naftiko: '0.5'
info:
  label: Regulatory Change Impact Assessment Orchestrator
  description: When a regulatory change is identified, assesses impacted products by querying the product registry, creates assessment tasks in Jira, and documents the impact in Confluence.
  tags:
  - regulatory
  - compliance
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: regulatory-change
    port: 8080
    tools:
    - name: assess-regulatory-change
      description: Assess the impact of a regulatory change on Stryker products and create tracking tasks.
      inputParameters:
      - name: regulation_id
        in: body
        type: string
        description: The regulation identifier or reference.
      - name: change_description
        in: body
        type: string
        description: Description of the regulatory change.
      - name: affected_classifications
        in: body
        type: array
        description: List of affected device classifications.
      steps:
      - name: find-affected-products
        type: call
        call: regulatory-api.search-products
        with:
          classifications: '{{affected_classifications}}'
      - name: create-assessment-epic
        type: call
        call: jira.create-issue
        with:
          project: REGCHANGE
          summary: 'Regulatory Change: {{regulation_id}}'
          description: '{{change_description}}. Affected products: {{find-affected-products.count}}.'
          issuetype: Epic
      - name: document-impact
        type: call
        call: confluence.create-page
        with:
          space_key: REGULATORY
          title: 'Impact Assessment: {{regulation_id}}'
          body: 'Regulation: {{regulation_id}}

            Change: {{change_description}}

            Affected Products: {{find-affected-products.product_names}}

            Jira Epic: {{create-assessment-epic.key}}'
  consumes:
  - type: http
    namespace: regulatory-api
    baseUri: https://api.stryker.com/regulatory/v1
    authentication:
      type: bearer
      token: $secrets.stryker_regulatory_token
    resources:
    - name: products
      path: /products/search
      operations:
      - name: search-products
        method: POST
  - type: http
    namespace: jira
    baseUri: https://stryker.atlassian.net/rest/api/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://stryker.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → regulatory-change-impact-assessment-orchestrator.yml

Looks up a Unique Device Identifier in the FDA GUDID database to retrieve device identification and labeling information.

naftiko: '0.5'
info:
  label: Device UDI Registry Lookup
  description: Looks up a Unique Device Identifier in the FDA GUDID database to retrieve device identification and labeling information.
  tags:
  - regulatory
  - udi
  - medical-devices
capability:
  exposes:
  - type: mcp
    namespace: udi-registry
    port: 8080
    tools:
    - name: lookup-udi
      description: Look up a device by its UDI in the FDA GUDID database.
      inputParameters:
      - name: udi
        in: body
        type: string
        description: The Unique Device Identifier string.
      call: gudid.get-device
      with:
        udi: '{{udi}}'
  consumes:
  - type: http
    namespace: gudid
    baseUri: https://accessgudid.nlm.nih.gov/api/v3
    authentication:
      type: apiKey
      key: $secrets.gudid_api_key
    resources:
    - name: devices
      path: /devices/lookup?udi={{udi}}
      inputParameters:
      - name: udi
        in: query
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → device-udi-registry-lookup.yml

Tracks implant surgery outcomes by pulling procedure data from hospital systems, matching to device registry, and updating outcomes in the clinical database.

naftiko: '0.5'
info:
  label: Implant Surgery Outcome Tracker
  description: Tracks implant surgery outcomes by pulling procedure data from hospital systems, matching to device registry, and updating outcomes in the clinical database.
  tags:
  - clinical
  - product-management
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: run-implant-surgery-outcome-tracker
      description: Tracks implant surgery outcomes by pulling procedure data from hospital systems, matching to device registry, and updating outcomes in the clinical database.
      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 Implant Surgery Outcome Tracker for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → implant-surgery-outcome-tracker.yml

Retrieves usage and diagnostic logs for a Mako robotic surgery system by system serial number.

naftiko: '0.5'
info:
  label: Robotic Surgery System Log Retrieval
  description: Retrieves usage and diagnostic logs for a Mako robotic surgery system by system serial number.
  tags:
  - medical-devices
  - robotics
  - diagnostics
capability:
  exposes:
  - type: mcp
    namespace: mako-diagnostics
    port: 8080
    tools:
    - name: get-mako-logs
      description: Retrieve usage and diagnostic logs for a Mako system.
      inputParameters:
      - name: system_serial
        in: body
        type: string
        description: The Mako system serial number.
      - name: log_type
        in: body
        type: string
        description: The log type (usage, diagnostic, error).
      call: device-api.get-logs
      with:
        serial: '{{system_serial}}'
        type: '{{log_type}}'
  consumes:
  - type: http
    namespace: device-api
    baseUri: https://api.stryker.com/connected-devices/v1
    authentication:
      type: bearer
      token: $secrets.stryker_device_api_token
    resources:
    - name: logs
      path: /systems/{{serial}}/logs?type={{type}}
      inputParameters:
      - name: serial
        in: path
      - name: type
        in: query
      operations:
      - name: get-logs
        method: GET
Open in Framework → View in Fleet → robotic-surgery-system-log-retrieval.yml

Retrieves approved job requisitions from Workday and publishes them to LinkedIn Jobs.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline Publisher
  description: Retrieves approved job requisitions from Workday and publishes them to LinkedIn Jobs.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: publish-job-to-linkedin
      description: Pull a job requisition from Workday and publish it to LinkedIn.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday 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-post
        with:
          title: '{{get-requisition.title}}'
          description: '{{get-requisition.description}}'
          location: '{{get-requisition.location}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /requisitions/{{req_id}}
      inputParameters:
      - name: req_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-posts
      path: /simpleJobPostings
      operations:
      - name: create-job-post
        method: POST
Open in Framework → View in Fleet → linkedin-talent-pipeline-publisher.yml

Retrieves a plant maintenance order from SAP by order number.

naftiko: '0.5'
info:
  label: SAP Plant Maintenance Order
  description: Retrieves a plant maintenance order from SAP by order number.
  tags:
  - manufacturing
  - sap
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: get-maintenance-order
      description: Look up a SAP plant maintenance order.
      inputParameters:
      - name: order_number
        in: body
        type: string
        description: The SAP maintenance order number.
      call: sap.get-maintenance-order
      with:
        order_number: '{{order_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.stryker.com/sap/opu/odata/sap/API_MAINTORDER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: maintenance-orders
      path: /MaintenanceOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-maintenance-order
        method: GET
Open in Framework → View in Fleet → sap-plant-maintenance-order.yml

Updates device labeling by pulling specifications from the product database, generating label artwork requests in JIRA, and notifying regulatory.

naftiko: '0.5'
info:
  label: Device Labeling Update Pipeline
  description: Updates device labeling by pulling specifications from the product database, generating label artwork requests in JIRA, and notifying regulatory.
  tags:
  - regulatory
  - product-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: run-device-labeling-update-pipeline
      description: Updates device labeling by pulling specifications from the product database, generating label artwork requests in JIRA, and notifying regulatory.
      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 Device Labeling Update Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → device-labeling-update-pipeline.yml

Retrieves user profile information from Azure Active Directory by email or UPN.

naftiko: '0.5'
info:
  label: Azure AD User Lookup
  description: Retrieves user profile information from Azure Active Directory by email or UPN.
  tags:
  - identity
  - azure-ad
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-user-profile
      description: Look up an Azure AD user by email address.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user email or UPN.
      call: azure-ad.get-user
      with:
        user_email: '{{user_email}}'
  consumes:
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_email}}
      inputParameters:
      - name: user_email
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → azure-ad-user-lookup.yml

Orchestrates new vendor onboarding by creating vendor records in SAP, setting up quality agreements in the QMS, and notifying procurement via Microsoft Teams.

naftiko: '0.5'
info:
  label: Vendor Onboarding Orchestrator
  description: Orchestrates new vendor onboarding by creating vendor records in SAP, setting up quality agreements in the QMS, and notifying procurement via Microsoft Teams.
  tags:
  - procurement
  - sap
  - quality
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: run-vendor-onboarding-orchestrator
      description: Orchestrates new vendor onboarding by creating vendor records in SAP, setting up quality agreements in the QMS, and notifying procurement via Microsoft 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 Vendor Onboarding Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → vendor-onboarding-orchestrator.yml

Queries the regulatory affairs system for the status of an FDA submission (510k, PMA, or De Novo) by submission number.

naftiko: '0.5'
info:
  label: FDA Regulatory Submission Tracker
  description: Queries the regulatory affairs system for the status of an FDA submission (510k, PMA, or De Novo) by submission number.
  tags:
  - regulatory
  - fda
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: get-fda-submission-status
      description: Look up the status of an FDA regulatory submission.
      inputParameters:
      - name: submission_number
        in: body
        type: string
        description: The FDA submission number.
      call: regulatory-api.get-submission
      with:
        number: '{{submission_number}}'
  consumes:
  - type: http
    namespace: regulatory-api
    baseUri: https://api.stryker.com/regulatory/v1
    authentication:
      type: bearer
      token: $secrets.stryker_regulatory_token
    resources:
    - name: submissions
      path: /submissions/{{number}}
      inputParameters:
      - name: number
        in: path
      operations:
      - name: get-submission
        method: GET
Open in Framework → View in Fleet → fda-regulatory-submission-tracker.yml

Manages engineering releases by updating design files in Box, creating release notes in Confluence, and triggering manufacturing readiness reviews.

naftiko: '0.5'
info:
  label: Engineering Release Pipeline
  description: Manages engineering releases by updating design files in Box, creating release notes in Confluence, and triggering manufacturing readiness reviews.
  tags:
  - engineering
  - box
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: run-engineering-release-pipeline
      description: Manages engineering releases by updating design files in Box, creating release notes in Confluence, and triggering manufacturing readiness reviews.
      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 Engineering Release Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → engineering-release-pipeline.yml

Retrieves a file from Google Drive by file ID.

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

Processes employee transfers by updating Workday records, reassigning Azure AD group memberships, and notifying managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Transfer Orchestrator
  description: Processes employee transfers by updating Workday records, reassigning Azure AD group memberships, and notifying managers via Microsoft Teams.
  tags:
  - hr
  - workday
  - azure-ad
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-employee-transfer-orchestrator
      description: Processes employee transfers by updating Workday records, reassigning Azure AD group memberships, and notifying managers via Microsoft 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 Employee Transfer Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → employee-transfer-orchestrator.yml

Retrieves clinical study data and endpoints from the clinical data management system for a specified study protocol.

naftiko: '0.5'
info:
  label: Clinical Study Data Retrieval
  description: Retrieves clinical study data and endpoints from the clinical data management system for a specified study protocol.
  tags:
  - regulatory
  - clinical
  - research
capability:
  exposes:
  - type: mcp
    namespace: clinical-data
    port: 8080
    tools:
    - name: get-clinical-study-data
      description: Retrieve clinical study data by protocol number.
      inputParameters:
      - name: protocol_number
        in: body
        type: string
        description: The clinical study protocol number.
      call: clinical-api.get-study
      with:
        protocol: '{{protocol_number}}'
  consumes:
  - type: http
    namespace: clinical-api
    baseUri: https://api.stryker.com/clinical/v1
    authentication:
      type: bearer
      token: $secrets.stryker_clinical_token
    resources:
    - name: studies
      path: /studies/{{protocol}}
      inputParameters:
      - name: protocol
        in: path
      operations:
      - name: get-study
        method: GET
Open in Framework → View in Fleet → clinical-study-data-retrieval.yml

When a product complaint is received in Salesforce, creates a quality event in the QMS, opens a ServiceNow ticket for investigation, and notifies the quality team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Complaint Intake Orchestrator
  description: When a product complaint is received in Salesforce, creates a quality event in the QMS, opens a ServiceNow ticket for investigation, and notifies the quality team via Microsoft Teams.
  tags:
  - quality
  - complaints
  - salesforce
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: complaint-intake
    port: 8080
    tools:
    - name: process-product-complaint
      description: Process a product complaint from Salesforce intake through QMS event creation, investigation ticket, and team notification.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case ID for the complaint.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-quality-event
        type: call
        call: qms-api.create-event
        with:
          product_code: '{{get-case.product_code}}'
          complaint_type: '{{get-case.complaint_type}}'
          description: '{{get-case.description}}'
          reporter: '{{get-case.contact_name}}'
      - name: open-investigation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Product complaint: {{get-case.product_name}} - {{get-case.complaint_type}}'
          category: quality_investigation
          priority: '{{get-case.severity}}'
          description: 'QMS Event: {{create-quality-event.event_number}}. Product: {{get-case.product_name}}. Lot: {{get-case.lot_number}}. Description: {{get-case.description}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: quality_assurance
          channel_id: complaints
          text: 'New complaint: {{get-case.product_name}} ({{get-case.complaint_type}}). QMS: {{create-quality-event.event_number}}. Investigation: {{open-investigation.number}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://stryker.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: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://stryker.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → product-complaint-intake-orchestrator.yml

Retrieves the upcoming internal quality audit schedule from the QMS.

naftiko: '0.5'
info:
  label: Quality Audit Schedule Viewer
  description: Retrieves the upcoming internal quality audit schedule from the QMS.
  tags:
  - quality
  - audits
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: audit-schedule
    port: 8080
    tools:
    - name: get-audit-schedule
      description: Get the upcoming quality audit schedule for a facility or product line.
      inputParameters:
      - name: facility_code
        in: body
        type: string
        description: The facility code.
      - name: date_range
        in: body
        type: string
        description: The date range (e.g., next_30_days, next_quarter).
      call: qms-api.get-audits
      with:
        facility: '{{facility_code}}'
        range: '{{date_range}}'
  consumes:
  - type: http
    namespace: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: audits
      path: /audits?facility={{facility}}&range={{range}}
      inputParameters:
      - name: facility
        in: query
      - name: range
        in: query
      operations:
      - name: get-audits
        method: GET
Open in Framework → View in Fleet → quality-audit-schedule-viewer.yml

Executes a SQL query against the Teradata data warehouse.

naftiko: '0.5'
info:
  label: Teradata Warehouse Query
  description: Executes a SQL query against the Teradata data warehouse.
  tags:
  - analytics
  - teradata
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-warehouse-query
      description: Execute a query against Teradata.
      inputParameters:
      - name: query_text
        in: body
        type: string
        description: The SQL query to execute.
      call: teradata.run-query
      with:
        query_text: '{{query_text}}'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://teradata.stryker.com/api/query/v1
    authentication:
      type: bearer
      token: $secrets.teradata_token
    resources:
    - name: queries
      path: /execute
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → teradata-warehouse-query.yml

Retrieves cost center details from SAP by cost center ID.

naftiko: '0.5'
info:
  label: SAP Cost Center Lookup
  description: Retrieves cost center details from SAP by cost center ID.
  tags:
  - finance
  - sap
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: get-cost-center
      description: Look up a SAP cost center by ID.
      inputParameters:
      - name: cost_center_id
        in: body
        type: string
        description: The SAP cost center ID.
      call: sap.get-cost-center
      with:
        cost_center_id: '{{cost_center_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.stryker.com/sap/opu/odata/sap/API_COSTCENTER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-centers
      path: /A_CostCenter('{{cost_center_id}}')
      inputParameters:
      - name: cost_center_id
        in: path
      operations:
      - name: get-cost-center
        method: GET
Open in Framework → View in Fleet → sap-cost-center-lookup.yml

Retrieves or uploads engineering documents from Box cloud storage for the product development workflow.

naftiko: '0.5'
info:
  label: Box Engineering Document Manager
  description: Retrieves or uploads engineering documents from Box cloud storage for the product development workflow.
  tags:
  - engineering
  - box
  - documents
capability:
  exposes:
  - type: mcp
    namespace: eng-docs
    port: 8080
    tools:
    - name: search-engineering-docs
      description: Search for engineering documents in Box.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search query.
      call: box.search-files
      with:
        query: '{{search_query}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: search
      path: /search?query={{query}}
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-files
        method: GET
Open in Framework → View in Fleet → box-engineering-document-manager.yml

Generates a supplier audit report by pulling audit findings from the QMS, supplier performance from SAP, and publishing the report to SharePoint.

naftiko: '0.5'
info:
  label: Supplier Audit Report Generator
  description: Generates a supplier audit report by pulling audit findings from the QMS, supplier performance from SAP, and publishing the report to SharePoint.
  tags:
  - quality
  - suppliers
  - sap
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: supplier-audit
    port: 8080
    tools:
    - name: generate-supplier-audit-report
      description: Generate a comprehensive supplier audit report and publish to SharePoint.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The supplier identifier.
      - name: audit_id
        in: body
        type: string
        description: The audit identifier.
      steps:
      - name: get-audit-findings
        type: call
        call: qms-api.get-audit-findings
        with:
          audit: '{{audit_id}}'
      - name: get-supplier-data
        type: call
        call: sap.get-supplier
        with:
          supplier: '{{supplier_id}}'
      - name: publish-report
        type: call
        call: sharepoint.update-file
        with:
          site_id: supplier_quality
          file_path: AuditReports/{{supplier_id}}_{{audit_id}}.json
          content:
            supplier: '{{get-supplier-data}}'
            findings: '{{get-audit-findings}}'
  consumes:
  - type: http
    namespace: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: audit-findings
      path: /audits/{{audit}}/findings
      inputParameters:
      - name: audit
        in: path
      operations:
      - name: get-audit-findings
        method: GET
  - type: http
    namespace: sap
    baseUri: https://sap.stryker.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: suppliers
      path: /A_Supplier('{{supplier}}')
      inputParameters:
      - name: supplier
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: update-file
        method: PUT
Open in Framework → View in Fleet → supplier-audit-report-generator.yml

Retrieves the calibration status and next due date for manufacturing and test equipment.

naftiko: '0.5'
info:
  label: Equipment Calibration Status
  description: Retrieves the calibration status and next due date for manufacturing and test equipment.
  tags:
  - manufacturing
  - calibration
  - quality
capability:
  exposes:
  - type: mcp
    namespace: calibration
    port: 8080
    tools:
    - name: get-calibration-status
      description: Check the calibration status of manufacturing equipment.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: The equipment identifier.
      call: manufacturing-api.get-calibration
      with:
        id: '{{equipment_id}}'
  consumes:
  - type: http
    namespace: manufacturing-api
    baseUri: https://api.stryker.com/manufacturing/v1
    authentication:
      type: bearer
      token: $secrets.stryker_manufacturing_token
    resources:
    - name: calibration
      path: /equipment/{{id}}/calibration
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-calibration
        method: GET
Open in Framework → View in Fleet → equipment-calibration-status.yml

Retrieves the current status of a ServiceNow incident by number.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status
  description: Retrieves the current status of a ServiceNow incident by number.
  tags:
  - it-support
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-support
    port: 8080
    tools:
    - name: get-incident-status
      description: Look up a ServiceNow incident by number.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number.
      call: servicenow.get-incident
      with:
        number: '{{incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://stryker.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={{number}}
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status.yml

Routes vendor contracts through legal review by uploading to SharePoint, creating approval tasks in ServiceNow, and notifying via Microsoft Teams.

naftiko: '0.5'
info:
  label: Contract Review Orchestrator
  description: Routes vendor contracts through legal review by uploading to SharePoint, creating approval tasks in ServiceNow, and notifying via Microsoft Teams.
  tags:
  - legal
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: legal
    port: 8080
    tools:
    - name: run-contract-review-orchestrator
      description: Routes vendor contracts through legal review by uploading to SharePoint, creating approval tasks in ServiceNow, and notifying via Microsoft 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 Contract Review Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → contract-review-orchestrator.yml

Retrieves application performance metrics from New Relic for Stryker digital health applications.

naftiko: '0.5'
info:
  label: New Relic Application Performance
  description: Retrieves application performance metrics from New Relic for Stryker digital health applications.
  tags:
  - monitoring
  - new-relic
  - performance
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-app-performance
      description: Get performance metrics for a Stryker application from New Relic.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: The application name in New Relic.
      call: newrelic.get-app-summary
      with:
        app: '{{app_name}}'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: apiKey
      key: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications.json?filter[name]={{app}}
      inputParameters:
      - name: app
        in: query
      operations:
      - name: get-app-summary
        method: GET
Open in Framework → View in Fleet → new-relic-application-performance.yml

Processes capital expenditure requests by validating budget in SAP, routing approvals through ServiceNow, and notifying finance via Microsoft Teams.

naftiko: '0.5'
info:
  label: Capital Expenditure Approval Pipeline
  description: Processes capital expenditure requests by validating budget in SAP, routing approvals through ServiceNow, and notifying finance via Microsoft Teams.
  tags:
  - finance
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: run-capital-expenditure-approval-pipeline
      description: Processes capital expenditure requests by validating budget in SAP, routing approvals through ServiceNow, and notifying finance via Microsoft 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 Capital Expenditure Approval Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → capital-expenditure-approval-pipeline.yml

Retrieves a supplier's quality performance scorecard including defect rates, on-time delivery, and audit results from the supplier quality system.

naftiko: '0.5'
info:
  label: Supplier Quality Scorecard
  description: Retrieves a supplier's quality performance scorecard including defect rates, on-time delivery, and audit results from the supplier quality system.
  tags:
  - quality
  - suppliers
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: supplier-quality
    port: 8080
    tools:
    - name: get-supplier-scorecard
      description: Get a supplier's quality performance scorecard.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The supplier identifier.
      call: supplier-api.get-scorecard
      with:
        id: '{{supplier_id}}'
  consumes:
  - type: http
    namespace: supplier-api
    baseUri: https://api.stryker.com/supplier-quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_supplier_quality_token
    resources:
    - name: scorecards
      path: /suppliers/{{id}}/scorecard
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-scorecard
        method: GET
Open in Framework → View in Fleet → supplier-quality-scorecard.yml

Schedules surgical cases by verifying instrument set availability, confirming surgeon preferences, and notifying the logistics team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Surgical Case Scheduling Pipeline
  description: Schedules surgical cases by verifying instrument set availability, confirming surgeon preferences, and notifying the logistics team via Microsoft Teams.
  tags:
  - operations
  - logistics
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: run-surgical-case-scheduling-pipeline
      description: Schedules surgical cases by verifying instrument set availability, confirming surgeon preferences, and notifying the logistics team via Microsoft 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 Surgical Case Scheduling Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → surgical-case-scheduling-pipeline.yml

Queries SolarWinds for the health status of network devices at Stryker manufacturing facilities.

naftiko: '0.5'
info:
  label: SolarWinds Network Monitor
  description: Queries SolarWinds for the health status of network devices at Stryker manufacturing facilities.
  tags:
  - infrastructure
  - solarwinds
  - network
capability:
  exposes:
  - type: mcp
    namespace: network-health
    port: 8080
    tools:
    - name: get-facility-network-health
      description: Get network device health from SolarWinds for a manufacturing facility.
      inputParameters:
      - name: facility_code
        in: body
        type: string
        description: The facility code.
      call: solarwinds.get-node-status
      with:
        group: '{{facility_code}}'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.stryker.com/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query?query=SELECT+NodeName,Status+FROM+Orion.Nodes+WHERE+GroupName='{{group}}'
      inputParameters:
      - name: group
        in: query
      operations:
      - name: get-node-status
        method: GET
Open in Framework → View in Fleet → solarwinds-network-monitor.yml

Runs a quality metrics query in Snowflake to retrieve product defect rates and trends.

naftiko: '0.5'
info:
  label: Snowflake Quality Metrics Query
  description: Runs a quality metrics query in Snowflake to retrieve product defect rates and trends.
  tags:
  - quality
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: query-quality-metrics
      description: Run a quality metrics query in Snowflake.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: The product line to query metrics for.
      call: snowflake.run-query
      with:
        product_line: '{{product_line}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://stryker.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-quality-metrics-query.yml

Retrieves a travel expense report from SAP Concur by report ID.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Lookup
  description: Retrieves a travel expense report from SAP Concur by report ID.
  tags:
  - finance
  - sap-concur
  - expenses
capability:
  exposes:
  - type: mcp
    namespace: expenses
    port: 8080
    tools:
    - name: get-expense-report
      description: Look up a travel expense report in SAP Concur.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      call: concur.get-report
      with:
        id: '{{report_id}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: reports
      path: /expense/reports/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-lookup.yml

Retrieves the current sales opportunity pipeline from Salesforce for a specified product line or region.

naftiko: '0.5'
info:
  label: Salesforce Sales Opportunity Pipeline
  description: Retrieves the current sales opportunity pipeline from Salesforce for a specified product line or region.
  tags:
  - sales
  - salesforce
  - pipeline
capability:
  exposes:
  - type: mcp
    namespace: sales-pipeline
    port: 8080
    tools:
    - name: get-opportunity-pipeline
      description: Get the sales opportunity pipeline from Salesforce.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: The product line (e.g., MedSurg, Neurotechnology, Orthopaedics).
      call: salesforce.query-opportunities
      with:
        product_line: '{{product_line}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://stryker.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /query?q=SELECT+Name,Amount,StageName+FROM+Opportunity+WHERE+Product_Line__c='{{product_line}}'
      inputParameters:
      - name: product_line
        in: query
      operations:
      - name: query-opportunities
        method: GET
Open in Framework → View in Fleet → salesforce-sales-opportunity-pipeline.yml

Monitors inventory levels in SAP and generates purchase requisitions when stock falls below reorder points, notifying procurement via email.

naftiko: '0.5'
info:
  label: Inventory Reorder Orchestrator
  description: Monitors inventory levels in SAP and generates purchase requisitions when stock falls below reorder points, notifying procurement via email.
  tags:
  - supply-chain
  - sap
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: run-inventory-reorder-orchestrator
      description: Monitors inventory levels in SAP and generates purchase requisitions when stock falls below reorder points, notifying procurement via email.
      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 Inventory Reorder Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → inventory-reorder-orchestrator.yml

Creates a Medical Device Report for an adverse event by gathering device and incident details, submitting to the regulatory system, and notifying the FDA liaison team.

naftiko: '0.5'
info:
  label: MDR Adverse Event Report Orchestrator
  description: Creates a Medical Device Report for an adverse event by gathering device and incident details, submitting to the regulatory system, and notifying the FDA liaison team.
  tags:
  - regulatory
  - mdr
  - quality
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: mdr-reporting
    port: 8080
    tools:
    - name: submit-mdr
      description: Create and submit an MDR adverse event report.
      inputParameters:
      - name: quality_event_id
        in: body
        type: string
        description: The QMS quality event ID.
      - name: event_type
        in: body
        type: string
        description: The adverse event type (death, serious_injury, malfunction).
      steps:
      - name: get-event
        type: call
        call: qms-api.get-event
        with:
          id: '{{quality_event_id}}'
      - name: submit-report
        type: call
        call: regulatory-api.submit-mdr
        with:
          event_id: '{{quality_event_id}}'
          event_type: '{{event_type}}'
          product_code: '{{get-event.product_code}}'
          description: '{{get-event.description}}'
      - name: notify-fda-liaison
        type: call
        call: msteams.send-channel-message
        with:
          team_id: regulatory_affairs
          channel_id: mdr_reports
          text: 'MDR submitted: {{submit-report.mdr_number}}. Event: {{event_type}}. Product: {{get-event.product_name}}. Quality Event: {{quality_event_id}}.'
  consumes:
  - type: http
    namespace: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: events
      path: /events/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-event
        method: GET
  - type: http
    namespace: regulatory-api
    baseUri: https://api.stryker.com/regulatory/v1
    authentication:
      type: bearer
      token: $secrets.stryker_regulatory_token
    resources:
    - name: mdr
      path: /mdr/submit
      operations:
      - name: submit-mdr
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → mdr-adverse-event-report-orchestrator.yml

Generates annual quality review by pulling metrics from Snowflake, defect data from the QMS, and distributing the report via SharePoint and Microsoft Teams.

naftiko: '0.5'
info:
  label: Annual Quality Review Orchestrator
  description: Generates annual quality review by pulling metrics from Snowflake, defect data from the QMS, and distributing the report via SharePoint and Microsoft Teams.
  tags:
  - quality
  - snowflake
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: run-annual-quality-review-orchestrator
      description: Generates annual quality review by pulling metrics from Snowflake, defect data from the QMS, and distributing the report via SharePoint and Microsoft 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 Annual Quality Review Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → annual-quality-review-orchestrator.yml

Distributes customer satisfaction surveys via MailChimp after device delivery, collects responses, and updates Salesforce with satisfaction scores.

naftiko: '0.5'
info:
  label: Customer Satisfaction Survey Pipeline
  description: Distributes customer satisfaction surveys via MailChimp after device delivery, collects responses, and updates Salesforce with satisfaction scores.
  tags:
  - customer-service
  - mailchimp
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-service
    port: 8080
    tools:
    - name: run-customer-satisfaction-survey-pipeline
      description: Distributes customer satisfaction surveys via MailChimp after device delivery, collects responses, and updates Salesforce with satisfaction scores.
      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 Satisfaction Survey Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → customer-satisfaction-survey-pipeline.yml

Manages engineering change requests by collecting reviews from JIRA, updating design documents in SharePoint, and scheduling CCB meetings via Microsoft Teams.

naftiko: '0.5'
info:
  label: Change Control Board Orchestrator
  description: Manages engineering change requests by collecting reviews from JIRA, updating design documents in SharePoint, and scheduling CCB meetings via Microsoft Teams.
  tags:
  - engineering
  - jira
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: run-change-control-board-orchestrator
      description: Manages engineering change requests by collecting reviews from JIRA, updating design documents in SharePoint, and scheduling CCB meetings via Microsoft 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 Change Control Board Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → change-control-board-orchestrator.yml

Retrieves quality metrics visualizations from Tableau dashboards for management review.

naftiko: '0.5'
info:
  label: Tableau Quality Dashboard Lookup
  description: Retrieves quality metrics visualizations from Tableau dashboards for management review.
  tags:
  - analytics
  - tableau
  - quality
capability:
  exposes:
  - type: mcp
    namespace: quality-dashboards
    port: 8080
    tools:
    - name: get-quality-dashboard
      description: Get quality metrics data from a Tableau dashboard.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: The Tableau workbook name.
      - name: view_name
        in: body
        type: string
        description: The view (dashboard) name within the workbook.
      call: tableau.get-view-data
      with:
        workbook: '{{workbook_name}}'
        view: '{{view_name}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.stryker.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /sites/{{site_id}}/workbooks/{{workbook}}/views/{{view}}/data
      inputParameters:
      - name: workbook
        in: path
      - name: view
        in: path
      operations:
      - name: get-view-data
        method: GET
Open in Framework → View in Fleet → tableau-quality-dashboard-lookup.yml

Retrieves the current sprint issues from a Jira project board.

naftiko: '0.5'
info:
  label: Jira Sprint Board Viewer
  description: Retrieves the current sprint issues from a Jira project board.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: project-mgmt
    port: 8080
    tools:
    - name: get-sprint-issues
      description: Get all issues in the current sprint for a Jira project.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      call: jira.search-issues
      with:
        jql: project={{project_key}} AND sprint in openSprints()
  consumes:
  - type: http
    namespace: jira
    baseUri: https://stryker.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search?jql={{jql}}
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
Open in Framework → View in Fleet → jira-sprint-board-viewer.yml

Triggers a Microsoft Power Automate flow for automated quality and manufacturing workflows.

naftiko: '0.5'
info:
  label: Microsoft Power Automate Workflow Trigger
  description: Triggers a Microsoft Power Automate flow for automated quality and manufacturing workflows.
  tags:
  - automation
  - microsoft-power-automate
  - quality
capability:
  exposes:
  - type: mcp
    namespace: automation
    port: 8080
    tools:
    - name: trigger-quality-flow
      description: Trigger a Power Automate flow for quality management automation.
      inputParameters:
      - name: flow_id
        in: body
        type: string
        description: The Power Automate flow ID.
      - name: flow_inputs
        in: body
        type: object
        description: The input parameters for the flow.
      call: power-automate.trigger-flow
      with:
        flow_id: '{{flow_id}}'
        inputs: '{{flow_inputs}}'
  consumes:
  - type: http
    namespace: power-automate
    baseUri: https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple
    authentication:
      type: bearer
      token: $secrets.power_automate_token
    resources:
    - name: flows
      path: /environments/Default/flows/{{flow_id}}/triggers/manual/run
      inputParameters:
      - name: flow_id
        in: path
      operations:
      - name: trigger-flow
        method: POST
Open in Framework → View in Fleet → microsoft-power-automate-workflow-trigger.yml

Purges the Cloudflare CDN cache for specified URL patterns on Stryker customer-facing websites.

naftiko: '0.5'
info:
  label: Cloudflare CDN Cache Manager
  description: Purges the Cloudflare CDN cache for specified URL patterns on Stryker customer-facing websites.
  tags:
  - infrastructure
  - cloudflare
  - cdn
capability:
  exposes:
  - type: mcp
    namespace: cdn-ops
    port: 8080
    tools:
    - name: purge-cdn-cache
      description: Purge the Cloudflare CDN cache for specified URLs.
      inputParameters:
      - name: url_patterns
        in: body
        type: array
        description: List of URL patterns to purge.
      call: cloudflare.purge-cache
      with:
        zone_id: $secrets.cloudflare_zone_id
        files: '{{url_patterns}}'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: cache
      path: /zones/{{zone_id}}/purge_cache
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: purge-cache
        method: POST
Open in Framework → View in Fleet → cloudflare-cdn-cache-manager.yml

Sends a quality alert to a specified Microsoft Teams channel for urgent quality notifications.

naftiko: '0.5'
info:
  label: Microsoft Teams Quality Alert
  description: Sends a quality alert to a specified Microsoft Teams channel for urgent quality notifications.
  tags:
  - quality
  - microsoft-teams
  - alerts
capability:
  exposes:
  - type: mcp
    namespace: quality-alerts
    port: 8080
    tools:
    - name: send-quality-alert
      description: Send a quality alert to the quality assurance Teams channel.
      inputParameters:
      - name: alert_title
        in: body
        type: string
        description: The alert title.
      - name: alert_message
        in: body
        type: string
        description: The alert body text.
      - name: severity
        in: body
        type: string
        description: The alert severity (critical, major, minor).
      call: msteams.send-channel-message
      with:
        team_id: quality_assurance
        channel_id: alerts
        text: '[{{severity}}] {{alert_title}}: {{alert_message}}'
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-quality-alert.yml

Tracks the status and effectiveness of field safety corrective actions for medical devices.

naftiko: '0.5'
info:
  label: Device Field Action Tracker
  description: Tracks the status and effectiveness of field safety corrective actions for medical devices.
  tags:
  - quality
  - field-actions
  - regulatory
capability:
  exposes:
  - type: mcp
    namespace: field-actions
    port: 8080
    tools:
    - name: get-field-action-status
      description: Get the status of a field safety corrective action.
      inputParameters:
      - name: action_number
        in: body
        type: string
        description: The field action reference number.
      call: qms-api.get-field-action
      with:
        number: '{{action_number}}'
  consumes:
  - type: http
    namespace: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: field-actions
      path: /field-actions/{{number}}
      inputParameters:
      - name: number
        in: path
      operations:
      - name: get-field-action
        method: GET
Open in Framework → View in Fleet → device-field-action-tracker.yml

Retrieves detailed issue information from Jira including status, assignee, and comments.

naftiko: '0.5'
info:
  label: Jira Issue Detail Viewer
  description: Retrieves detailed issue information from Jira including status, assignee, and comments.
  tags:
  - engineering
  - jira
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-issue-detail
      description: Look up a Jira issue by issue 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://stryker.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-detail-viewer.yml

Processes a product recall by updating the QMS, generating an MDR report, notifying affected hospitals via MailChimp, and alerting the regulatory team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Product Recall Notification Orchestrator
  description: Processes a product recall by updating the QMS, generating an MDR report, notifying affected hospitals via MailChimp, and alerting the regulatory team via Microsoft Teams.
  tags:
  - quality
  - recalls
  - regulatory
  - mailchimp
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recalls
    port: 8080
    tools:
    - name: process-recall
      description: Execute a product recall notification workflow across QMS, email, and team alerts.
      inputParameters:
      - name: product_code
        in: body
        type: string
        description: The product code being recalled.
      - name: lot_numbers
        in: body
        type: array
        description: List of affected lot numbers.
      - name: recall_reason
        in: body
        type: string
        description: The reason for the recall.
      - name: recall_class
        in: body
        type: string
        description: The recall classification (Class I, II, or III).
      steps:
      - name: create-recall-event
        type: call
        call: qms-api.create-recall
        with:
          product_code: '{{product_code}}'
          lots: '{{lot_numbers}}'
          reason: '{{recall_reason}}'
          class: '{{recall_class}}'
      - name: get-affected-customers
        type: call
        call: distribution-api.get-customers-by-lots
        with:
          lots: '{{lot_numbers}}'
      - name: send-notifications
        type: call
        call: mailchimp.send-bulk-transactional
        with:
          template_name: product_recall_notice
          recipients: '{{get-affected-customers.contact_emails}}'
          merge_vars:
            product_name: '{{create-recall-event.product_name}}'
            recall_class: '{{recall_class}}'
            reason: '{{recall_reason}}'
      - name: alert-regulatory
        type: call
        call: msteams.send-channel-message
        with:
          team_id: regulatory_affairs
          channel_id: recalls
          text: 'RECALL: {{create-recall-event.product_name}} ({{recall_class}}). {{get-affected-customers.count}} facilities affected. Recall #: {{create-recall-event.recall_number}}.'
  consumes:
  - type: http
    namespace: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: recalls
      path: /recalls
      operations:
      - name: create-recall
        method: POST
  - type: http
    namespace: distribution-api
    baseUri: https://api.stryker.com/distribution/v1
    authentication:
      type: bearer
      token: $secrets.stryker_distribution_token
    resources:
    - name: customers
      path: /customers/by-lots
      operations:
      - name: get-customers-by-lots
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: apiKey
      key: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-bulk-transactional
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → product-recall-notification-orchestrator.yml

Retrieves the bill of materials for a surgical instrument set, showing all components and their quantities.

naftiko: '0.5'
info:
  label: Surgical Instrument Set Configuration
  description: Retrieves the bill of materials for a surgical instrument set, showing all components and their quantities.
  tags:
  - manufacturing
  - sap
  - product-configuration
capability:
  exposes:
  - type: mcp
    namespace: product-config
    port: 8080
    tools:
    - name: get-instrument-set-bom
      description: Get the bill of materials for a surgical instrument set.
      inputParameters:
      - name: set_material
        in: body
        type: string
        description: The material number for the instrument set.
      call: sap.get-bom
      with:
        material: '{{set_material}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.stryker.com/sap/opu/odata/sap/API_BILL_OF_MATERIAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: bom
      path: /MaterialBOM?$filter=Material eq '{{material}}'
      inputParameters:
      - name: material
        in: query
      operations:
      - name: get-bom
        method: GET
Open in Framework → View in Fleet → surgical-instrument-set-configuration.yml

Manages IT incident response by creating ServiceNow incidents, pulling monitoring data from Datadog, and escalating when severity is critical.

naftiko: '0.5'
info:
  label: Incident Response Orchestrator
  description: Manages IT incident response by creating ServiceNow incidents, pulling monitoring data from Datadog, and escalating when severity is critical.
  tags:
  - it
  - servicenow
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: it
    port: 8080
    tools:
    - name: run-incident-response-orchestrator
      description: Manages IT incident response by creating ServiceNow incidents, pulling monitoring data from Datadog, and escalating when severity is critical.
      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 Incident Response Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → incident-response-orchestrator.yml

Generates clinical evidence packages by pulling study data, formatting for regulatory submission, and archiving in SharePoint.

naftiko: '0.5'
info:
  label: Clinical Evidence Generation Orchestrator
  description: Generates clinical evidence packages by pulling study data, formatting for regulatory submission, and archiving in SharePoint.
  tags:
  - clinical
  - regulatory
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: run-clinical-evidence-generation-orchestrator
      description: Generates clinical evidence packages by pulling study data, formatting for regulatory submission, and archiving in SharePoint.
      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 Clinical Evidence Generation Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → clinical-evidence-generation-orchestrator.yml

Generates quarterly supplier reviews by aggregating delivery data from SAP, quality data from the QMS, and distributing scorecards via email.

naftiko: '0.5'
info:
  label: Supplier Performance Review Orchestrator
  description: Generates quarterly supplier reviews by aggregating delivery data from SAP, quality data from the QMS, and distributing scorecards via email.
  tags:
  - procurement
  - sap
  - quality
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: run-supplier-performance-review-orchestrator
      description: Generates quarterly supplier reviews by aggregating delivery data from SAP, quality data from the QMS, and distributing scorecards via email.
      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 Supplier Performance Review Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → supplier-performance-review-orchestrator.yml

Executes warehouse cycle counts by pulling expected inventory from SAP, recording actual counts, and generating variance reports in Power BI.

naftiko: '0.5'
info:
  label: Warehouse Cycle Count Pipeline
  description: Executes warehouse cycle counts by pulling expected inventory from SAP, recording actual counts, and generating variance reports in Power BI.
  tags:
  - warehouse
  - sap
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: warehouse
    port: 8080
    tools:
    - name: run-warehouse-cycle-count-pipeline
      description: Executes warehouse cycle counts by pulling expected inventory from SAP, recording actual counts, and generating variance reports in 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 Warehouse Cycle Count Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → warehouse-cycle-count-pipeline.yml

Retrieves job requisition details from Workday by requisition ID.

naftiko: '0.5'
info:
  label: Workday Job Requisition Viewer
  description: Retrieves job requisition details from Workday by requisition ID.
  tags:
  - hr
  - workday
  - recruiting
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-job-requisition
      description: Look up a Workday job requisition by ID.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      call: workday.get-requisition
      with:
        requisition_id: '{{requisition_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/stryker/Recruiting/v40.1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
Open in Framework → View in Fleet → workday-job-requisition-viewer.yml

Records the results of an incoming goods inspection in the QMS and updates the SAP goods receipt.

naftiko: '0.5'
info:
  label: Incoming Goods Inspection Recorder
  description: Records the results of an incoming goods inspection in the QMS and updates the SAP goods receipt.
  tags:
  - quality
  - inspection
  - sap
capability:
  exposes:
  - type: mcp
    namespace: incoming-inspection
    port: 8080
    tools:
    - name: record-inspection-result
      description: Record an incoming goods inspection result and update SAP.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: The SAP delivery number.
      - name: inspection_result
        in: body
        type: string
        description: The inspection result (pass, fail, conditional).
      - name: notes
        in: body
        type: string
        description: Inspection notes.
      steps:
      - name: record-in-qms
        type: call
        call: qms-api.create-inspection-result
        with:
          delivery: '{{delivery_number}}'
          result: '{{inspection_result}}'
          notes: '{{notes}}'
      - name: update-sap
        type: call
        call: sap.update-goods-receipt
        with:
          delivery: '{{delivery_number}}'
          quality_status: '{{inspection_result}}'
  consumes:
  - type: http
    namespace: qms-api
    baseUri: https://api.stryker.com/quality/v1
    authentication:
      type: bearer
      token: $secrets.stryker_qms_token
    resources:
    - name: inspections
      path: /inspections
      operations:
      - name: create-inspection-result
        method: POST
  - type: http
    namespace: sap
    baseUri: https://sap.stryker.com/sap/opu/odata/sap/API_INBOUND_DELIVERY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: deliveries
      path: /A_InboundDelivery('{{delivery}}')
      inputParameters:
      - name: delivery
        in: path
      operations:
      - name: update-goods-receipt
        method: PATCH
Open in Framework → View in Fleet → incoming-goods-inspection-recorder.yml

Retrieves design control documents from SharePoint for a specific product development project.

naftiko: '0.5'
info:
  label: Design Control Document Retrieval
  description: Retrieves design control documents from SharePoint for a specific product development project.
  tags:
  - regulatory
  - design-control
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: design-control
    port: 8080
    tools:
    - name: get-design-document
      description: Retrieve a design control document from SharePoint.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The product development project ID.
      - name: document_type
        in: body
        type: string
        description: The document type (e.g., design_input, design_output, verification, validation).
      call: sharepoint.get-document
      with:
        site_id: design_control
        file_path: Projects/{{project_id}}/{{document_type}}
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → design-control-document-retrieval.yml

Audits training records by cross-referencing Workday employee data with Pluralsight completion records and generating gap reports in Power BI.

naftiko: '0.5'
info:
  label: Training Record Audit Orchestrator
  description: Audits training records by cross-referencing Workday employee data with Pluralsight completion records and generating gap reports in Power BI.
  tags:
  - hr
  - workday
  - pluralsight
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-training-record-audit-orchestrator
      description: Audits training records by cross-referencing Workday employee data with Pluralsight completion records and generating gap reports in 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 Training Record Audit Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.stryker.com/v1
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.stryker.com/v2
    authentication:
      type: bearer
      token: $secrets.stryker_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → training-record-audit-orchestrator.yml

Retrieves the current status of a manufacturing work order from SAP, including completion percentage, planned vs. actual quantities, and target dates.

naftiko: '0.5'
info:
  label: Manufacturing Work Order Status
  description: Retrieves the current status of a manufacturing work order from SAP, including completion percentage, planned vs. actual quantities, and target dates.
  tags:
  - manufacturing
  - sap
  - production
capability:
  exposes:
  - type: mcp
    namespace: manufacturing
    port: 8080
    tools:
    - name: get-work-order-status
      description: Look up a manufacturing work order status in SAP.
      inputParameters:
      - name: work_order_number
        in: body
        type: string
        description: The SAP production order number.
      call: sap.get-production-order
      with:
        order_number: '{{work_order_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.stryker.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-production-order
        method: GET
Open in Framework → View in Fleet → manufacturing-work-order-status.yml

Retrieves environmental monitoring data (temperature, humidity, particulate) for cleanroom manufacturing areas.

naftiko: '0.5'
info:
  label: Environmental Monitoring Data
  description: Retrieves environmental monitoring data (temperature, humidity, particulate) for cleanroom manufacturing areas.
  tags:
  - manufacturing
  - environmental
  - quality
capability:
  exposes:
  - type: mcp
    namespace: environmental
    port: 8080
    tools:
    - name: get-cleanroom-data
      description: Get environmental monitoring data for a cleanroom area.
      inputParameters:
      - name: room_id
        in: body
        type: string
        description: The cleanroom identifier.
      - name: date_range
        in: body
        type: string
        description: The date range (e.g., last_24h, last_7d).
      call: manufacturing-api.get-environmental
      with:
        room: '{{room_id}}'
        range: '{{date_range}}'
  consumes:
  - type: http
    namespace: manufacturing-api
    baseUri: https://api.stryker.com/manufacturing/v1
    authentication:
      type: bearer
      token: $secrets.stryker_manufacturing_token
    resources:
    - name: environmental
      path: /rooms/{{room}}/environmental?range={{range}}
      inputParameters:
      - name: room
        in: path
      - name: range
        in: query
      operations:
      - name: get-environmental
        method: GET
Open in Framework → View in Fleet → environmental-monitoring-data.yml

Retrieves current inventory levels for a material at a specified plant from SAP.

naftiko: '0.5'
info:
  label: Inventory Level Checker
  description: Retrieves current inventory levels for a material at a specified plant from SAP.
  tags:
  - manufacturing
  - inventory
  - sap
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-inventory-level
      description: Check the current inventory level for a material at a plant.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      - name: plant_code
        in: body
        type: string
        description: The SAP plant code.
      call: sap.get-stock
      with:
        material: '{{material_number}}'
        plant: '{{plant_code}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.stryker.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod?$filter=Material eq '{{material}}' and Plant eq '{{plant}}'
      inputParameters:
      - name: material
        in: query
      - name: plant
        in: query
      operations:
      - name: get-stock
        method: GET
Open in Framework → View in Fleet → inventory-level-checker.yml

Tracks the registration status of implanted devices, linking patient implant records to product lot information.

naftiko: '0.5'
info:
  label: Implant Registration Tracker
  description: Tracks the registration status of implanted devices, linking patient implant records to product lot information.
  tags:
  - medical-devices
  - implants
  - tracking
capability:
  exposes:
  - type: mcp
    namespace: implant-tracking
    port: 8080
    tools:
    - name: get-implant-registration
      description: Track the registration status of an implanted device.
      inputParameters:
      - name: serial_number
        in: body
        type: string
        description: The device serial number.
      call: implant-api.get-registration
      with:
        serial: '{{serial_number}}'
  consumes:
  - type: http
    namespace: implant-api
    baseUri: https://api.stryker.com/implant-registry/v1
    authentication:
      type: bearer
      token: $secrets.stryker_implant_token
    resources:
    - name: registrations
      path: /registrations/{{serial}}
      inputParameters:
      - name: serial
        in: path
      operations:
      - name: get-registration
        method: GET
Open in Framework → View in Fleet → implant-registration-tracker.yml

Schedules a telehealth visit for a member by checking availability, creating the appointment, and sending confirmation with join link via email.

naftiko: '0.5'
info:
  label: Telehealth Visit Scheduler
  description: Schedules a telehealth visit for a member by checking availability, creating the appointment, and sending confirmation with join link via email.
  tags:
  - care-management
  - telehealth
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: telehealth
    port: 8080
    tools:
    - name: schedule-telehealth
      description: Schedule a telehealth visit and send confirmation.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: provider_npi
        in: body
        type: string
        description: Provider NPI.
      - name: preferred_date
        in: body
        type: string
        description: Preferred date in YYYY-MM-DD format.
      - name: member_email
        in: body
        type: string
        description: Member email.
      steps:
      - name: check-availability
        type: call
        call: scheduling.get-availability
        with:
          provider_npi: '{{provider_npi}}'
          date: '{{preferred_date}}'
      - name: create-appointment
        type: call
        call: scheduling.create-appointment
        with:
          member_id: '{{member_id}}'
          provider_npi: '{{provider_npi}}'
          slot: '{{check-availability.next_available}}'
          type: telehealth
      - name: send-confirmation
        type: call
        call: outlook.send-email
        with:
          to: '{{member_email}}'
          subject: Cigna Telehealth Visit Confirmed
          body: 'Your telehealth visit is confirmed for {{create-appointment.scheduled_time}}. Join link: {{create-appointment.join_url}}.'
  consumes:
  - type: http
    namespace: scheduling
    baseUri: https://api.cigna.com/scheduling/v1
    authentication:
      type: bearer
      token: $secrets.scheduling_token
    resources:
    - name: availability
      path: /providers/{{provider_npi}}/availability
      inputParameters:
      - name: provider_npi
        in: path
      - name: date
        in: query
      operations:
      - name: get-availability
        method: GET
    - name: appointments
      path: /appointments
      operations:
      - name: create-appointment
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → telehealth-visit-scheduler.yml

Updates pharmacy formulary by reviewing drug evaluations, updating the formulary database, and notifying pharmacies.

naftiko: '0.5'
info:
  label: Pharmacy Formulary Update Orchestrator
  description: Updates pharmacy formulary by reviewing drug evaluations, updating the formulary database, and notifying pharmacies.
  tags:
  - pharmacy
  - clinical
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: pharmacy
    port: 8080
    tools:
    - name: run-pharmacy-formulary-update-orchestrator
      description: Updates pharmacy formulary by reviewing drug evaluations, updating the formulary database, and notifying pharmacies.
      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 Pharmacy Formulary Update Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → pharmacy-formulary-update-orchestrator.yml

Retrieves insurance policy details by policy number.

naftiko: '0.5'
info:
  label: Policy Details Lookup
  description: Retrieves insurance policy details by policy number.
  tags:
  - insurance
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: get-policy
      description: Retrieves insurance policy details by policy number.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The policy details lookup identifier.
      call: insurance-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: insurance-api
    baseUri: https://api.the-cigna-group.com/insurance/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: policy
      path: /policy/details/lookup/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-policy
        method: GET
Open in Framework → View in Fleet → policy-details-lookup.yml

Sends a notification to a Slack channel.

naftiko: '0.5'
info:
  label: Slack Notification Publisher
  description: Sends a notification to a Slack channel.
  tags:
  - communications
  - slack
capability:
  exposes:
  - type: mcp
    namespace: communications
    port: 8080
    tools:
    - name: get-slack
      description: Sends a notification to a Slack channel.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The slack notification publisher identifier.
      call: communications-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: communications-api
    baseUri: https://api.the-cigna-group.com/communications/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: slack
      path: /slack/notification/publisher/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-slack
        method: GET
Open in Framework → View in Fleet → slack-notification-publisher.yml

Retrieves a member's benefit summary including deductible status, out-of-pocket maximums, and copay schedule for a given plan year.

naftiko: '0.5'
info:
  label: Benefits Summary Viewer
  description: Retrieves a member's benefit summary including deductible status, out-of-pocket maximums, and copay schedule for a given plan year.
  tags:
  - benefits
  - member
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: benefits-inquiry
    port: 8080
    tools:
    - name: get-benefits-summary
      description: Retrieve benefit summary for a member.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: plan_year
        in: body
        type: string
        description: Plan year (e.g., 2026).
      call: benefits.get-summary
      with:
        member_id: '{{member_id}}'
        year: '{{plan_year}}'
      outputParameters:
      - name: deductible_met
        type: number
        mapping: $.deductibleMet
      - name: deductible_max
        type: number
        mapping: $.deductibleMax
      - name: oop_met
        type: number
        mapping: $.oopMet
      - name: oop_max
        type: number
        mapping: $.oopMax
  consumes:
  - type: http
    namespace: benefits
    baseUri: https://api.cigna.com/benefits/v1
    authentication:
      type: bearer
      token: $secrets.benefits_token
    resources:
    - name: summary
      path: /members/{{member_id}}/summary
      inputParameters:
      - name: member_id
        in: path
      - name: year
        in: query
      operations:
      - name: get-summary
        method: GET
Open in Framework → View in Fleet → benefits-summary-viewer.yml

Handles member grievances by documenting complaints, investigating issues, and tracking resolution.

naftiko: '0.5'
info:
  label: Member Grievance Orchestrator
  description: Handles member grievances by documenting complaints, investigating issues, and tracking resolution.
  tags:
  - customer-service
  - compliance
  - operations
capability:
  exposes:
  - type: mcp
    namespace: customer-service
    port: 8080
    tools:
    - name: run-member-grievance-orchestrator
      description: Handles member grievances by documenting complaints, investigating issues, and tracking resolution.
      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 Member Grievance Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → member-grievance-orchestrator.yml

Analyzes provider network gaps by evaluating coverage, identifying needs, and generating recruitment plans.

naftiko: '0.5'
info:
  label: Network Gap Analysis Orchestrator
  description: Analyzes provider network gaps by evaluating coverage, identifying needs, and generating recruitment plans.
  tags:
  - network
  - analytics
  - provider-management
capability:
  exposes:
  - type: mcp
    namespace: network
    port: 8080
    tools:
    - name: run-network-gap-analysis-orchestrator
      description: Analyzes provider network gaps by evaluating coverage, identifying needs, and generating recruitment 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 Network Gap Analysis Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → network-gap-analysis-orchestrator.yml

Retrieves a member's claims history for a specified date range. Used by customer service agents.

naftiko: '0.5'
info:
  label: Member Claims History Viewer
  description: Retrieves a member's claims history for a specified date range. Used by customer service agents.
  tags:
  - claims
  - member
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: claims-history
    port: 8080
    tools:
    - name: get-claims-history
      description: Retrieve member claims history.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: from_date
        in: body
        type: string
        description: Start date.
      call: claims.get-member-claims
      with:
        member_id: '{{member_id}}'
        from_date: '{{from_date}}'
      outputParameters:
      - name: claims
        type: array
        mapping: $.claims
      - name: total_count
        type: integer
        mapping: $.totalCount
  consumes:
  - type: http
    namespace: claims
    baseUri: https://api.cigna.com/claims/v1
    authentication:
      type: bearer
      token: $secrets.claims_token
    resources:
    - name: member-claims
      path: /members/{{member_id}}/claims
      inputParameters:
      - name: member_id
        in: path
      - name: from_date
        in: query
      operations:
      - name: get-member-claims
        method: GET
Open in Framework → View in Fleet → member-claims-history-viewer.yml

Processes an employer group enrollment file from S3: validates records, loads into the enrollment system, generates error reports, and emails the group administrator.

naftiko: '0.5'
info:
  label: Group Enrollment File Processor
  description: 'Processes an employer group enrollment file from S3: validates records, loads into the enrollment system, generates error reports, and emails the group administrator.'
  tags:
  - enrollment
  - group
  - amazon-s3
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: group-enrollment
    port: 8080
    tools:
    - name: process-enrollment-file
      description: Process an employer group enrollment file from S3.
      inputParameters:
      - name: s3_bucket
        in: body
        type: string
        description: S3 bucket name.
      - name: file_key
        in: body
        type: string
        description: S3 object key for the file.
      - name: group_id
        in: body
        type: string
        description: Employer group ID.
      - name: admin_email
        in: body
        type: string
        description: Group administrator email.
      steps:
      - name: get-file
        type: call
        call: s3.get-object
        with:
          bucket: '{{s3_bucket}}'
          key: '{{file_key}}'
      - name: process-records
        type: call
        call: enrollment.process-batch
        with:
          group_id: '{{group_id}}'
          file_data: '{{get-file.body}}'
      - name: notify-admin
        type: call
        call: outlook.send-email
        with:
          to: '{{admin_email}}'
          subject: Enrollment File Processed - Group {{group_id}}
          body: 'Your enrollment file has been processed. Records loaded: {{process-records.loaded_count}}. Errors: {{process-records.error_count}}.'
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key_id
      secretAccessKey: $secrets.aws_secret_access_key
      region: us-east-1
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: get-object
        method: GET
  - type: http
    namespace: enrollment
    baseUri: https://api.cigna.com/enrollment/v1
    authentication:
      type: bearer
      token: $secrets.enrollment_token
    resources:
    - name: batch
      path: /batch-enrollment
      operations:
      - name: process-batch
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → group-enrollment-file-processor.yml

Queries claims data from Snowflake, refreshes the Power BI claims analytics dashboard, and sends a summary to the claims leadership team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Claims Analytics Dashboard Refresh
  description: Queries claims data from Snowflake, refreshes the Power BI claims analytics dashboard, and sends a summary to the claims leadership team via Microsoft Teams.
  tags:
  - claims
  - analytics
  - snowflake
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: claims-analytics
    port: 8080
    tools:
    - name: refresh-claims-dashboard
      description: Refresh claims analytics dashboard and notify leadership.
      inputParameters:
      - name: pbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      - name: teams_webhook
        in: body
        type: string
        description: Teams webhook URL.
      steps:
      - name: query-metrics
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT claim_type, COUNT(*) as count, SUM(paid_amount) as total_paid, AVG(processing_days) as avg_days FROM CLAIMS.FACT_CLAIMS WHERE processed_date = CURRENT_DATE GROUP BY claim_type
      - name: refresh-pbi
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{pbi_dataset_id}}'
      - name: notify-leadership
        type: call
        call: msteams.send-message
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'Claims dashboard refreshed. Today''s metrics: {{query-metrics.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.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
  - type: http
    namespace: msteams
    baseUri: '{{webhook_url}}'
    authentication:
      type: none
    resources:
    - name: webhook
      path: ''
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → claims-analytics-dashboard-refresh.yml

Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.

naftiko: '0.5'
info:
  label: Executive Dashboard Refresh Orchestrator
  description: Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.
  tags:
  - analytics
  - power-bi
  - business
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-executive-dashboard-refresh-orchestrator
      description: Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Executive Dashboard Refresh Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → executive-dashboard-refresh-orchestrator.yml

Retrieves a Confluence wiki page.

naftiko: '0.5'
info:
  label: Confluence Page Viewer
  description: Retrieves a Confluence wiki page.
  tags:
  - collaboration
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: get-confluence
      description: Retrieves a Confluence wiki page.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The confluence page viewer identifier.
      call: collaboration-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: collaboration-api
    baseUri: https://api.the-cigna-group.com/collaboration/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: confluence
      path: /confluence/page/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-confluence
        method: GET
Open in Framework → View in Fleet → confluence-page-viewer.yml

Uploads a file to SharePoint. Used for report and document archival.

naftiko: '0.5'
info:
  label: SharePoint File Uploader
  description: Uploads a file to SharePoint. Used for report and document archival.
  tags:
  - document-management
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: doc-upload
    port: 8080
    tools:
    - name: upload-to-sharepoint
      description: Upload a file to SharePoint.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: folder_path
        in: body
        type: string
        description: Folder path.
      - name: file_name
        in: body
        type: string
        description: File name.
      call: sharepoint.upload-file
      with:
        site_id: '{{site_id}}'
        folder_path: '{{folder_path}}'
        file_name: '{{file_name}}'
      outputParameters:
      - name: web_url
        type: string
        mapping: $.webUrl
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → sharepoint-file-uploader.yml

Checks a member's pharmacy benefit coverage for a specific medication including formulary status, copay tier, and prior authorization requirements.

naftiko: '0.5'
info:
  label: Pharmacy Benefit Verification
  description: Checks a member's pharmacy benefit coverage for a specific medication including formulary status, copay tier, and prior authorization requirements.
  tags:
  - pharmacy
  - formulary
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-benefits
    port: 8080
    tools:
    - name: check-pharmacy-benefit
      description: Verify pharmacy benefit coverage for a specific medication.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: ndc_code
        in: body
        type: string
        description: National Drug Code.
      call: pharmacy.check-coverage
      with:
        member_id: '{{member_id}}'
        ndc: '{{ndc_code}}'
      outputParameters:
      - name: covered
        type: boolean
        mapping: $.isCovered
      - name: tier
        type: string
        mapping: $.formularyTier
      - name: copay
        type: number
        mapping: $.copayAmount
      - name: prior_auth_required
        type: boolean
        mapping: $.priorAuthRequired
  consumes:
  - type: http
    namespace: pharmacy
    baseUri: https://api.cigna.com/pharmacy/v1
    authentication:
      type: bearer
      token: $secrets.pharmacy_token
    resources:
    - name: coverage
      path: /members/{{member_id}}/coverage
      inputParameters:
      - name: member_id
        in: path
      - name: ndc
        in: query
      operations:
      - name: check-coverage
        method: GET
Open in Framework → View in Fleet → pharmacy-benefit-verification.yml

Retrieves a Jira ticket by issue key.

naftiko: '0.5'
info:
  label: Jira Ticket Viewer
  description: Retrieves a Jira ticket by issue key.
  tags:
  - engineering
  - jira
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-jira
      description: Retrieves a Jira ticket by issue key.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The jira ticket viewer identifier.
      call: engineering-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: engineering-api
    baseUri: https://api.the-cigna-group.com/engineering/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: jira
      path: /jira/ticket/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-jira
        method: GET
Open in Framework → View in Fleet → jira-ticket-viewer.yml

Queries approved claims from Snowflake, generates payment instructions, submits to the payment gateway, and logs payment confirmations in ServiceNow.

naftiko: '0.5'
info:
  label: Claim Payment Batch Processor
  description: Queries approved claims from Snowflake, generates payment instructions, submits to the payment gateway, and logs payment confirmations in ServiceNow.
  tags:
  - claims
  - payments
  - snowflake
  - servicenow
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: claim-payments
    port: 8080
    tools:
    - name: process-claim-payments
      description: Generate and submit claim payment batch.
      inputParameters:
      - name: payment_date
        in: body
        type: string
        description: Payment date in YYYY-MM-DD.
      steps:
      - name: get-approved-claims
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT claim_id, provider_npi, payment_amount FROM CLAIMS.APPROVED_FOR_PAYMENT WHERE payment_date = '{{payment_date}}'
      - name: submit-payments
        type: call
        call: payments.submit-batch
        with:
          payment_date: '{{payment_date}}'
          claims: '{{get-approved-claims.data}}'
      - name: log-payments
        type: call
        call: servicenow.create-record
        with:
          table: u_payment_log
          batch_id: '{{submit-payments.batch_id}}'
          claim_count: '{{get-approved-claims.row_count}}'
          total_amount: '{{submit-payments.total_amount}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.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: payments
    baseUri: https://api.cigna.com/payments/v1
    authentication:
      type: bearer
      token: $secrets.payments_token
    resources:
    - name: batches
      path: /batches
      operations:
      - name: submit-batch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://cigna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → claim-payment-batch-processor.yml

Retrieves a digital copy of a member's insurance ID card. Used by customer service and the member portal.

naftiko: '0.5'
info:
  label: Member ID Card Retrieval
  description: Retrieves a digital copy of a member's insurance ID card. Used by customer service and the member portal.
  tags:
  - member
  - enrollment
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: member-docs
    port: 8080
    tools:
    - name: get-id-card
      description: Retrieve a member's digital ID card.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      call: enrollment.get-id-card
      with:
        member_id: '{{member_id}}'
      outputParameters:
      - name: card_url
        type: string
        mapping: $.cardUrl
      - name: group_number
        type: string
        mapping: $.groupNumber
      - name: plan_name
        type: string
        mapping: $.planName
  consumes:
  - type: http
    namespace: enrollment
    baseUri: https://api.cigna.com/enrollment/v1
    authentication:
      type: bearer
      token: $secrets.enrollment_token
    resources:
    - name: id-cards
      path: /members/{{member_id}}/id-card
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: get-id-card
        method: GET
Open in Framework → View in Fleet → member-id-card-retrieval.yml

Processes a claim denial appeal: retrieves the original claim, submits the appeal with supporting documentation, and notifies the member and provider of the appeal status.

naftiko: '0.5'
info:
  label: Claim Denial Appeal Processor
  description: 'Processes a claim denial appeal: retrieves the original claim, submits the appeal with supporting documentation, and notifies the member and provider of the appeal status.'
  tags:
  - claims
  - appeals
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: appeals
    port: 8080
    tools:
    - name: process-appeal
      description: Submit and process a claim denial appeal.
      inputParameters:
      - name: claim_id
        in: body
        type: string
        description: Denied claim ID.
      - name: appeal_reason
        in: body
        type: string
        description: Reason for appeal.
      - name: member_email
        in: body
        type: string
        description: Member email.
      - name: provider_email
        in: body
        type: string
        description: Provider email.
      steps:
      - name: get-claim
        type: call
        call: claims.get-status
        with:
          claim_id: '{{claim_id}}'
      - name: submit-appeal
        type: call
        call: claims.submit-appeal
        with:
          claim_id: '{{claim_id}}'
          reason: '{{appeal_reason}}'
      - name: notify-member
        type: call
        call: outlook.send-email
        with:
          to: '{{member_email}}'
          subject: Cigna Claim Appeal Submitted - {{submit-appeal.appeal_id}}
          body: 'Your appeal for claim {{claim_id}} has been submitted. Appeal reference: {{submit-appeal.appeal_id}}. We will review within 30 days.'
      - name: notify-provider
        type: call
        call: outlook.send-email
        with:
          to: '{{provider_email}}'
          subject: Claim Appeal Filed - {{claim_id}}
          body: 'An appeal has been filed for claim {{claim_id}}. Appeal ID: {{submit-appeal.appeal_id}}.'
  consumes:
  - type: http
    namespace: claims
    baseUri: https://api.cigna.com/claims/v1
    authentication:
      type: bearer
      token: $secrets.claims_token
    resources:
    - name: claims
      path: /claims/{{claim_id}}
      inputParameters:
      - name: claim_id
        in: path
      operations:
      - name: get-status
        method: GET
    - name: appeals
      path: /claims/{{claim_id}}/appeal
      inputParameters:
      - name: claim_id
        in: path
      operations:
      - name: submit-appeal
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → claim-denial-appeal-processor.yml

Runs HEDIS quality measure calculations from Snowflake claims data, generates the quality report, uploads to SharePoint, and notifies the quality team via Slack.

naftiko: '0.5'
info:
  label: HEDIS Quality Metrics Pipeline
  description: Runs HEDIS quality measure calculations from Snowflake claims data, generates the quality report, uploads to SharePoint, and notifies the quality team via Slack.
  tags:
  - care-management
  - quality
  - hedis
  - snowflake
  - sharepoint
  - slack
capability:
  exposes:
  - type: mcp
    namespace: quality-metrics
    port: 8080
    tools:
    - name: calculate-hedis-metrics
      description: Calculate HEDIS metrics, generate report, and notify quality team.
      inputParameters:
      - name: measure_year
        in: body
        type: string
        description: HEDIS measurement year.
      - name: sharepoint_site
        in: body
        type: string
        description: SharePoint site ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for quality team.
      steps:
      - name: calculate-measures
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL QUALITY.CALCULATE_HEDIS_MEASURES('{{measure_year}}')
      - name: get-results
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT measure_name, numerator, denominator, rate FROM QUALITY.HEDIS_RESULTS WHERE year = '{{measure_year}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: '{{sharepoint_site}}'
          folder_path: HEDIS/{{measure_year}}
          file_name: hedis_results_{{measure_year}}.json
      - name: notify-quality
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: HEDIS metrics for {{measure_year}} calculated. Report uploaded to SharePoint.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: 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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → hedis-quality-metrics-pipeline.yml

Retrieves a Salesforce account by account ID.

naftiko: '0.5'
info:
  label: Salesforce Account Viewer
  description: Retrieves a Salesforce account by account ID.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: get-salesforce
      description: Retrieves a Salesforce account by account ID.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The salesforce account viewer identifier.
      call: sales-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: sales-api
    baseUri: https://api.the-cigna-group.com/sales/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: salesforce
      path: /salesforce/account/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-salesforce
        method: GET
Open in Framework → View in Fleet → salesforce-account-viewer.yml

Creates a care management referral for a member with chronic conditions, assigns a care coordinator, creates a care plan, and notifies the member via email.

naftiko: '0.5'
info:
  label: Care Management Referral Creator
  description: Creates a care management referral for a member with chronic conditions, assigns a care coordinator, creates a care plan, and notifies the member via email.
  tags:
  - care-management
  - chronic-care
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: care-management
    port: 8080
    tools:
    - name: create-care-referral
      description: Create a care management referral and assign a coordinator.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: condition
        in: body
        type: string
        description: Primary chronic condition.
      - name: referring_provider_npi
        in: body
        type: string
        description: Referring provider NPI.
      - name: member_email
        in: body
        type: string
        description: Member email.
      steps:
      - name: create-referral
        type: call
        call: caremanagement.create-referral
        with:
          member_id: '{{member_id}}'
          condition: '{{condition}}'
          referring_npi: '{{referring_provider_npi}}'
      - name: assign-coordinator
        type: call
        call: caremanagement.assign-coordinator
        with:
          referral_id: '{{create-referral.referral_id}}'
          condition: '{{condition}}'
      - name: create-plan
        type: call
        call: caremanagement.create-care-plan
        with:
          referral_id: '{{create-referral.referral_id}}'
          member_id: '{{member_id}}'
      - name: notify-member
        type: call
        call: outlook.send-email
        with:
          to: '{{member_email}}'
          subject: Cigna Care Management - Your Care Coordinator
          body: You have been enrolled in our care management program for {{condition}}. Your care coordinator is {{assign-coordinator.coordinator_name}}. They will reach out within 48 hours.
  consumes:
  - type: http
    namespace: caremanagement
    baseUri: https://api.cigna.com/care-management/v1
    authentication:
      type: bearer
      token: $secrets.caremanagement_token
    resources:
    - name: referrals
      path: /referrals
      operations:
      - name: create-referral
        method: POST
    - name: coordinators
      path: /referrals/{{referral_id}}/coordinator
      inputParameters:
      - name: referral_id
        in: path
      operations:
      - name: assign-coordinator
        method: POST
    - name: care-plans
      path: /care-plans
      operations:
      - name: create-care-plan
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → care-management-referral-creator.yml

Queries utilization data from Snowflake, generates a utilization review report, and uploads it to SharePoint for medical directors.

naftiko: '0.5'
info:
  label: Utilization Review Report Generator
  description: Queries utilization data from Snowflake, generates a utilization review report, and uploads it to SharePoint for medical directors.
  tags:
  - care-management
  - utilization
  - snowflake
  - sharepoint
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: utilization-review
    port: 8080
    tools:
    - name: generate-utilization-report
      description: Generate utilization review report from Snowflake and publish to SharePoint.
      inputParameters:
      - name: report_period
        in: body
        type: string
        description: Report period in YYYY-MM format.
      - name: sharepoint_site
        in: body
        type: string
        description: SharePoint site ID.
      steps:
      - name: query-utilization
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT service_category, admit_count, readmit_count, avg_los FROM CLINICAL.UTILIZATION_METRICS WHERE period = '{{report_period}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: '{{sharepoint_site}}'
          folder_path: UtilizationReviews
          file_name: utilization_{{report_period}}.json
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → utilization-review-report-generator.yml

Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.

naftiko: '0.5'
info:
  label: Data Governance Review Orchestrator
  description: Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.
  tags:
  - data-governance
  - compliance
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: run-data-governance-review-orchestrator
      description: Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Data Governance Review Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → data-governance-review-orchestrator.yml

Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.

naftiko: '0.5'
info:
  label: Cross-Functional Project Kickoff Orchestrator
  description: Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.
  tags:
  - project-management
  - collaboration
  - operations
capability:
  exposes:
  - type: mcp
    namespace: project-management
    port: 8080
    tools:
    - name: run-cross-functional-project-kickoff-orchestrator
      description: Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Cross-Functional Project Kickoff Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → cross-functional-project-kickoff-orchestrator.yml

Runs population health analytics from Snowflake claims data, identifies high-risk members, creates care management referrals, and alerts the care team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Population Health Risk Stratification
  description: Runs population health analytics from Snowflake claims data, identifies high-risk members, creates care management referrals, and alerts the care team via Microsoft Teams.
  tags:
  - care-management
  - analytics
  - snowflake
  - microsoft-teams
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: population-health
    port: 8080
    tools:
    - name: stratify-population-risk
      description: Run risk stratification and create care referrals for high-risk members.
      inputParameters:
      - name: cohort
        in: body
        type: string
        description: Population cohort name.
      - name: risk_threshold
        in: body
        type: number
        description: Risk score threshold for intervention.
      - name: teams_webhook
        in: body
        type: string
        description: Teams webhook for care team notification.
      steps:
      - name: run-stratification
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL CLINICAL.RUN_RISK_STRATIFICATION('{{cohort}}', {{risk_threshold}})
      - name: get-high-risk
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT member_id, risk_score, top_conditions FROM CLINICAL.HIGH_RISK_MEMBERS WHERE cohort = '{{cohort}}' AND risk_score >= {{risk_threshold}}
      - name: create-referrals
        type: call
        call: caremanagement.batch-referrals
        with:
          members: '{{get-high-risk.data}}'
      - name: notify-care-team
        type: call
        call: msteams.send-message
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'Population health: {{get-high-risk.row_count}} high-risk members identified in {{cohort}}. Referrals created.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.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: caremanagement
    baseUri: https://api.cigna.com/care-management/v1
    authentication:
      type: bearer
      token: $secrets.caremanagement_token
    resources:
    - name: batch-referrals
      path: /referrals/batch
      operations:
      - name: batch-referrals
        method: POST
  - type: http
    namespace: msteams
    baseUri: '{{webhook_url}}'
    authentication:
      type: none
    resources:
    - name: webhook
      path: ''
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → population-health-risk-stratification.yml

Retrieves a member's dental benefit coverage including annual maximum, deductible, and covered services.

naftiko: '0.5'
info:
  label: Dental Benefits Viewer
  description: Retrieves a member's dental benefit coverage including annual maximum, deductible, and covered services.
  tags:
  - benefits
  - dental
  - member
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: dental-benefits
    port: 8080
    tools:
    - name: get-dental-benefits
      description: Retrieve dental benefit details for a member.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      call: benefits.get-dental
      with:
        member_id: '{{member_id}}'
      outputParameters:
      - name: annual_max
        type: number
        mapping: $.annualMaximum
      - name: deductible
        type: number
        mapping: $.deductible
      - name: covered_services
        type: array
        mapping: $.coveredServices
  consumes:
  - type: http
    namespace: benefits
    baseUri: https://api.cigna.com/benefits/v1
    authentication:
      type: bearer
      token: $secrets.benefits_token
    resources:
    - name: dental
      path: /members/{{member_id}}/dental
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: get-dental
        method: GET
Open in Framework → View in Fleet → dental-benefits-viewer.yml

Orchestrates provider credentialing: verifies medical license, checks NPDB, validates DEA certification, updates provider status in the directory, and notifies via ServiceNow.

naftiko: '0.5'
info:
  label: Provider Credentialing Pipeline
  description: 'Orchestrates provider credentialing: verifies medical license, checks NPDB, validates DEA certification, updates provider status in the directory, and notifies via ServiceNow.'
  tags:
  - provider
  - credentialing
  - compliance
  - servicenow
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: credentialing
    port: 8080
    tools:
    - name: credential-provider
      description: Run full provider credentialing workflow.
      inputParameters:
      - name: provider_npi
        in: body
        type: string
        description: Provider NPI number.
      - name: provider_name
        in: body
        type: string
        description: Provider full name.
      - name: license_number
        in: body
        type: string
        description: Medical license number.
      - name: state
        in: body
        type: string
        description: State of licensure.
      steps:
      - name: verify-license
        type: call
        call: credentialing.verify-license
        with:
          license_number: '{{license_number}}'
          state: '{{state}}'
      - name: check-npdb
        type: call
        call: credentialing.check-npdb
        with:
          npi: '{{provider_npi}}'
          name: '{{provider_name}}'
      - name: verify-dea
        type: call
        call: credentialing.verify-dea
        with:
          npi: '{{provider_npi}}'
      - name: update-directory
        type: call
        call: provider.update-status
        with:
          npi: '{{provider_npi}}'
          credential_status: verified
          license_verified: '{{verify-license.is_valid}}'
          npdb_clear: '{{check-npdb.is_clear}}'
      - name: log-credentialing
        type: call
        call: servicenow.create-record
        with:
          table: u_provider_credentialing
          provider_npi: '{{provider_npi}}'
          status: completed
          result: '{{verify-license.is_valid}}'
  consumes:
  - type: http
    namespace: credentialing
    baseUri: https://api.cigna.com/credentialing/v1
    authentication:
      type: bearer
      token: $secrets.credentialing_token
    resources:
    - name: license
      path: /verify-license
      operations:
      - name: verify-license
        method: POST
    - name: npdb
      path: /npdb-check
      operations:
      - name: check-npdb
        method: POST
    - name: dea
      path: /verify-dea
      operations:
      - name: verify-dea
        method: POST
  - type: http
    namespace: provider
    baseUri: https://api.cigna.com/provider/v1
    authentication:
      type: bearer
      token: $secrets.provider_token
    resources:
    - name: providers
      path: /providers/{{npi}}
      inputParameters:
      - name: npi
        in: path
      operations:
      - name: update-status
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://cigna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → provider-credentialing-pipeline.yml

Searches for providers in the insurance network.

naftiko: '0.5'
info:
  label: Provider Network Lookup
  description: Searches for providers in the insurance network.
  tags:
  - network
  - provider-management
capability:
  exposes:
  - type: mcp
    namespace: network
    port: 8080
    tools:
    - name: get-provider
      description: Searches for providers in the insurance network.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The provider network lookup identifier.
      call: network-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: network-api
    baseUri: https://api.the-cigna-group.com/network/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: provider
      path: /provider/network/lookup/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-provider
        method: GET
Open in Framework → View in Fleet → provider-network-lookup.yml

Identifies members with preventive care gaps from Snowflake, generates outreach lists, creates Salesforce campaigns, and sends reminder emails to close care gaps.

naftiko: '0.5'
info:
  label: Preventive Care Gap Closer
  description: Identifies members with preventive care gaps from Snowflake, generates outreach lists, creates Salesforce campaigns, and sends reminder emails to close care gaps.
  tags:
  - care-management
  - preventive-care
  - snowflake
  - salesforce
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: care-gaps
    port: 8080
    tools:
    - name: close-care-gaps
      description: Identify care gaps, create outreach campaigns, and send reminders.
      inputParameters:
      - name: measure_name
        in: body
        type: string
        description: Preventive care measure name.
      - name: plan_year
        in: body
        type: string
        description: Plan year.
      steps:
      - name: find-gaps
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT member_id, email, last_service_date FROM QUALITY.CARE_GAPS WHERE measure = '{{measure_name}}' AND plan_year = '{{plan_year}}'
      - name: create-campaign
        type: call
        call: salesforce.create-record
        with:
          object: Campaign
          Name: 'Care Gap Closure: {{measure_name}} {{plan_year}}'
          Type: Outreach
      - name: send-reminders
        type: call
        call: outlook.send-email
        with:
          to: '{{find-gaps.data}}'
          subject: Cigna - Schedule Your {{measure_name}}
          body: Our records show you may be due for {{measure_name}}. Schedule with your provider today. Many preventive services are covered at no cost.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://cigna.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /sobjects/{{object}}
      inputParameters:
      - name: object
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → preventive-care-gap-closer.yml

Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.

naftiko: '0.5'
info:
  label: Procurement Spend Analysis Orchestrator
  description: Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.
  tags:
  - procurement
  - analytics
  - finance
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: run-procurement-spend-analysis-orchestrator
      description: Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Procurement Spend Analysis Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → procurement-spend-analysis-orchestrator.yml

Manages provider contract negotiations by analyzing reimbursement data, modeling proposals, and tracking agreements.

naftiko: '0.5'
info:
  label: Provider Contract Negotiation Orchestrator
  description: Manages provider contract negotiations by analyzing reimbursement data, modeling proposals, and tracking agreements.
  tags:
  - provider-management
  - finance
  - legal
capability:
  exposes:
  - type: mcp
    namespace: provider-management
    port: 8080
    tools:
    - name: run-provider-contract-negotiation-orchestrator
      description: Manages provider contract negotiations by analyzing reimbursement data, modeling proposals, and tracking agreements.
      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 Provider Contract Negotiation Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → provider-contract-negotiation-orchestrator.yml

Runs an analytics query against the Snowflake data warehouse.

naftiko: '0.5'
info:
  label: Snowflake Analytics Query
  description: Runs an analytics query against the Snowflake data warehouse.
  tags:
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-snowflake
      description: Runs an analytics query against the Snowflake data warehouse.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The snowflake analytics query identifier.
      call: analytics-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: analytics-api
    baseUri: https://api.the-cigna-group.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: snowflake
      path: /snowflake/analytics/query/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-snowflake
        method: GET
Open in Framework → View in Fleet → snowflake-analytics-query.yml

Retrieves the current processing status of a medical claim including adjudication result, payment amount, and date. Used by members and customer service.

naftiko: '0.5'
info:
  label: Claim Status Viewer
  description: Retrieves the current processing status of a medical claim including adjudication result, payment amount, and date. Used by members and customer service.
  tags:
  - claims
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: claims-inquiry
    port: 8080
    tools:
    - name: get-claim-status
      description: Look up claim processing status by claim ID.
      inputParameters:
      - name: claim_id
        in: body
        type: string
        description: The claim ID.
      call: claims.get-status
      with:
        claim_id: '{{claim_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.claimStatus
      - name: paid_amount
        type: number
        mapping: $.paidAmount
      - name: member_responsibility
        type: number
        mapping: $.memberResponsibility
      - name: payment_date
        type: string
        mapping: $.paymentDate
  consumes:
  - type: http
    namespace: claims
    baseUri: https://api.cigna.com/claims/v1
    authentication:
      type: bearer
      token: $secrets.claims_token
    resources:
    - name: claims
      path: /claims/{{claim_id}}
      inputParameters:
      - name: claim_id
        in: path
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → claim-status-viewer.yml

Retrieves available disease management programs for a given chronic condition including eligibility criteria and contact information.

naftiko: '0.5'
info:
  label: Disease Management Program Lookup
  description: Retrieves available disease management programs for a given chronic condition including eligibility criteria and contact information.
  tags:
  - care-management
  - chronic-care
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: disease-mgmt
    port: 8080
    tools:
    - name: get-dm-programs
      description: Look up disease management programs by condition.
      inputParameters:
      - name: condition
        in: body
        type: string
        description: Chronic condition.
      call: caremanagement.get-programs
      with:
        condition: '{{condition}}'
      outputParameters:
      - name: programs
        type: array
        mapping: $.programs
      - name: count
        type: integer
        mapping: $.totalCount
  consumes:
  - type: http
    namespace: caremanagement
    baseUri: https://api.cigna.com/care-management/v1
    authentication:
      type: bearer
      token: $secrets.caremanagement_token
    resources:
    - name: programs
      path: /programs
      inputParameters:
      - name: condition
        in: query
      operations:
      - name: get-programs
        method: GET
Open in Framework → View in Fleet → disease-management-program-lookup.yml

Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.

naftiko: '0.5'
info:
  label: Annual Compliance Certification Orchestrator
  description: Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.
  tags:
  - compliance
  - hr
  - legal
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: run-annual-compliance-certification-orchestrator
      description: Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Annual Compliance Certification Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → annual-compliance-certification-orchestrator.yml

Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.

naftiko: '0.5'
info:
  label: Disaster Recovery Test Orchestrator
  description: Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.
  tags:
  - infrastructure
  - operations
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: infrastructure
    port: 8080
    tools:
    - name: run-disaster-recovery-test-orchestrator
      description: Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Disaster Recovery Test Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → disaster-recovery-test-orchestrator.yml

Retrieves a member's current deductible accumulation across medical and pharmacy claims for the current plan year.

naftiko: '0.5'
info:
  label: Member Deductible Tracker
  description: Retrieves a member's current deductible accumulation across medical and pharmacy claims for the current plan year.
  tags:
  - benefits
  - deductible
  - member
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: accumulators
    port: 8080
    tools:
    - name: get-deductible-status
      description: Get member deductible accumulation for the current plan year.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      call: benefits.get-accumulators
      with:
        member_id: '{{member_id}}'
      outputParameters:
      - name: medical_deductible_met
        type: number
        mapping: $.medicalDeductibleMet
      - name: medical_deductible_max
        type: number
        mapping: $.medicalDeductibleMax
      - name: rx_deductible_met
        type: number
        mapping: $.rxDeductibleMet
      - name: rx_deductible_max
        type: number
        mapping: $.rxDeductibleMax
  consumes:
  - type: http
    namespace: benefits
    baseUri: https://api.cigna.com/benefits/v1
    authentication:
      type: bearer
      token: $secrets.benefits_token
    resources:
    - name: accumulators
      path: /members/{{member_id}}/accumulators
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: get-accumulators
        method: GET
Open in Framework → View in Fleet → member-deductible-tracker.yml

Retrieves a member's vision benefit coverage including exam copay, frames allowance, and contact lens benefit.

naftiko: '0.5'
info:
  label: Vision Benefits Viewer
  description: Retrieves a member's vision benefit coverage including exam copay, frames allowance, and contact lens benefit.
  tags:
  - benefits
  - vision
  - member
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: vision-benefits
    port: 8080
    tools:
    - name: get-vision-benefits
      description: Retrieve vision benefit details for a member.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      call: benefits.get-vision
      with:
        member_id: '{{member_id}}'
      outputParameters:
      - name: exam_copay
        type: number
        mapping: $.examCopay
      - name: frames_allowance
        type: number
        mapping: $.framesAllowance
      - name: contact_lens_benefit
        type: number
        mapping: $.contactLensBenefit
  consumes:
  - type: http
    namespace: benefits
    baseUri: https://api.cigna.com/benefits/v1
    authentication:
      type: bearer
      token: $secrets.benefits_token
    resources:
    - name: vision
      path: /members/{{member_id}}/vision
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: get-vision
        method: GET
Open in Framework → View in Fleet → vision-benefits-viewer.yml

Detects fraud waste and abuse by analyzing claim patterns, flagging anomalies, and routing for investigation.

naftiko: '0.5'
info:
  label: Fraud Waste Abuse Detection Orchestrator
  description: Detects fraud waste and abuse by analyzing claim patterns, flagging anomalies, and routing for investigation.
  tags:
  - compliance
  - analytics
  - claims
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: run-fraud-waste-abuse-detection-orchestrator
      description: Detects fraud waste and abuse by analyzing claim patterns, flagging anomalies, and routing for investigation.
      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 Fraud Waste Abuse Detection Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → fraud-waste-abuse-detection-orchestrator.yml

Retrieves a Jira issue by key. Used by IT and project teams.

naftiko: '0.5'
info:
  label: Jira Issue Viewer
  description: Retrieves a Jira issue by key. Used by IT and project teams.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: pm-lookup
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: summary
        type: string
        mapping: $.fields.summary
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
  consumes:
  - type: http
    namespace: jira
    baseUri: https://cigna.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-viewer.yml

Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.

naftiko: '0.5'
info:
  label: Third Party Risk Assessment Orchestrator
  description: Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.
  tags:
  - risk
  - procurement
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: risk
    port: 8080
    tools:
    - name: run-third-party-risk-assessment-orchestrator
      description: Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Third Party Risk Assessment Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → third-party-risk-assessment-orchestrator.yml

Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.

naftiko: '0.5'
info:
  label: Digital Transformation Progress Orchestrator
  description: Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.
  tags:
  - strategy
  - analytics
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: strategy
    port: 8080
    tools:
    - name: run-digital-transformation-progress-orchestrator
      description: Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Digital Transformation Progress Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → digital-transformation-progress-orchestrator.yml

Queries provider network data from Snowflake by region and specialty, calculates adequacy metrics, and uploads the report to SharePoint for regulatory compliance.

naftiko: '0.5'
info:
  label: Network Adequacy Report Generator
  description: Queries provider network data from Snowflake by region and specialty, calculates adequacy metrics, and uploads the report to SharePoint for regulatory compliance.
  tags:
  - provider
  - compliance
  - network-adequacy
  - snowflake
  - sharepoint
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: network-adequacy
    port: 8080
    tools:
    - name: generate-adequacy-report
      description: Generate network adequacy report for regulatory compliance.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Geographic region.
      - name: reporting_period
        in: body
        type: string
        description: Reporting period.
      - name: sharepoint_site
        in: body
        type: string
        description: SharePoint site ID.
      steps:
      - name: query-network
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT specialty, provider_count, member_count, ratio FROM NETWORK.ADEQUACY_METRICS WHERE region = '{{region}}' AND period = '{{reporting_period}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: '{{sharepoint_site}}'
          folder_path: NetworkAdequacy/{{region}}
          file_name: adequacy_{{reporting_period}}.json
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → network-adequacy-report-generator.yml

Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.

naftiko: '0.5'
info:
  label: Infrastructure Capacity Planning Orchestrator
  description: Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.
  tags:
  - infrastructure
  - planning
  - finance
capability:
  exposes:
  - type: mcp
    namespace: infrastructure
    port: 8080
    tools:
    - name: run-infrastructure-capacity-planning-orchestrator
      description: Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Infrastructure Capacity Planning Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → infrastructure-capacity-planning-orchestrator.yml

Submits a prior authorization request for a medical procedure: validates member eligibility, checks clinical criteria, submits the auth request, and notifies the provider and member.

naftiko: '0.5'
info:
  label: Prior Authorization Request Pipeline
  description: 'Submits a prior authorization request for a medical procedure: validates member eligibility, checks clinical criteria, submits the auth request, and notifies the provider and member.'
  tags:
  - claims
  - prior-authorization
  - care-management
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: prior-auth
    port: 8080
    tools:
    - name: submit-prior-auth
      description: Submit and process a prior authorization request.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: provider_npi
        in: body
        type: string
        description: Requesting provider NPI.
      - name: procedure_code
        in: body
        type: string
        description: CPT code requiring authorization.
      - name: diagnosis_code
        in: body
        type: string
        description: ICD-10 diagnosis code.
      - name: provider_email
        in: body
        type: string
        description: Provider contact email.
      steps:
      - name: verify-eligibility
        type: call
        call: eligibility.verify-member
        with:
          member_id: '{{member_id}}'
      - name: check-clinical
        type: call
        call: utilization.check-criteria
        with:
          procedure_code: '{{procedure_code}}'
          diagnosis_code: '{{diagnosis_code}}'
          plan_id: '{{verify-eligibility.plan_id}}'
      - name: submit-auth
        type: call
        call: utilization.create-auth
        with:
          member_id: '{{member_id}}'
          provider_npi: '{{provider_npi}}'
          procedure_code: '{{procedure_code}}'
          diagnosis_code: '{{diagnosis_code}}'
          clinical_decision: '{{check-clinical.decision}}'
      - name: notify-provider
        type: call
        call: outlook.send-email
        with:
          to: '{{provider_email}}'
          subject: Prior Authorization Decision - {{submit-auth.auth_number}}
          body: 'Authorization {{submit-auth.auth_number}} for member {{member_id}}: {{submit-auth.decision}}. Procedure: {{procedure_code}}.'
  consumes:
  - type: http
    namespace: eligibility
    baseUri: https://api.cigna.com/eligibility/v1
    authentication:
      type: bearer
      token: $secrets.eligibility_token
    resources:
    - name: members
      path: /members/{{member_id}}/verify
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: verify-member
        method: GET
  - type: http
    namespace: utilization
    baseUri: https://api.cigna.com/utilization/v1
    authentication:
      type: bearer
      token: $secrets.utilization_token
    resources:
    - name: criteria
      path: /clinical-criteria
      operations:
      - name: check-criteria
        method: POST
    - name: authorizations
      path: /authorizations
      operations:
      - name: create-auth
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → prior-authorization-request-pipeline.yml

Generates an Explanation of Benefits document for a processed claim, uploads it to SharePoint, and emails the member a notification with a link to view it.

naftiko: '0.5'
info:
  label: Explanation of Benefits Generator
  description: Generates an Explanation of Benefits document for a processed claim, uploads it to SharePoint, and emails the member a notification with a link to view it.
  tags:
  - claims
  - eob
  - sharepoint
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: eob-generation
    port: 8080
    tools:
    - name: generate-eob
      description: Generate an EOB for a processed claim and deliver to the member.
      inputParameters:
      - name: claim_id
        in: body
        type: string
        description: Processed claim ID.
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: member_email
        in: body
        type: string
        description: Member email address.
      steps:
      - name: get-claim
        type: call
        call: claims.get-status
        with:
          claim_id: '{{claim_id}}'
      - name: generate-doc
        type: call
        call: documents.generate-eob
        with:
          claim_id: '{{claim_id}}'
          member_id: '{{member_id}}'
      - name: upload-eob
        type: call
        call: sharepoint.upload-file
        with:
          site_id: member_documents
          folder_path: EOB/{{member_id}}
          file_name: EOB_{{claim_id}}.pdf
      - name: notify-member
        type: call
        call: outlook.send-email
        with:
          to: '{{member_email}}'
          subject: Your Explanation of Benefits is ready
          body: 'Your EOB for claim {{claim_id}} is available. Amount paid: ${{get-claim.paidAmount}}. Your responsibility: ${{get-claim.memberResponsibility}}.'
  consumes:
  - type: http
    namespace: claims
    baseUri: https://api.cigna.com/claims/v1
    authentication:
      type: bearer
      token: $secrets.claims_token
    resources:
    - name: claims
      path: /claims/{{claim_id}}
      inputParameters:
      - name: claim_id
        in: path
      operations:
      - name: get-status
        method: GET
  - type: http
    namespace: documents
    baseUri: https://api.cigna.com/documents/v1
    authentication:
      type: bearer
      token: $secrets.documents_token
    resources:
    - name: eob
      path: /eob
      operations:
      - name: generate-eob
        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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → explanation-of-benefits-generator.yml

Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.

naftiko: '0.5'
info:
  label: Marketing Campaign Performance Orchestrator
  description: Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.
  tags:
  - marketing
  - analytics
  - finance
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: run-marketing-campaign-performance-orchestrator
      description: Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Marketing Campaign Performance Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → marketing-campaign-performance-orchestrator.yml

Sends a message to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Message Sender
  description: Sends a message to a Microsoft Teams channel.
  tags:
  - communications
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: communications
    port: 8080
    tools:
    - name: get-microsoft
      description: Sends a message to a Microsoft Teams channel.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The microsoft teams message sender identifier.
      call: communications-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: communications-api
    baseUri: https://api.the-cigna-group.com/communications/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: microsoft
      path: /microsoft/teams/message/sender/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-microsoft
        method: GET
Open in Framework → View in Fleet → microsoft-teams-message-sender.yml

When a behavioral health claim pattern is detected, triggers a member outreach workflow: pulls clinical history, creates a behavioral health referral, and contacts the member.

naftiko: '0.5'
info:
  label: Behavioral Health Assessment Trigger
  description: 'When a behavioral health claim pattern is detected, triggers a member outreach workflow: pulls clinical history, creates a behavioral health referral, and contacts the member.'
  tags:
  - care-management
  - behavioral-health
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: behavioral-health
    port: 8080
    tools:
    - name: trigger-bh-outreach
      description: Trigger behavioral health outreach based on claims patterns.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: trigger_reason
        in: body
        type: string
        description: Reason for behavioral health trigger.
      - name: member_email
        in: body
        type: string
        description: Member email.
      steps:
      - name: get-clinical-history
        type: call
        call: claims.get-member-claims
        with:
          member_id: '{{member_id}}'
          category: behavioral_health
      - name: create-bh-referral
        type: call
        call: caremanagement.create-referral
        with:
          member_id: '{{member_id}}'
          condition: behavioral_health
          reason: '{{trigger_reason}}'
      - name: contact-member
        type: call
        call: outlook.send-email
        with:
          to: '{{member_email}}'
          subject: Cigna Behavioral Health Support
          body: We want to make sure you have the behavioral health support you need. A care coordinator will contact you to discuss available resources and programs.
  consumes:
  - type: http
    namespace: claims
    baseUri: https://api.cigna.com/claims/v1
    authentication:
      type: bearer
      token: $secrets.claims_token
    resources:
    - name: member-claims
      path: /members/{{member_id}}/claims
      inputParameters:
      - name: member_id
        in: path
      - name: category
        in: query
      operations:
      - name: get-member-claims
        method: GET
  - type: http
    namespace: caremanagement
    baseUri: https://api.cigna.com/care-management/v1
    authentication:
      type: bearer
      token: $secrets.caremanagement_token
    resources:
    - name: referrals
      path: /referrals
      operations:
      - name: create-referral
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → behavioral-health-assessment-trigger.yml

Calculates the Medical Loss Ratio from Snowflake financial data for a given reporting period and emails the results to the finance team.

naftiko: '0.5'
info:
  label: Medical Loss Ratio Calculator
  description: Calculates the Medical Loss Ratio from Snowflake financial data for a given reporting period and emails the results to the finance team.
  tags:
  - compliance
  - financial
  - mlr
  - snowflake
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: mlr-calculation
    port: 8080
    tools:
    - name: calculate-mlr
      description: Calculate Medical Loss Ratio and report to finance.
      inputParameters:
      - name: reporting_period
        in: body
        type: string
        description: Reporting period.
      - name: finance_email
        in: body
        type: string
        description: Finance team email.
      steps:
      - name: calculate
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL FINANCE.CALCULATE_MLR('{{reporting_period}}')
      - name: email-results
        type: call
        call: outlook.send-email
        with:
          to: '{{finance_email}}'
          subject: Medical Loss Ratio - {{reporting_period}}
          body: 'MLR calculation complete for {{reporting_period}}. Results: {{calculate.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → medical-loss-ratio-calculator.yml

Sends a message to a Slack channel. Used across Cigna operations for alerts and notifications.

naftiko: '0.5'
info:
  label: Slack Notification Sender
  description: Sends a message to a Slack channel. Used across Cigna operations for alerts and notifications.
  tags:
  - notification
  - slack
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: notifications
    port: 8080
    tools:
    - name: send-slack-message
      description: Send a message to a Slack channel.
      inputParameters:
      - name: channel
        in: body
        type: string
        description: Slack channel.
      - name: text
        in: body
        type: string
        description: Message text.
      call: slack.post-message
      with:
        channel: '{{channel}}'
        text: '{{text}}'
      outputParameters:
      - name: ts
        type: string
        mapping: $.ts
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-notification-sender.yml

Enrolls a member in a wellness program, creates their wellness profile, assigns wellness goals, and sends a welcome package email.

naftiko: '0.5'
info:
  label: Member Wellness Program Enrollment
  description: Enrolls a member in a wellness program, creates their wellness profile, assigns wellness goals, and sends a welcome package email.
  tags:
  - wellness
  - care-management
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: wellness
    port: 8080
    tools:
    - name: enroll-wellness-program
      description: Enroll a member in a wellness program with goals and welcome messaging.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: program_name
        in: body
        type: string
        description: Wellness program name.
      - name: member_email
        in: body
        type: string
        description: Member email.
      steps:
      - name: enroll-member
        type: call
        call: wellness.enroll
        with:
          member_id: '{{member_id}}'
          program: '{{program_name}}'
      - name: set-goals
        type: call
        call: wellness.set-goals
        with:
          enrollment_id: '{{enroll-member.enrollment_id}}'
          program: '{{program_name}}'
      - name: send-welcome
        type: call
        call: outlook.send-email
        with:
          to: '{{member_email}}'
          subject: Welcome to Cigna {{program_name}}!
          body: You are enrolled in {{program_name}}. Your wellness goals have been set. Track your progress in the Cigna app.
  consumes:
  - type: http
    namespace: wellness
    baseUri: https://api.cigna.com/wellness/v1
    authentication:
      type: bearer
      token: $secrets.wellness_token
    resources:
    - name: enrollments
      path: /enrollments
      operations:
      - name: enroll
        method: POST
    - name: goals
      path: /enrollments/{{enrollment_id}}/goals
      inputParameters:
      - name: enrollment_id
        in: path
      operations:
      - name: set-goals
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → member-wellness-program-enrollment.yml

Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.

naftiko: '0.5'
info:
  label: Quarterly Business Review Orchestrator
  description: Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.
  tags:
  - analytics
  - business
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-quarterly-business-review-orchestrator
      description: Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Quarterly Business Review Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → quarterly-business-review-orchestrator.yml

Orchestrates insurance workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Insurance Workflow 4
  description: Orchestrates insurance workflow 4 by coordinating across systems, validating data, and sending notifications.
  tags:
  - insurance
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: run-insurance-workflow-004
      description: Orchestrates insurance 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 Insurance Workflow 4 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → insurance-workflow-4.yml

Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.

naftiko: '0.5'
info:
  label: Security Audit Orchestrator
  description: Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.
  tags:
  - security
  - servicenow
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: run-security-audit-orchestrator
      description: Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Security Audit Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → security-audit-orchestrator.yml

Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.

naftiko: '0.5'
info:
  label: Vendor Contract Renewal Pipeline
  description: Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.
  tags:
  - procurement
  - legal
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: run-vendor-contract-renewal-pipeline
      description: Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Vendor Contract Renewal Pipeline for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → vendor-contract-renewal-pipeline.yml

Orchestrates insurance workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Insurance Workflow 5
  description: Orchestrates insurance workflow 5 by coordinating across systems, validating data, and sending notifications.
  tags:
  - insurance
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: run-insurance-workflow-005
      description: Orchestrates insurance 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 Insurance Workflow 5 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → insurance-workflow-5.yml

Retrieves provider details by NPI number including name, specialty, and address.

naftiko: '0.5'
info:
  label: Provider NPI Lookup
  description: Retrieves provider details by NPI number including name, specialty, and address.
  tags:
  - provider
  - directory
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: provider-lookup
    port: 8080
    tools:
    - name: get-provider-by-npi
      description: Look up provider details by NPI.
      inputParameters:
      - name: npi
        in: body
        type: string
        description: Provider NPI.
      call: provider.get-provider
      with:
        npi: '{{npi}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.providerName
      - name: specialty
        type: string
        mapping: $.specialty
      - name: address
        type: string
        mapping: $.practiceAddress
  consumes:
  - type: http
    namespace: provider
    baseUri: https://api.cigna.com/provider/v1
    authentication:
      type: bearer
      token: $secrets.provider_token
    resources:
    - name: providers
      path: /providers/{{npi}}
      inputParameters:
      - name: npi
        in: path
      operations:
      - name: get-provider
        method: GET
Open in Framework → View in Fleet → provider-npi-lookup.yml

Generates an electronic remittance advice (ERA) for a provider payment, uploads it to the provider portal, and sends an email notification to the provider.

naftiko: '0.5'
info:
  label: Provider Payment Remittance Generator
  description: Generates an electronic remittance advice (ERA) for a provider payment, uploads it to the provider portal, and sends an email notification to the provider.
  tags:
  - claims
  - provider
  - payments
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: remittance
    port: 8080
    tools:
    - name: generate-remittance
      description: Generate ERA for a provider payment batch and notify.
      inputParameters:
      - name: batch_id
        in: body
        type: string
        description: Payment batch ID.
      - name: provider_npi
        in: body
        type: string
        description: Provider NPI.
      - name: provider_email
        in: body
        type: string
        description: Provider email.
      steps:
      - name: generate-era
        type: call
        call: payments.generate-era
        with:
          batch_id: '{{batch_id}}'
          provider_npi: '{{provider_npi}}'
      - name: notify-provider
        type: call
        call: outlook.send-email
        with:
          to: '{{provider_email}}'
          subject: Cigna Payment Remittance - Batch {{batch_id}}
          body: 'Your electronic remittance advice for batch {{batch_id}} is available. Total payment: ${{generate-era.total_amount}}. Claims: {{generate-era.claim_count}}.'
  consumes:
  - type: http
    namespace: payments
    baseUri: https://api.cigna.com/payments/v1
    authentication:
      type: bearer
      token: $secrets.payments_token
    resources:
    - name: era
      path: /era
      operations:
      - name: generate-era
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → provider-payment-remittance-generator.yml

Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.

naftiko: '0.5'
info:
  label: Knowledge Base Refresh Orchestrator
  description: Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.
  tags:
  - knowledge-management
  - collaboration
  - operations
capability:
  exposes:
  - type: mcp
    namespace: knowledge-management
    port: 8080
    tools:
    - name: run-knowledge-base-refresh-orchestrator
      description: Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Knowledge Base Refresh Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → knowledge-base-refresh-orchestrator.yml

Retrieves a Salesforce contact record by ID. Used by customer service and sales.

naftiko: '0.5'
info:
  label: Salesforce Contact Viewer
  description: Retrieves a Salesforce contact record by ID. Used by customer service and sales.
  tags:
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm-viewer
    port: 8080
    tools:
    - name: get-sf-contact
      description: Retrieve a Salesforce contact by ID.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: Salesforce Contact ID.
      call: salesforce.get-contact
      with:
        contact_id: '{{contact_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: email
        type: string
        mapping: $.Email
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://cigna.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → salesforce-contact-viewer.yml

Creates a new incident in ServiceNow.

naftiko: '0.5'
info:
  label: ServiceNow Incident Creator
  description: Creates a new incident in ServiceNow.
  tags:
  - it
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it
    port: 8080
    tools:
    - name: get-servicenow
      description: Creates a new incident in ServiceNow.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The servicenow incident creator identifier.
      call: it-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: it-api
    baseUri: https://api.the-cigna-group.com/it/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: servicenow
      path: /servicenow/incident/creator/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-servicenow
        method: GET
Open in Framework → View in Fleet → servicenow-incident-creator.yml

Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.

naftiko: '0.5'
info:
  label: IT Change Management Orchestrator
  description: Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.
  tags:
  - it
  - servicenow
  - operations
capability:
  exposes:
  - type: mcp
    namespace: it
    port: 8080
    tools:
    - name: run-it-change-management-orchestrator
      description: Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed IT Change Management Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → it-change-management-orchestrator.yml

Orchestrates insurance workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Insurance Workflow 1
  description: Orchestrates insurance workflow 1 by coordinating across systems, validating data, and sending notifications.
  tags:
  - insurance
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: run-insurance-workflow-001
      description: Orchestrates insurance 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 Insurance Workflow 1 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → insurance-workflow-1.yml

Improves CMS star ratings by identifying gaps, assigning improvement initiatives, and tracking progress.

naftiko: '0.5'
info:
  label: Star Rating Improvement Orchestrator
  description: Improves CMS star ratings by identifying gaps, assigning improvement initiatives, and tracking progress.
  tags:
  - quality
  - analytics
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: run-star-rating-improvement-orchestrator
      description: Improves CMS star ratings by identifying gaps, assigning improvement initiatives, and tracking progress.
      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 Star Rating Improvement Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → star-rating-improvement-orchestrator.yml

Processes a member's plan change request during open enrollment: validates the new plan, updates the enrollment system, generates a new ID card, and sends confirmation.

naftiko: '0.5'
info:
  label: Member Plan Change Processor
  description: 'Processes a member''s plan change request during open enrollment: validates the new plan, updates the enrollment system, generates a new ID card, and sends confirmation.'
  tags:
  - enrollment
  - member
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: plan-change
    port: 8080
    tools:
    - name: process-plan-change
      description: Process a member plan change during open enrollment.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: new_plan_id
        in: body
        type: string
        description: New plan ID.
      - name: effective_date
        in: body
        type: string
        description: Effective date.
      - name: member_email
        in: body
        type: string
        description: Member email.
      steps:
      - name: change-plan
        type: call
        call: enrollment.change-plan
        with:
          member_id: '{{member_id}}'
          new_plan_id: '{{new_plan_id}}'
          effective_date: '{{effective_date}}'
      - name: new-id-card
        type: call
        call: enrollment.generate-id-card
        with:
          member_id: '{{member_id}}'
      - name: confirm
        type: call
        call: outlook.send-email
        with:
          to: '{{member_email}}'
          subject: Cigna Plan Change Confirmed
          body: Your plan has been changed to {{change-plan.new_plan_name}} effective {{effective_date}}. A new ID card is available in your account.
  consumes:
  - type: http
    namespace: enrollment
    baseUri: https://api.cigna.com/enrollment/v1
    authentication:
      type: bearer
      token: $secrets.enrollment_token
    resources:
    - name: plan-changes
      path: /members/{{member_id}}/plan-change
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: change-plan
        method: POST
    - name: id-cards
      path: /members/{{member_id}}/id-card
      inputParameters:
      - name: member_id
        in: path
      operations:
      - name: generate-id-card
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → member-plan-change-processor.yml

Checks the adjudication status of an insurance claim.

naftiko: '0.5'
info:
  label: Claim Adjudication Status
  description: Checks the adjudication status of an insurance claim.
  tags:
  - claims
  - insurance
capability:
  exposes:
  - type: mcp
    namespace: claims
    port: 8080
    tools:
    - name: get-claim
      description: Checks the adjudication status of an insurance claim.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The claim adjudication status identifier.
      call: claims-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: claims-api
    baseUri: https://api.the-cigna-group.com/claims/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: claim
      path: /claim/adjudication/status/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-claim
        method: GET
Open in Framework → View in Fleet → claim-adjudication-status.yml

Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.

naftiko: '0.5'
info:
  label: API Lifecycle Management Orchestrator
  description: Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.
  tags:
  - engineering
  - api
  - operations
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: run-api-lifecycle-management-orchestrator
      description: Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed API Lifecycle Management Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → api-lifecycle-management-orchestrator.yml

Orchestrates insurance workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Insurance Workflow 2
  description: Orchestrates insurance workflow 2 by coordinating across systems, validating data, and sending notifications.
  tags:
  - insurance
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: run-insurance-workflow-002
      description: Orchestrates insurance 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 Insurance Workflow 2 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → insurance-workflow-2.yml

Retrieves insurance operational data for workflow 3.

naftiko: '0.5'
info:
  label: Insurance Data Query 3
  description: Retrieves insurance operational data for workflow 3.
  tags:
  - insurance
  - operations
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: get-data-3
      description: Query insurance data for workflow 3.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: insurance-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: insurance-api
    baseUri: https://api.the-cigna-group.com/insurance/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → insurance-data-query-3.yml

Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.

naftiko: '0.5'
info:
  label: Customer Journey Mapping Orchestrator
  description: Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.
  tags:
  - customer-experience
  - analytics
  - product-management
capability:
  exposes:
  - type: mcp
    namespace: customer-experience
    port: 8080
    tools:
    - name: run-customer-journey-mapping-orchestrator
      description: Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Customer Journey Mapping Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → customer-journey-mapping-orchestrator.yml

Queries eligible members from Snowflake, creates a Salesforce Marketing Cloud campaign, sends personalized enrollment reminders, and tracks engagement in Salesforce.

naftiko: '0.5'
info:
  label: Open Enrollment Campaign Orchestrator
  description: Queries eligible members from Snowflake, creates a Salesforce Marketing Cloud campaign, sends personalized enrollment reminders, and tracks engagement in Salesforce.
  tags:
  - enrollment
  - marketing
  - snowflake
  - salesforce
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: open-enrollment
    port: 8080
    tools:
    - name: launch-enrollment-campaign
      description: Launch open enrollment communication campaign for eligible members.
      inputParameters:
      - name: plan_year
        in: body
        type: string
        description: Upcoming plan year.
      - name: enrollment_deadline
        in: body
        type: string
        description: Enrollment deadline date.
      steps:
      - name: get-eligible
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT member_id, email, current_plan FROM ENROLLMENT.ELIGIBLE_MEMBERS WHERE plan_year = '{{plan_year}}'
      - name: create-campaign
        type: call
        call: salesforce.create-record
        with:
          object: Campaign
          Name: Open Enrollment {{plan_year}}
          Type: Email
          Status: In Progress
      - name: send-reminders
        type: call
        call: outlook.send-email
        with:
          to: '{{get-eligible.data}}'
          subject: Cigna Open Enrollment - Action Required by {{enrollment_deadline}}
          body: Open enrollment for {{plan_year}} is now open. Review your plan options and make your selection by {{enrollment_deadline}}.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://cigna.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: records
      path: /sobjects/{{object}}
      inputParameters:
      - name: object
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → open-enrollment-campaign-orchestrator.yml

Checks if a drug is on the formulary.

naftiko: '0.5'
info:
  label: Formulary Drug Lookup
  description: Checks if a drug is on the formulary.
  tags:
  - pharmacy
  - insurance
capability:
  exposes:
  - type: mcp
    namespace: pharmacy
    port: 8080
    tools:
    - name: get-formulary
      description: Checks if a drug is on the formulary.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The formulary drug lookup identifier.
      call: pharmacy-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: pharmacy-api
    baseUri: https://api.the-cigna-group.com/pharmacy/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: formulary
      path: /formulary/drug/lookup/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-formulary
        method: GET
Open in Framework → View in Fleet → formulary-drug-lookup.yml

Triggers a refresh on a Power BI dataset. Used to keep dashboards current.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresher
  description: Triggers a refresh on a Power BI dataset. Used to keep dashboards current.
  tags:
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-pbi-dataset
      description: Trigger a Power BI dataset refresh.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      call: powerbi.refresh-dataset
      with:
        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: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-dataset-refresher.yml

Processes prior authorization requests by reviewing clinical criteria, making decisions, and notifying providers.

naftiko: '0.5'
info:
  label: Prior Authorization Decision Orchestrator
  description: Processes prior authorization requests by reviewing clinical criteria, making decisions, and notifying providers.
  tags:
  - clinical
  - claims
  - provider-management
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: run-prior-auth-decision-orchestrator
      description: Processes prior authorization requests by reviewing clinical criteria, making decisions, and notifying providers.
      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 Prior Authorization Decision Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → prior-authorization-decision-orchestrator.yml

Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.

naftiko: '0.5'
info:
  label: Sustainability Metrics Collection Orchestrator
  description: Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.
  tags:
  - sustainability
  - analytics
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: run-sustainability-metrics-collection-orchestrator
      description: Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Sustainability Metrics Collection Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → sustainability-metrics-collection-orchestrator.yml

Checks for drug interactions between a member's current medications and a newly prescribed medication using the pharmacy clinical rules engine.

naftiko: '0.5'
info:
  label: Prescription Drug Interaction Checker
  description: Checks for drug interactions between a member's current medications and a newly prescribed medication using the pharmacy clinical rules engine.
  tags:
  - pharmacy
  - clinical
  - drug-interactions
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: drug-safety
    port: 8080
    tools:
    - name: check-drug-interactions
      description: Check for drug interactions for a member.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: new_ndc
        in: body
        type: string
        description: NDC of newly prescribed drug.
      call: pharmacy.check-interactions
      with:
        member_id: '{{member_id}}'
        ndc: '{{new_ndc}}'
      outputParameters:
      - name: interactions_found
        type: boolean
        mapping: $.hasInteractions
      - name: interactions
        type: array
        mapping: $.interactions
      - name: severity
        type: string
        mapping: $.maxSeverity
  consumes:
  - type: http
    namespace: pharmacy
    baseUri: https://api.cigna.com/pharmacy/v1
    authentication:
      type: bearer
      token: $secrets.pharmacy_token
    resources:
    - name: interactions
      path: /members/{{member_id}}/drug-interactions
      inputParameters:
      - name: member_id
        in: path
      - name: ndc
        in: query
      operations:
      - name: check-interactions
        method: GET
Open in Framework → View in Fleet → prescription-drug-interaction-checker.yml

Manages group plan renewals by analyzing utilization, calculating rate adjustments, and presenting proposals.

naftiko: '0.5'
info:
  label: Group Renewal Orchestrator
  description: Manages group plan renewals by analyzing utilization, calculating rate adjustments, and presenting proposals.
  tags:
  - sales
  - actuarial
  - finance
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: run-group-renewal-orchestrator
      description: Manages group plan renewals by analyzing utilization, calculating rate adjustments, and presenting proposals.
      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 Group Renewal Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → group-renewal-orchestrator.yml

Retrieves the contracted fee schedule for a provider by NPI and procedure code. Used by claims adjusters and provider relations.

naftiko: '0.5'
info:
  label: Provider Network Fee Schedule Lookup
  description: Retrieves the contracted fee schedule for a provider by NPI and procedure code. Used by claims adjusters and provider relations.
  tags:
  - provider
  - fee-schedule
  - claims
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: fee-schedule
    port: 8080
    tools:
    - name: get-fee-schedule
      description: Look up contracted fee for a provider and procedure.
      inputParameters:
      - name: provider_npi
        in: body
        type: string
        description: Provider NPI.
      - name: procedure_code
        in: body
        type: string
        description: CPT procedure code.
      call: provider.get-fee
      with:
        npi: '{{provider_npi}}'
        cpt: '{{procedure_code}}'
      outputParameters:
      - name: allowed_amount
        type: number
        mapping: $.allowedAmount
      - name: network
        type: string
        mapping: $.networkTier
      - name: effective_date
        type: string
        mapping: $.effectiveDate
  consumes:
  - type: http
    namespace: provider
    baseUri: https://api.cigna.com/provider/v1
    authentication:
      type: bearer
      token: $secrets.provider_token
    resources:
    - name: fees
      path: /providers/{{npi}}/fees
      inputParameters:
      - name: npi
        in: path
      - name: cpt
        in: query
      operations:
      - name: get-fee
        method: GET
Open in Framework → View in Fleet → provider-network-fee-schedule-lookup.yml

Verifies member insurance coverage.

naftiko: '0.5'
info:
  label: Member Coverage Verification
  description: Verifies member insurance coverage.
  tags:
  - insurance
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: get-member
      description: Verifies member insurance coverage.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The member coverage verification identifier.
      call: insurance-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: insurance-api
    baseUri: https://api.the-cigna-group.com/insurance/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: member
      path: /member/coverage/verification/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-member
        method: GET
Open in Framework → View in Fleet → member-coverage-verification.yml

Generates regulatory compliance filings from Snowflake data, submits to CMS, archives in SharePoint, and logs submission in ServiceNow.

naftiko: '0.5'
info:
  label: Regulatory Compliance Filing Pipeline
  description: Generates regulatory compliance filings from Snowflake data, submits to CMS, archives in SharePoint, and logs submission in ServiceNow.
  tags:
  - compliance
  - regulatory
  - snowflake
  - sharepoint
  - servicenow
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: regulatory-filing
    port: 8080
    tools:
    - name: submit-regulatory-filing
      description: Generate, submit, and archive a regulatory compliance filing.
      inputParameters:
      - name: filing_type
        in: body
        type: string
        description: Type of regulatory filing.
      - name: reporting_period
        in: body
        type: string
        description: Reporting period.
      - name: sharepoint_site
        in: body
        type: string
        description: SharePoint site for archival.
      steps:
      - name: extract-data
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL COMPLIANCE.GENERATE_FILING_DATA('{{filing_type}}', '{{reporting_period}}')
      - name: submit-to-cms
        type: call
        call: regulatory.submit-filing
        with:
          filing_type: '{{filing_type}}'
          period: '{{reporting_period}}'
          data: '{{extract-data.data}}'
      - name: archive-filing
        type: call
        call: sharepoint.upload-file
        with:
          site_id: '{{sharepoint_site}}'
          folder_path: RegulatoryFilings/{{filing_type}}
          file_name: '{{filing_type}}_{{reporting_period}}.json'
      - name: log-submission
        type: call
        call: servicenow.create-record
        with:
          table: u_regulatory_filings
          filing_type: '{{filing_type}}'
          period: '{{reporting_period}}'
          submission_id: '{{submit-to-cms.filing_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cigna.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: regulatory
    baseUri: https://api.cigna.com/regulatory/v1
    authentication:
      type: bearer
      token: $secrets.regulatory_token
    resources:
    - name: filings
      path: /filings
      operations:
      - name: submit-filing
        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://cigna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/{{table}}
      inputParameters:
      - name: table
        in: path
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → regulatory-compliance-filing-pipeline.yml

Processes a pharmacy claim: verifies member pharmacy benefits, checks formulary, applies copay rules, and posts the adjudicated result to the pharmacy claims system.

naftiko: '0.5'
info:
  label: Pharmacy Claim Processor
  description: 'Processes a pharmacy claim: verifies member pharmacy benefits, checks formulary, applies copay rules, and posts the adjudicated result to the pharmacy claims system.'
  tags:
  - pharmacy
  - claims
  - formulary
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-claims
    port: 8080
    tools:
    - name: process-pharmacy-claim
      description: Adjudicate a pharmacy claim through benefit verification and formulary check.
      inputParameters:
      - name: rx_claim_id
        in: body
        type: string
        description: Pharmacy claim ID.
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: ndc_code
        in: body
        type: string
        description: National Drug Code.
      - name: quantity
        in: body
        type: integer
        description: Quantity dispensed.
      - name: pharmacy_npi
        in: body
        type: string
        description: Dispensing pharmacy NPI.
      steps:
      - name: verify-rx-benefits
        type: call
        call: pharmacy.check-coverage
        with:
          member_id: '{{member_id}}'
          ndc: '{{ndc_code}}'
      - name: calculate-cost
        type: call
        call: pharmacy.calculate-cost
        with:
          ndc: '{{ndc_code}}'
          quantity: '{{quantity}}'
          tier: '{{verify-rx-benefits.formularyTier}}'
      - name: post-rx-claim
        type: call
        call: pharmacy.post-claim
        with:
          rx_claim_id: '{{rx_claim_id}}'
          member_id: '{{member_id}}'
          copay: '{{calculate-cost.member_copay}}'
          plan_pays: '{{calculate-cost.plan_amount}}'
  consumes:
  - type: http
    namespace: pharmacy
    baseUri: https://api.cigna.com/pharmacy/v1
    authentication:
      type: bearer
      token: $secrets.pharmacy_token
    resources:
    - name: coverage
      path: /members/{{member_id}}/coverage
      inputParameters:
      - name: member_id
        in: path
      - name: ndc
        in: query
      operations:
      - name: check-coverage
        method: GET
    - name: cost-calculation
      path: /cost-calculate
      operations:
      - name: calculate-cost
        method: POST
    - name: claims
      path: /claims
      operations:
      - name: post-claim
        method: POST
Open in Framework → View in Fleet → pharmacy-claim-processor.yml

Estimates out-of-pocket costs for a medical procedure based on the member's benefit plan, deductible status, and provider network tier.

naftiko: '0.5'
info:
  label: Cost Estimator Tool
  description: Estimates out-of-pocket costs for a medical procedure based on the member's benefit plan, deductible status, and provider network tier.
  tags:
  - benefits
  - cost-estimation
  - member
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: cost-estimator
    port: 8080
    tools:
    - name: estimate-cost
      description: Estimate out-of-pocket cost for a procedure.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: procedure_code
        in: body
        type: string
        description: CPT procedure code.
      - name: provider_npi
        in: body
        type: string
        description: Provider NPI.
      call: benefits.estimate-cost
      with:
        member_id: '{{member_id}}'
        cpt: '{{procedure_code}}'
        npi: '{{provider_npi}}'
      outputParameters:
      - name: estimated_cost
        type: number
        mapping: $.estimatedMemberCost
      - name: plan_pays
        type: number
        mapping: $.planPays
      - name: network_tier
        type: string
        mapping: $.networkTier
  consumes:
  - type: http
    namespace: benefits
    baseUri: https://api.cigna.com/benefits/v1
    authentication:
      type: bearer
      token: $secrets.benefits_token
    resources:
    - name: cost-estimate
      path: /cost-estimate
      inputParameters:
      - name: member_id
        in: query
      - name: cpt
        in: query
      - name: npi
        in: query
      operations:
      - name: estimate-cost
        method: GET
Open in Framework → View in Fleet → cost-estimator-tool.yml

Audits claims by selecting samples, reviewing adjudication accuracy, and documenting findings.

naftiko: '0.5'
info:
  label: Claims Audit Orchestrator
  description: Audits claims by selecting samples, reviewing adjudication accuracy, and documenting findings.
  tags:
  - compliance
  - claims
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: run-claims-audit-orchestrator
      description: Audits claims by selecting samples, reviewing adjudication accuracy, and documenting findings.
      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 Claims Audit Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → claims-audit-orchestrator.yml

Coordinates patient care by identifying high-risk members, assigning care managers, and tracking interventions.

naftiko: '0.5'
info:
  label: Care Coordination Orchestrator
  description: Coordinates patient care by identifying high-risk members, assigning care managers, and tracking interventions.
  tags:
  - clinical
  - customer-service
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: clinical
    port: 8080
    tools:
    - name: run-care-coordination-orchestrator
      description: Coordinates patient care by identifying high-risk members, assigning care managers, and tracking interventions.
      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 Care Coordination Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → care-coordination-orchestrator.yml

Retrieves a ServiceNow incident by number. Used by IT and operations staff.

naftiko: '0.5'
info:
  label: ServiceNow Incident Viewer
  description: Retrieves a ServiceNow incident by number. Used by IT and operations staff.
  tags:
  - incident-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: incident-lookup
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow incident by number.
      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: short_description
        type: string
        mapping: $.result.short_description
      - name: assigned_to
        type: string
        mapping: $.result.assigned_to.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cigna.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-viewer.yml

Processes a mail-order pharmacy prescription: verifies coverage, submits to the fulfillment center, tracks shipment, and sends confirmation to the member.

naftiko: '0.5'
info:
  label: Pharmacy Mail Order Fulfillment
  description: 'Processes a mail-order pharmacy prescription: verifies coverage, submits to the fulfillment center, tracks shipment, and sends confirmation to the member.'
  tags:
  - pharmacy
  - mail-order
  - microsoft-outlook
  - health-insurance
capability:
  exposes:
  - type: mcp
    namespace: mail-order-rx
    port: 8080
    tools:
    - name: process-mail-order
      description: Process a mail-order pharmacy prescription.
      inputParameters:
      - name: member_id
        in: body
        type: string
        description: Member ID.
      - name: ndc_code
        in: body
        type: string
        description: National Drug Code.
      - name: quantity
        in: body
        type: integer
        description: Quantity prescribed.
      - name: prescriber_npi
        in: body
        type: string
        description: Prescribing provider NPI.
      - name: member_email
        in: body
        type: string
        description: Member email.
      steps:
      - name: verify-rx
        type: call
        call: pharmacy.check-coverage
        with:
          member_id: '{{member_id}}'
          ndc: '{{ndc_code}}'
      - name: submit-order
        type: call
        call: pharmacy.submit-mail-order
        with:
          member_id: '{{member_id}}'
          ndc: '{{ndc_code}}'
          quantity: '{{quantity}}'
          prescriber_npi: '{{prescriber_npi}}'
      - name: confirm-member
        type: call
        call: outlook.send-email
        with:
          to: '{{member_email}}'
          subject: Cigna Mail Order Pharmacy - Prescription Shipped
          body: 'Your prescription order {{submit-order.order_id}} has been submitted. Estimated delivery: {{submit-order.estimated_delivery}}. Copay: ${{verify-rx.copayAmount}}.'
  consumes:
  - type: http
    namespace: pharmacy
    baseUri: https://api.cigna.com/pharmacy/v1
    authentication:
      type: bearer
      token: $secrets.pharmacy_token
    resources:
    - name: coverage
      path: /members/{{member_id}}/coverage
      inputParameters:
      - name: member_id
        in: path
      - name: ndc
        in: query
      operations:
      - name: check-coverage
        method: GET
    - name: mail-orders
      path: /mail-orders
      operations:
      - name: submit-mail-order
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → pharmacy-mail-order-fulfillment.yml

Triggers a Power BI dataset refresh.

naftiko: '0.5'
info:
  label: Power BI Dashboard Refresher
  description: Triggers a Power BI dataset refresh.
  tags:
  - analytics
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-power
      description: Triggers a Power BI dataset refresh.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The power bi dashboard refresher identifier.
      call: analytics-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: analytics-api
    baseUri: https://api.the-cigna-group.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: power
      path: /power/bi/dashboard/refresher/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-power
        method: GET
Open in Framework → View in Fleet → power-bi-dashboard-refresher.yml

Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.

naftiko: '0.5'
info:
  label: Customer Data Privacy Request Handler
  description: Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.
  tags:
  - compliance
  - privacy
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: run-customer-data-privacy-request-handler
      description: Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The unique request identifier.
      steps:
      - name: step-1
        type: call
        call: primary-api.initiate
        with:
          request_id: '{{request_id}}'
      - name: step-2
        type: call
        call: secondary-api.process
        with:
          request_id: '{{request_id}}'
          data: '{{step-1.result}}'
      - name: notify
        type: call
        call: notification-api.send
        with:
          channel: operations
          message: Completed Customer Data Privacy Request Handler for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.the-cigna-group.com/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.the-cigna-group.com/v2
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → customer-data-privacy-request-handler.yml

Retrieves 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.the-cigna-group.com/collaboration/v1
    authentication:
      type: bearer
      token: $secrets.the_cigna_group_api_token
    resources:
    - name: google
      path: /google/drive/file/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-google
        method: GET
Open in Framework → View in Fleet → google-drive-file-viewer.yml

Retrieves Facebook ad spend and ROAS for health and wellness campaigns.

naftiko: '0.5'
info:
  label: Facebook Ads Spend Reporter
  description: Retrieves Facebook ad spend and ROAS for health and wellness campaigns.
  tags:
  - marketing
  - advertising
  - facebook
capability:
  exposes:
  - type: mcp
    namespace: paid-media
    port: 8080
    tools:
    - name: get-fb-ad-spend
      description: Fetch Facebook ad spend and ROAS.
      inputParameters:
      - name: ad_account_id
        in: body
        type: string
        description: Ad account ID.
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: end_date
        in: body
        type: string
        description: End date.
      call: meta.get-account-insights
      with:
        ad_account_id: '{{ad_account_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: spend
        type: string
        mapping: $.data[0].spend
      - name: roas
        type: string
        mapping: $.data[0].purchase_roas[0].value
  consumes:
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_ads_token
    resources:
    - name: account-insights
      path: /act_{{ad_account_id}}/insights
      inputParameters:
      - name: ad_account_id
        in: path
      operations:
      - name: get-account-insights
        method: GET
Open in Framework → View in Fleet → facebook-ads-spend-reporter.yml

Retrieves vendor lead time for procurement planning.

naftiko: '0.5'
info:
  label: Vendor Lead Time Lookup
  description: Retrieves vendor lead time for procurement planning.
  tags:
  - procurement
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-vendor
      description: Retrieves vendor lead time for procurement planning.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The vendor lead time lookup identifier.
      call: procurement-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: procurement-api
    baseUri: https://api.walgreens.com/procurement/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: vendor
      path: /vendor/lead/time/lookup/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → vendor-lead-time-lookup.yml

Reconciles Mastercard settlements against SAP payment records and logs discrepancies to Google Sheets.

naftiko: '0.5'
info:
  label: Mastercard Payment Reconciliation
  description: Reconciles Mastercard settlements against SAP payment records and logs discrepancies to Google Sheets.
  tags:
  - finance
  - payments
  - mastercard
  - sap
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: payment-reconciliation
    port: 8080
    tools:
    - name: reconcile-settlements
      description: Compare Mastercard settlements with SAP payments.
      inputParameters:
      - name: settlement_date
        in: body
        type: string
        description: Settlement date YYYY-MM-DD.
      steps:
      - name: get-mc-settlements
        type: call
        call: mastercard.get-settlements
        with:
          date: '{{settlement_date}}'
      - name: get-sap-payments
        type: call
        call: sap.get-payment-docs
        with:
          date: '{{settlement_date}}'
      - name: log-discrepancies
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: wag_reconciliation
          row:
            date: '{{settlement_date}}'
            mc_total: '{{get-mc-settlements.total}}'
            sap_total: '{{get-sap-payments.total}}'
  consumes:
  - type: http
    namespace: mastercard
    baseUri: https://api.mastercard.com/settlement/v1
    authentication:
      type: bearer
      token: $secrets.mastercard_token
    resources:
    - name: settlements
      path: /settlements
      operations:
      - name: get-settlements
        method: GET
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_PAYMENT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: payments
      path: /A_PaymentDocument
      operations:
      - name: get-payment-docs
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: rows
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → mastercard-payment-reconciliation.yml

When a patient completes a health action, updates their rewards balance in Salesforce, sends a congratulations email via MailChimp, and creates a personalized discount in the POS system.

naftiko: '0.5'
info:
  label: Patient Health Rewards Orchestrator
  description: When a patient completes a health action, updates their rewards balance in Salesforce, sends a congratulations email via MailChimp, and creates a personalized discount in the POS system.
  tags:
  - healthcare
  - loyalty
  - salesforce
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: health-rewards
    port: 8080
    tools:
    - name: award-health-points
      description: Update rewards balance and send congratulations.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: Salesforce contact ID.
      - name: action_type
        in: body
        type: string
        description: Health action type (e.g., 'flu_shot', 'health_screening').
      - name: points
        in: body
        type: number
        description: Points to award.
      steps:
      - name: get-patient
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{contact_id}}'
      - name: update-balance
        type: call
        call: salesforce.update-rewards
        with:
          contact_id: '{{contact_id}}'
          points_to_add: '{{points}}'
          action: '{{action_type}}'
      - name: send-congrats
        type: call
        call: mailchimp.send-transactional
        with:
          email: '{{get-patient.Email}}'
          template: health_rewards
          merge_vars:
            first_name: '{{get-patient.FirstName}}'
            points: '{{points}}'
            action: '{{action_type}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://walgreens.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
      - name: update-rewards
        method: PATCH
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → patient-health-rewards-orchestrator.yml

Retrieves MailChimp campaign statistics for pharmacy newsletters.

naftiko: '0.5'
info:
  label: MailChimp Pharmacy Newsletter Stats
  description: Retrieves MailChimp campaign statistics for pharmacy newsletters.
  tags:
  - marketing
  - email
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: email-marketing
    port: 8080
    tools:
    - name: get-campaign-stats
      description: Fetch MailChimp campaign stats.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Campaign ID.
      call: mailchimp.get-campaign-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: emails_sent
        type: number
        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-campaign-report
        method: GET
Open in Framework → View in Fleet → mailchimp-pharmacy-newsletter-stats.yml

When a new vendor is approved in SAP Ariba, creates a vendor master in SAP, provisions a Box folder, and sends onboarding instructions via Microsoft Outlook.

naftiko: '0.5'
info:
  label: SAP Ariba Vendor Onboarding Orchestrator
  description: When a new vendor is approved in SAP Ariba, creates a vendor master in SAP, provisions a Box folder, and sends onboarding instructions via Microsoft Outlook.
  tags:
  - procurement
  - vendor-management
  - sap-ariba
  - sap
  - box
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: vendor-onboarding
    port: 8080
    tools:
    - name: onboard-vendor
      description: Create vendor master, document folder, and send onboarding email.
      inputParameters:
      - name: ariba_vendor_id
        in: body
        type: string
        description: Ariba vendor registration ID.
      steps:
      - name: get-vendor
        type: call
        call: ariba.get-vendor-registration
        with:
          vendor_id: '{{ariba_vendor_id}}'
      - name: create-master
        type: call
        call: sap.create-vendor-master
        with:
          name: '{{get-vendor.company_name}}'
          tax_id: '{{get-vendor.tax_number}}'
      - name: create-folder
        type: call
        call: box.create-folder
        with:
          parent_id: vendor_documents
          name: '{{get-vendor.company_name}}'
      - name: send-welcome
        type: call
        call: outlook.send-mail
        with:
          to: '{{get-vendor.contact_email}}'
          subject: Welcome to Walgreens Vendor Network
          body: 'Vendor number: {{create-master.vendor_number}}. Upload docs: {{create-folder.url}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/sourcing/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: registrations
      path: /vendors/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor-registration
        method: GET
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_BUSINESS_PARTNER
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /A_BusinessPartner
      operations:
      - name: create-vendor-master
        method: POST
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: folders
      path: /folders
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → sap-ariba-vendor-onboarding-orchestrator.yml

Retrieves a Salesforce service case.

naftiko: '0.5'
info:
  label: Salesforce Case Lookup
  description: Retrieves a Salesforce service case.
  tags:
  - customer-service
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-support
    port: 8080
    tools:
    - name: get-case
      description: Fetch Salesforce case.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: Case number.
      call: salesforce.get-case
      with:
        case_number: '{{case_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: priority
        type: string
        mapping: $.Priority
      - name: subject
        type: string
        mapping: $.Subject
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://walgreens.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{case_number}}
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → salesforce-case-lookup.yml

Retrieves a document from SharePoint.

naftiko: '0.5'
info:
  label: SharePoint Document Viewer
  description: Retrieves a document from SharePoint.
  tags:
  - collaboration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: get-sharepoint
      description: Retrieves a document from SharePoint.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The sharepoint document viewer identifier.
      call: collaboration-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: collaboration-api
    baseUri: https://api.walgreens.com/collaboration/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: sharepoint
      path: /sharepoint/document/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-sharepoint
        method: GET
Open in Framework → View in Fleet → sharepoint-document-viewer.yml

When a patient books a vaccination, verifies eligibility in Salesforce Health Cloud, schedules the appointment in the pharmacy system, sends confirmation via MailChimp, and logs the appointment in Google Sheets.

naftiko: '0.5'
info:
  label: Vaccination Appointment Orchestrator
  description: When a patient books a vaccination, verifies eligibility in Salesforce Health Cloud, schedules the appointment in the pharmacy system, sends confirmation via MailChimp, and logs the appointment in Google Sheets.
  tags:
  - healthcare
  - pharmacy
  - salesforce
  - mailchimp
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: vaccination-ops
    port: 8080
    tools:
    - name: book-vaccination
      description: Verify eligibility, schedule, confirm, and log vaccination appointment.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: Patient contact ID.
      - name: vaccine_type
        in: body
        type: string
        description: Vaccine type (e.g., 'flu', 'covid').
      - name: preferred_date
        in: body
        type: string
        description: Preferred date YYYY-MM-DD.
      - name: store_id
        in: body
        type: string
        description: Walgreens store ID.
      steps:
      - name: get-patient
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{patient_id}}'
      - name: check-eligibility
        type: call
        call: salesforce.check-vaccine-eligibility
        with:
          contact_id: '{{patient_id}}'
          vaccine_type: '{{vaccine_type}}'
      - name: send-confirmation
        type: call
        call: mailchimp.send-transactional
        with:
          email: '{{get-patient.Email}}'
          template: vaccination_confirmation
          merge_vars:
            first_name: '{{get-patient.FirstName}}'
            vaccine: '{{vaccine_type}}'
            date: '{{preferred_date}}'
            store: '{{store_id}}'
      - name: log-appointment
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: vaccination_tracker
          row:
            patient: '{{patient_id}}'
            vaccine: '{{vaccine_type}}'
            date: '{{preferred_date}}'
            store: '{{store_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://walgreens.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: check-vaccine-eligibility
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_transactional_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: rows
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → vaccination-appointment-orchestrator.yml

Orchestrates retail workflow 19 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 19
  description: Orchestrates retail workflow 19 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-019
      description: Orchestrates retail workflow 19 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 Retail Workflow 19 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-19.yml

Retrieves Adobe Analytics e-commerce metrics for walgreens.com.

naftiko: '0.5'
info:
  label: Adobe Analytics E-Commerce Report
  description: Retrieves Adobe Analytics e-commerce metrics for walgreens.com.
  tags:
  - analytics
  - e-commerce
  - adobe-analytics
capability:
  exposes:
  - type: mcp
    namespace: site-analytics
    port: 8080
    tools:
    - name: get-ecommerce-metrics
      description: Fetch Adobe Analytics e-commerce data.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: Report suite ID.
      - name: date_range
        in: body
        type: string
        description: Date range.
      call: adobe-analytics.get-report
      with:
        rsid: '{{report_suite_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: revenue
        type: string
        mapping: $.totalPages[0].data[0].revenue
      - name: orders
        type: number
        mapping: $.totalPages[0].data[0].orders
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    inputParameters:
    - name: x-api-key
      in: header
      value: $secrets.adobe_api_key
    resources:
    - name: reports
      path: /{{company_id}}/reports
      inputParameters:
      - name: company_id
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → adobe-analytics-e-commerce-report.yml

Retrieves a Salesforce contact by ID, returning name, email, loyalty tier, and prescription count.

naftiko: '0.5'
info:
  label: Salesforce Customer Lookup
  description: Retrieves a Salesforce contact by ID, returning name, email, loyalty tier, and prescription count.
  tags:
  - customer-service
  - healthcare
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: customer-ops
    port: 8080
    tools:
    - name: get-customer
      description: Fetch Salesforce contact details.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: Salesforce contact ID.
      call: salesforce.get-contact
      with:
        contact_id: '{{contact_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: email
        type: string
        mapping: $.Email
      - name: loyalty_tier
        type: string
        mapping: $.Loyalty_Tier__c
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://walgreens.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{contact_id}}
      inputParameters:
      - name: contact_id
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → salesforce-customer-lookup.yml

Uploads a document to SharePoint.

naftiko: '0.5'
info:
  label: SharePoint Document Upload
  description: Uploads a document to SharePoint.
  tags:
  - documents
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: document-mgmt
    port: 8080
    tools:
    - name: upload-document
      description: Upload a file to SharePoint.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Site ID.
      - name: folder_path
        in: body
        type: string
        description: Folder path.
      - name: file_name
        in: body
        type: string
        description: File name.
      call: sharepoint.upload-file
      with:
        site_id: '{{site_id}}'
        folder_path: '{{folder_path}}'
        file_name: '{{file_name}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → sharepoint-document-upload.yml

Checks the status of an online order.

naftiko: '0.5'
info:
  label: Online Order Status
  description: Checks the status of an online order.
  tags:
  - e-commerce
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: e-commerce
    port: 8080
    tools:
    - name: get-online
      description: Checks the status of an online order.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The online order status identifier.
      call: e-commerce-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: e-commerce-api
    baseUri: https://api.walgreens.com/e-commerce/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: online
      path: /online/order/status/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-online
        method: GET
Open in Framework → View in Fleet → online-order-status.yml

Retrieves the balance of a gift card.

naftiko: '0.5'
info:
  label: Gift Card Balance Lookup
  description: Retrieves the balance of a gift card.
  tags:
  - finance
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: get-gift
      description: Retrieves the balance of a gift card.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The gift card balance lookup identifier.
      call: finance-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: finance-api
    baseUri: https://api.walgreens.com/finance/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: gift
      path: /gift/card/balance/lookup/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-gift
        method: GET
Open in Framework → View in Fleet → gift-card-balance-lookup.yml

Retrieves retail operational data for workflow 18.

naftiko: '0.5'
info:
  label: Retail Data Query 18
  description: Retrieves retail operational data for workflow 18.
  tags:
  - retail
  - operations
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: get-data-18
      description: Query retail data for workflow 18.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: retail-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://api.walgreens.com/retail/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-18
        method: GET
Open in Framework → View in Fleet → retail-data-query-18.yml

Retrieves a Datadog monitor status.

naftiko: '0.5'
info:
  label: Datadog Monitor Viewer
  description: Retrieves a Datadog monitor status.
  tags:
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: get-datadog
      description: Retrieves a Datadog monitor status.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The datadog monitor viewer identifier.
      call: monitoring-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: monitoring-api
    baseUri: https://api.walgreens.com/monitoring/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: datadog
      path: /datadog/monitor/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-datadog
        method: GET
Open in Framework → View in Fleet → datadog-monitor-viewer.yml

Fetches Twitter mentions for health awareness campaigns and logs results to Google Sheets.

naftiko: '0.5'
info:
  label: Twitter Health Awareness Tracker
  description: Fetches Twitter mentions for health awareness campaigns and logs results to Google Sheets.
  tags:
  - marketing
  - social-media
  - twitter
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: social-listening
    port: 8080
    tools:
    - name: track-health-mentions
      description: Search Twitter for health campaign mentions and log.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search query.
      - name: since_date
        in: body
        type: string
        description: Start date.
      steps:
      - name: search-tweets
        type: call
        call: twitter.search-recent
        with:
          query: '{{query}}'
          start_time: '{{since_date}}T00:00:00Z'
      - name: log-results
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: wag_social_health
          row:
            query: '{{query}}'
            count: '{{search-tweets.meta.result_count}}'
  consumes:
  - type: http
    namespace: twitter
    baseUri: https://api.twitter.com/2
    authentication:
      type: bearer
      token: $secrets.twitter_bearer_token
    resources:
    - name: tweets-search
      path: /tweets/search/recent
      operations:
      - name: search-recent
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: rows
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → twitter-health-awareness-tracker.yml

Orchestrates retail workflow 20 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 20
  description: Orchestrates retail workflow 20 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-020
      description: Orchestrates retail workflow 20 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 Retail Workflow 20 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-20.yml

Orchestrates retail workflow 8 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 8
  description: Orchestrates retail workflow 8 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-008
      description: Orchestrates retail 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 Retail Workflow 8 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-8.yml

Launches a seasonal flu vaccination campaign by pulling eligible patients from Salesforce, scheduling MailChimp email blasts, posting on Instagram, and tracking sign-ups in Google Sheets.

naftiko: '0.5'
info:
  label: Seasonal Flu Campaign Orchestrator
  description: Launches a seasonal flu vaccination campaign by pulling eligible patients from Salesforce, scheduling MailChimp email blasts, posting on Instagram, and tracking sign-ups in Google Sheets.
  tags:
  - healthcare
  - marketing
  - salesforce
  - mailchimp
  - instagram
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: flu-campaign
    port: 8080
    tools:
    - name: launch-flu-campaign
      description: Coordinate multi-channel flu vaccination campaign.
      inputParameters:
      - name: campaign_name
        in: body
        type: string
        description: Campaign name.
      - name: target_segment
        in: body
        type: string
        description: Patient segment.
      steps:
      - name: get-eligible-patients
        type: call
        call: salesforce.query-patients
        with:
          segment: '{{target_segment}}'
      - name: send-email
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: flu_eligible
          subject: Get Your Flu Shot at Walgreens
          template: flu_campaign
      - name: post-instagram
        type: call
        call: instagram.create-media
        with:
          caption: 'Flu season is here. Get vaccinated at Walgreens! #GetYourFluShot'
      - name: log-campaign
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: flu_campaign_tracker
          row:
            campaign: '{{campaign_name}}'
            eligible_patients: '{{get-eligible-patients.totalSize}}'
            segment: '{{target_segment}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://walgreens.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-patients
        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: instagram
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.instagram_token
    resources:
    - name: media
      path: /{{ig_user_id}}/media
      inputParameters:
      - name: ig_user_id
        in: path
      operations:
      - name: create-media
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: rows
      path: /spreadsheets/{{spreadsheet_id}}/values/Sheet1:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → seasonal-flu-campaign-orchestrator.yml

Retrieves retail operational data for workflow 9.

naftiko: '0.5'
info:
  label: Retail Data Query 9
  description: Retrieves retail operational data for workflow 9.
  tags:
  - retail
  - operations
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: get-data-9
      description: Query retail data for workflow 9.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: retail-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://api.walgreens.com/retail/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-9
        method: GET
Open in Framework → View in Fleet → retail-data-query-9.yml

Retrieves retail operational data for workflow 21.

naftiko: '0.5'
info:
  label: Retail Data Query 21
  description: Retrieves retail operational data for workflow 21.
  tags:
  - retail
  - operations
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: get-data-21
      description: Query retail data for workflow 21.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: retail-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://api.walgreens.com/retail/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-21
        method: GET
Open in Framework → View in Fleet → retail-data-query-21.yml

Retrieves current pricing for a product.

naftiko: '0.5'
info:
  label: Product Price Lookup
  description: Retrieves current pricing for a product.
  tags:
  - pricing
  - product-management
capability:
  exposes:
  - type: mcp
    namespace: pricing
    port: 8080
    tools:
    - name: get-product
      description: Retrieves current pricing for a product.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The product price lookup identifier.
      call: pricing-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: pricing-api
    baseUri: https://api.walgreens.com/pricing/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: product
      path: /product/price/lookup/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-product
        method: GET
Open in Framework → View in Fleet → product-price-lookup.yml

Orchestrates retail workflow 22 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 22
  description: Orchestrates retail workflow 22 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-022
      description: Orchestrates retail workflow 22 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 Retail Workflow 22 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-22.yml

Retrieves search performance data from Google Search Console.

naftiko: '0.5'
info:
  label: Google Search Console Performance
  description: Retrieves search performance data from Google Search Console.
  tags:
  - seo
  - analytics
  - google-search-console
capability:
  exposes:
  - type: mcp
    namespace: seo-analytics
    port: 8080
    tools:
    - name: get-search-performance
      description: Fetch GSC performance data.
      inputParameters:
      - name: site_url
        in: body
        type: string
        description: Site URL.
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: end_date
        in: body
        type: string
        description: End date.
      call: gsc.query-analytics
      with:
        site_url: '{{site_url}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: clicks
        type: number
        mapping: $.rows[0].clicks
      - name: impressions
        type: number
        mapping: $.rows[0].impressions
  consumes:
  - type: http
    namespace: gsc
    baseUri: https://www.googleapis.com/webmasters/v3
    authentication:
      type: bearer
      token: $secrets.google_search_console_token
    resources:
    - name: analytics
      path: /sites/{{site_url}}/searchAnalytics/query
      inputParameters:
      - name: site_url
        in: path
      operations:
      - name: query-analytics
        method: POST
Open in Framework → View in Fleet → google-search-console-performance.yml

Retrieves Datadog monitor status.

naftiko: '0.5'
info:
  label: Datadog Monitor Status Lookup
  description: Retrieves Datadog monitor status.
  tags:
  - monitoring
  - infrastructure
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-monitor-status
      description: Fetch Datadog monitor status.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Monitor ID.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: state
        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
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: monitors
      path: /monitor/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-monitor-status-lookup.yml

Orchestrates retail workflow 13 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 13
  description: Orchestrates retail workflow 13 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-013
      description: Orchestrates retail 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 Retail Workflow 13 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-13.yml

Orchestrates retail workflow 7 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 7
  description: Orchestrates retail workflow 7 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-007
      description: Orchestrates retail 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 Retail Workflow 7 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-7.yml

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

naftiko: '0.5'
info:
  label: Employee Onboarding Pipeline
  description: On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Orchestrate onboarding across Workday, ServiceNow, SharePoint, and Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID.
      - name: start_date
        in: body
        type: string
        description: Start date YYYY-MM-DD.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
      - name: provision-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: hr_onboarding
          folder_path: Onboarding/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Welcome to Walgreens, {{get-employee.first_name}}! Ticket: {{open-ticket.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://walgreens.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-onboarding-pipeline.yml

When a drug recall is received, queries SAP for affected inventory, creates a ServiceNow critical incident, notifies pharmacy staff via Microsoft Teams, and sends patient notifications via MailChimp.

naftiko: '0.5'
info:
  label: Drug Recall Alert Orchestrator
  description: When a drug recall is received, queries SAP for affected inventory, creates a ServiceNow critical incident, notifies pharmacy staff via Microsoft Teams, and sends patient notifications via MailChimp.
  tags:
  - pharmacy
  - safety
  - sap
  - servicenow
  - microsoft-teams
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: recall-management
    port: 8080
    tools:
    - name: process-drug-recall
      description: Identify affected inventory, create incident, and notify staff and patients.
      inputParameters:
      - name: ndc_code
        in: body
        type: string
        description: NDC code of recalled drug.
      - name: lot_number
        in: body
        type: string
        description: Lot number.
      - name: recall_description
        in: body
        type: string
        description: Recall description.
      steps:
      - name: find-affected-stock
        type: call
        call: sap.search-inventory-by-lot
        with:
          ndc: '{{ndc_code}}'
          lot: '{{lot_number}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'DRUG RECALL: NDC {{ndc_code}} Lot {{lot_number}}'
          category: pharmacy_recall
          priority: '1'
          description: '{{recall_description}}'
      - name: notify-pharmacy
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacy-ops
          text: 'RECALL ALERT: NDC {{ndc_code}} Lot {{lot_number}}. {{find-affected-stock.store_count}} stores affected. Incident: {{create-incident.number}}'
      - name: notify-patients
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: affected_patients
          subject: 'Important: Drug Recall Notice'
          template: drug_recall_notice
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_BATCH_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: batches
      path: /A_Batch
      operations:
      - name: search-inventory-by-lot
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://walgreens.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: basic
      username: anystring
      password: $secrets.mailchimp_api_key
    resources:
    - name: campaigns
      path: /campaigns
      operations:
      - name: send-campaign
        method: POST
Open in Framework → View in Fleet → drug-recall-alert-orchestrator.yml

Triggers a Power BI dataset refresh.

naftiko: '0.5'
info:
  label: Power BI Dashboard Refresh
  description: Triggers a Power BI dataset refresh.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: refresh-dataset
      description: Trigger a Power BI dataset refresh.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Workspace GUID.
      - name: dataset_id
        in: body
        type: string
        description: Dataset GUID.
      call: powerbi.trigger-refresh
      with:
        workspace_id: '{{workspace_id}}'
        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: /groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: workspace_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
Open in Framework → View in Fleet → power-bi-dashboard-refresh.yml

Processes pharmacy insurance claims by verifying coverage in Salesforce Health Cloud, submitting the claim via the insurance gateway, and updating the patient record with claim status.

naftiko: '0.5'
info:
  label: Insurance Claim Processing Orchestrator
  description: Processes pharmacy insurance claims by verifying coverage in Salesforce Health Cloud, submitting the claim via the insurance gateway, and updating the patient record with claim status.
  tags:
  - healthcare
  - pharmacy
  - insurance
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: insurance-claims
    port: 8080
    tools:
    - name: process-insurance-claim
      description: Verify coverage, submit claim, and update patient record.
      inputParameters:
      - name: patient_id
        in: body
        type: string
        description: Patient contact ID.
      - name: rx_number
        in: body
        type: string
        description: Prescription number.
      - name: ndc_code
        in: body
        type: string
        description: NDC code.
      steps:
      - name: get-patient
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{patient_id}}'
      - name: verify-coverage
        type: call
        call: salesforce.check-insurance
        with:
          contact_id: '{{patient_id}}'
          ndc: '{{ndc_code}}'
      - name: update-status
        type: call
        call: salesforce.update-rx-status
        with:
          rx_number: '{{rx_number}}'
          claim_status: '{{verify-coverage.status}}'
          copay: '{{verify-coverage.copay}}'
      - name: notify-pharmacy
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacy-claims
          text: 'Claim for Rx {{rx_number}}: {{verify-coverage.status}}. Copay: ${{verify-coverage.copay}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://walgreens.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: check-insurance
        method: GET
    - name: prescriptions
      path: /sobjects/Prescription__c/{{rx_number}}
      inputParameters:
      - name: rx_number
        in: path
      operations:
      - name: update-rx-status
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → insurance-claim-processing-orchestrator.yml

Checks store inventory levels in SAP, creates purchase requisitions for low-stock items, and notifies store managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Store Replenishment Orchestrator
  description: Checks store inventory levels in SAP, creates purchase requisitions for low-stock items, and notifies store managers via Microsoft Teams.
  tags:
  - supply-chain
  - retail
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: store-replenishment
    port: 8080
    tools:
    - name: replenish-store
      description: Check inventory and create purchase requisitions for low items.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: Store/plant ID.
      - name: category
        in: body
        type: string
        description: Product category.
      steps:
      - name: check-levels
        type: call
        call: sap.get-store-inventory
        with:
          plant: '{{store_id}}'
          category: '{{category}}'
      - name: create-requisition
        type: call
        call: sap.create-purchase-requisition
        with:
          items: '{{check-levels.below_reorder_items}}'
          plant: '{{store_id}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: store-{{store_id}}
          text: 'Replenishment order for {{check-levels.below_reorder_count}} items. PR: {{create-requisition.pr_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod
      operations:
      - name: get-store-inventory
        method: GET
    - name: requisitions
      path: /A_PurchaseRequisition
      operations:
      - name: create-purchase-requisition
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → store-replenishment-orchestrator.yml

Retrieves retail operational data for workflow 6.

naftiko: '0.5'
info:
  label: Retail Data Query 6
  description: Retrieves retail operational data for workflow 6.
  tags:
  - retail
  - operations
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: get-data-6
      description: Query retail data for workflow 6.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: retail-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://api.walgreens.com/retail/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-6
        method: GET
Open in Framework → View in Fleet → retail-data-query-6.yml

Retrieves retail operational data for workflow 12.

naftiko: '0.5'
info:
  label: Retail Data Query 12
  description: Retrieves retail operational data for workflow 12.
  tags:
  - retail
  - operations
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: get-data-12
      description: Query retail data for workflow 12.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: retail-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://api.walgreens.com/retail/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-12
        method: GET
Open in Framework → View in Fleet → retail-data-query-12.yml

Retrieves Cloudflare zone analytics for walgreens.com.

naftiko: '0.5'
info:
  label: Cloudflare CDN Performance
  description: Retrieves Cloudflare zone analytics for walgreens.com.
  tags:
  - infrastructure
  - cdn
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: cdn-ops
    port: 8080
    tools:
    - name: get-zone-analytics
      description: Fetch Cloudflare zone analytics.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Zone ID.
      call: cloudflare.get-zone-analytics
      with:
        zone_id: '{{zone_id}}'
      outputParameters:
      - name: requests
        type: number
        mapping: $.result.totals.requests.all
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: analytics
      path: /zones/{{zone_id}}/analytics/dashboard
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: get-zone-analytics
        method: GET
Open in Framework → View in Fleet → cloudflare-cdn-performance.yml

Orchestrates retail workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 4
  description: Orchestrates retail workflow 4 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-004
      description: Orchestrates retail 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 Retail Workflow 4 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-4.yml

Orchestrates retail workflow 10 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 10
  description: Orchestrates retail workflow 10 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-010
      description: Orchestrates retail 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 Retail Workflow 10 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-10.yml

Retrieves on-hand inventory from SAP for a given material and store location.

naftiko: '0.5'
info:
  label: SAP Inventory Level Lookup
  description: Retrieves on-hand inventory from SAP for a given material and store location.
  tags:
  - inventory
  - retail
  - sap
capability:
  exposes:
  - type: mcp
    namespace: inventory-lookup
    port: 8080
    tools:
    - name: get-inventory-onhand
      description: Fetch SAP on-hand inventory for a material and plant.
      inputParameters:
      - name: material_id
        in: body
        type: string
        description: SAP material number or NDC code.
      - name: plant_id
        in: body
        type: string
        description: Store/plant ID.
      call: sap.get-onhand
      with:
        material: '{{material_id}}'
        plant: '{{plant_id}}'
      outputParameters:
      - name: quantity_on_hand
        type: number
        mapping: $.d.MatlWrhsStkQtyInMatlBaseUnit
      - name: reserved
        type: number
        mapping: $.d.ReservedQuantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: stock
      path: /A_MatlStkInAcctMod(Material='{{material}}',Plant='{{plant}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-onhand
        method: GET
Open in Framework → View in Fleet → sap-inventory-level-lookup.yml

Retrieves Google Analytics metrics for the Walgreens store locator page.

naftiko: '0.5'
info:
  label: Google Analytics Store Locator Metrics
  description: Retrieves Google Analytics metrics for the Walgreens store locator page.
  tags:
  - analytics
  - retail
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-locator-metrics
      description: Fetch GA metrics for the store locator.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date YYYY-MM-DD.
      - name: end_date
        in: body
        type: string
        description: End date YYYY-MM-DD.
      call: ga.get-report
      with:
        page_path: /store-locator
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: pageviews
        type: number
        mapping: $.rows[0].pageviews
      - name: sessions
        type: number
        mapping: $.rows[0].sessions
  consumes:
  - type: http
    namespace: ga
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: get-report
        method: POST
Open in Framework → View in Fleet → google-analytics-store-locator-metrics.yml

Orchestrates retail workflow 11 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 11
  description: Orchestrates retail workflow 11 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-011
      description: Orchestrates retail 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 Retail Workflow 11 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-11.yml

Orchestrates retail workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 5
  description: Orchestrates retail workflow 5 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-005
      description: Orchestrates retail 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 Retail Workflow 5 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-5.yml

Orchestrates retail workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 1
  description: Orchestrates retail workflow 1 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-001
      description: Orchestrates retail 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 Retail Workflow 1 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-1.yml

Runs pharmacy compliance checks by pulling license data from SAP, cross-referencing with regulatory requirements in ServiceNow, generating audit reports in SharePoint, and notifying compliance officers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Pharmacy Compliance Audit Orchestrator
  description: Runs pharmacy compliance checks by pulling license data from SAP, cross-referencing with regulatory requirements in ServiceNow, generating audit reports in SharePoint, and notifying compliance officers via Microsoft Teams.
  tags:
  - pharmacy
  - compliance
  - sap
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pharmacy-compliance
    port: 8080
    tools:
    - name: run-compliance-audit
      description: Execute pharmacy compliance audit across systems.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: Store ID.
      - name: audit_type
        in: body
        type: string
        description: Audit type (e.g., 'DEA', 'state_board').
      steps:
      - name: get-license-data
        type: call
        call: sap.get-pharmacy-licenses
        with:
          store: '{{store_id}}'
      - name: check-requirements
        type: call
        call: servicenow.get-compliance-checklist
        with:
          audit_type: '{{audit_type}}'
          store: '{{store_id}}'
      - name: create-report
        type: call
        call: sharepoint.create-document
        with:
          site_id: pharmacy_compliance
          folder_path: Audits/{{store_id}}/{{audit_type}}
          content:
            store: '{{store_id}}'
            audit_type: '{{audit_type}}'
            license_status: '{{get-license-data.status}}'
      - name: notify-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: compliance-team
          text: 'Audit complete for store {{store_id}} ({{audit_type}}). Report: {{create-report.url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_PHARMACY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: licenses
      path: /A_PharmacyLicense
      operations:
      - name: get-pharmacy-licenses
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://walgreens.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: checklists
      path: /table/compliance_checklist
      operations:
      - name: get-compliance-checklist
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: documents
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → pharmacy-compliance-audit-orchestrator.yml

Retrieves retail operational data for workflow 15.

naftiko: '0.5'
info:
  label: Retail Data Query 15
  description: Retrieves retail operational data for workflow 15.
  tags:
  - retail
  - operations
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: get-data-15
      description: Query retail data for workflow 15.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: retail-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://api.walgreens.com/retail/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-15
        method: GET
Open in Framework → View in Fleet → retail-data-query-15.yml

Orchestrates retail workflow 14 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 14
  description: Orchestrates retail workflow 14 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-014
      description: Orchestrates retail 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 Retail Workflow 14 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-14.yml

Orchestrates retail workflow 16 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 16
  description: Orchestrates retail workflow 16 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-016
      description: Orchestrates retail workflow 16 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 Retail Workflow 16 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-16.yml

Orchestrates retail workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 2
  description: Orchestrates retail workflow 2 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-002
      description: Orchestrates retail 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 Retail Workflow 2 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-2.yml

Triggers an Informatica data quality job for pharmacy data validation.

naftiko: '0.5'
info:
  label: Informatica Data Quality Check
  description: Triggers an Informatica data quality job for pharmacy data validation.
  tags:
  - data-quality
  - pharmacy
  - informatica
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Trigger Informatica DQ job.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: Informatica job name.
      call: informatica.run-job
      with:
        job_name: '{{job_name}}'
  consumes:
  - type: http
    namespace: informatica
    baseUri: https://dm-us.informaticacloud.com/saas/api/v2
    authentication:
      type: bearer
      token: $secrets.informatica_token
    resources:
    - name: jobs
      path: /job
      operations:
      - name: run-job
        method: POST
Open in Framework → View in Fleet → informatica-data-quality-check.yml

Retrieves a HubSpot contact by email for marketing engagement tracking.

naftiko: '0.5'
info:
  label: HubSpot Customer Engagement Lookup
  description: Retrieves a HubSpot contact by email for marketing engagement tracking.
  tags:
  - marketing
  - crm
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: crm-marketing
    port: 8080
    tools:
    - name: get-hubspot-contact
      description: Look up HubSpot contact by email.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Contact email.
      call: hubspot.get-contact-by-email
      with:
        email: '{{email}}'
      outputParameters:
      - name: lifecycle_stage
        type: string
        mapping: $.properties.lifecyclestage
      - name: last_activity
        type: string
        mapping: $.properties.notes_last_updated
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/{{email}}?idProperty=email
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-contact-by-email
        method: GET
Open in Framework → View in Fleet → hubspot-customer-engagement-lookup.yml

When a new prescription is received, verifies insurance eligibility in the pharmacy system, checks drug inventory in SAP, creates a fulfillment task in ServiceNow, and notifies the patient via WhatsApp.

naftiko: '0.5'
info:
  label: Prescription Fulfillment Orchestrator
  description: When a new prescription is received, verifies insurance eligibility in the pharmacy system, checks drug inventory in SAP, creates a fulfillment task in ServiceNow, and notifies the patient via WhatsApp.
  tags:
  - pharmacy
  - fulfillment
  - sap
  - servicenow
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: rx-fulfillment
    port: 8080
    tools:
    - name: process-prescription
      description: Orchestrate prescription verification, inventory check, and patient notification.
      inputParameters:
      - name: rx_number
        in: body
        type: string
        description: Prescription number.
      - name: patient_id
        in: body
        type: string
        description: Patient identifier.
      - name: ndc_code
        in: body
        type: string
        description: National Drug Code.
      steps:
      - name: check-inventory
        type: call
        call: sap.check-drug-inventory
        with:
          ndc: '{{ndc_code}}'
          store: '{{store_id}}'
      - name: create-task
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Rx fill: {{rx_number}} for patient {{patient_id}}'
          category: pharmacy_fulfillment
          priority: '2'
      - name: notify-patient
        type: call
        call: whatsapp.send-message
        with:
          template: rx_ready
          patient_id: '{{patient_id}}'
          rx_number: '{{rx_number}}'
          status: '{{check-inventory.availability}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inventory
      path: /A_MatlStkInAcctMod
      operations:
      - name: check-drug-inventory
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://walgreens.service-now.com/api/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: whatsapp
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.whatsapp_token
    resources:
    - name: messages
      path: /{{phone_number_id}}/messages
      inputParameters:
      - name: phone_number_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → prescription-fulfillment-orchestrator.yml

Retrieves retail operational data for workflow 3.

naftiko: '0.5'
info:
  label: Retail Data Query 3
  description: Retrieves retail operational data for workflow 3.
  tags:
  - retail
  - operations
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: get-data-3
      description: Query retail data for workflow 3.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: retail-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://api.walgreens.com/retail/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: data
      path: /data/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-data-3
        method: GET
Open in Framework → View in Fleet → retail-data-query-3.yml

Orchestrates retail workflow 17 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Retail Workflow 17
  description: Orchestrates retail workflow 17 by coordinating across systems, validating data, and sending notifications.
  tags:
  - retail
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retail
    port: 8080
    tools:
    - name: run-retail-workflow-017
      description: Orchestrates retail workflow 17 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 Retail Workflow 17 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.walgreens.com/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.walgreens.com/v2
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: secondary
      path: /execute
      operations:
      - name: process
        method: POST
  - type: http
    namespace: notification-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/notifications
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → retail-workflow-17.yml

Initiates inter-DC stock transfers in SAP, updates Oracle EBS warehouse records, and notifies logistics via Microsoft Teams.

naftiko: '0.5'
info:
  label: Distribution Center Transfer Orchestrator
  description: Initiates inter-DC stock transfers in SAP, updates Oracle EBS warehouse records, and notifies logistics via Microsoft Teams.
  tags:
  - supply-chain
  - logistics
  - sap
  - oracle-e-business-suite
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dc-transfers
    port: 8080
    tools:
    - name: initiate-dc-transfer
      description: Create stock transfer between distribution centers.
      inputParameters:
      - name: material_id
        in: body
        type: string
        description: Material number.
      - name: from_dc
        in: body
        type: string
        description: Source DC.
      - name: to_dc
        in: body
        type: string
        description: Destination DC.
      - name: quantity
        in: body
        type: number
        description: Transfer quantity.
      steps:
      - name: create-transfer
        type: call
        call: sap.create-stock-transfer
        with:
          material: '{{material_id}}'
          from_plant: '{{from_dc}}'
          to_plant: '{{to_dc}}'
          quantity: '{{quantity}}'
      - name: update-wms
        type: call
        call: oracle-ebs.update-warehouse
        with:
          from_org: '{{from_dc}}'
          to_org: '{{to_dc}}'
          item: '{{material_id}}'
          quantity: '{{quantity}}'
      - name: notify-logistics
        type: call
        call: msteams.send-message
        with:
          channel_id: logistics-ops
          text: 'DC transfer {{create-transfer.transfer_number}}: {{quantity}} units of {{material_id}} from {{from_dc}} to {{to_dc}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_STOCK_TRANSFER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: transfers
      path: /A_StockTransfer
      operations:
      - name: create-stock-transfer
        method: POST
  - type: http
    namespace: oracle-ebs
    baseUri: https://wag-ebs.walgreens.com/webservices/rest/wms
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: warehouse
      path: /transfers
      operations:
      - name: update-warehouse
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → distribution-center-transfer-orchestrator.yml

Retrieves Instagram campaign metrics for health and wellness promotions.

naftiko: '0.5'
info:
  label: Instagram Health Campaign Lookup
  description: Retrieves Instagram campaign metrics for health and wellness promotions.
  tags:
  - marketing
  - social-media
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: social-analytics
    port: 8080
    tools:
    - name: get-instagram-campaign
      description: Fetch Instagram campaign metrics.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Meta campaign ID.
      call: meta.get-campaign-insights
      with:
        campaign_id: '{{campaign_id}}'
      outputParameters:
      - name: impressions
        type: number
        mapping: $.data[0].impressions
      - name: reach
        type: number
        mapping: $.data[0].reach
  consumes:
  - type: http
    namespace: meta
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_ads_token
    resources:
    - name: campaign-insights
      path: /{{campaign_id}}/insights
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-insights
        method: GET
Open in Framework → View in Fleet → instagram-health-campaign-lookup.yml

Retrieves active Dynatrace problems for Walgreens systems.

naftiko: '0.5'
info:
  label: Dynatrace Application Monitoring
  description: Retrieves active Dynatrace problems for Walgreens systems.
  tags:
  - monitoring
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-active-problems
      description: Fetch active Dynatrace problems.
      inputParameters:
      - name: time_range
        in: body
        type: string
        description: Time range.
      call: dynatrace.get-problems
      with:
        relativeTime: '{{time_range}}'
      outputParameters:
      - name: total_count
        type: number
        mapping: $.totalCount
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://walgreens.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: problems
      path: /problems
      operations:
      - name: get-problems
        method: GET
Open in Framework → View in Fleet → dynatrace-application-monitoring.yml

Searches for files in Google Drive.

naftiko: '0.5'
info:
  label: Google Drive Document Search
  description: Searches for files in Google Drive.
  tags:
  - documents
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: drive-search
    port: 8080
    tools:
    - name: search-drive-files
      description: Search Google Drive files.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search query.
      call: gdrive.search-files
      with:
        q: name contains '{{query}}'
      outputParameters:
      - name: files
        type: array
        mapping: $.files
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files
      operations:
      - name: search-files
        method: GET
Open in Framework → View in Fleet → google-drive-document-search.yml

Retrieves foot traffic data for a retail store.

naftiko: '0.5'
info:
  label: Store Foot Traffic Report
  description: Retrieves foot traffic data for a retail store.
  tags:
  - operations
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: get-store
      description: Retrieves foot traffic data for a retail store.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The store foot traffic report identifier.
      call: operations-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: operations-api
    baseUri: https://api.walgreens.com/operations/v1
    authentication:
      type: bearer
      token: $secrets.walgreens_api_token
    resources:
    - name: store
      path: /store/foot/traffic/report/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-store
        method: GET
Open in Framework → View in Fleet → store-foot-traffic-report.yml

Tracks controlled substance dispensing by logging transactions in SAP, validating against DEA quotas, creating compliance records in ServiceNow, and alerting the pharmacy compliance team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Controlled Substance Tracking Orchestrator
  description: Tracks controlled substance dispensing by logging transactions in SAP, validating against DEA quotas, creating compliance records in ServiceNow, and alerting the pharmacy compliance team via Microsoft Teams.
  tags:
  - pharmacy
  - compliance
  - controlled-substances
  - sap
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: controlled-substance-ops
    port: 8080
    tools:
    - name: log-controlled-dispense
      description: Log and validate controlled substance dispensing.
      inputParameters:
      - name: rx_number
        in: body
        type: string
        description: Prescription number.
      - name: dea_schedule
        in: body
        type: string
        description: DEA schedule (II-V).
      - name: quantity
        in: body
        type: number
        description: Quantity dispensed.
      - name: store_id
        in: body
        type: string
        description: Store ID.
      steps:
      - name: log-transaction
        type: call
        call: sap.log-controlled-dispense
        with:
          rx: '{{rx_number}}'
          schedule: '{{dea_schedule}}'
          quantity: '{{quantity}}'
          store: '{{store_id}}'
      - name: create-compliance-record
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'CS dispense: Rx {{rx_number}} Schedule {{dea_schedule}}'
          category: controlled_substance_compliance
          priority: '3'
      - name: alert-compliance
        type: call
        call: msteams.send-message
        with:
          channel_id: pharmacy-compliance
          text: 'CS Log: Rx {{rx_number}} (Schedule {{dea_schedule}}) - {{quantity}} units at store {{store_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://wag-sap.walgreens.com/sap/opu/odata/sap/API_PHARMACY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: controlled
      path: /A_ControlledSubstanceLog
      operations:
      - name: log-controlled-dispense
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://walgreens.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → controlled-substance-tracking-orchestrator.yml

Retrieves nearby Walgreens store locations using Google Maps Places API.

naftiko: '0.5'
info:
  label: Google Maps Store Finder
  description: Retrieves nearby Walgreens store locations using Google Maps Places API.
  tags:
  - retail
  - location
  - google-maps
capability:
  exposes:
  - type: mcp
    namespace: store-locator
    port: 8080
    tools:
    - name: find-nearby-stores
      description: Find nearby Walgreens stores by coordinates.
      inputParameters:
      - name: latitude
        in: body
        type: string
        description: Latitude.
      - name: longitude
        in: body
        type: string
        description: Longitude.
      - name: radius
        in: body
        type: string
        description: Search radius in meters.
      call: gmaps.nearby-search
      with:
        location: '{{latitude}},{{longitude}}'
        radius: '{{radius}}'
        keyword: Walgreens
      outputParameters:
      - name: stores
        type: array
        mapping: $.results
  consumes:
  - type: http
    namespace: gmaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: bearer
      token: $secrets.google_maps_key
    resources:
    - name: places
      path: /place/nearbysearch/json
      operations:
      - name: nearby-search
        method: GET
Open in Framework → View in Fleet → google-maps-store-finder.yml

Areas — Total: 2510

  • .NET
  • 3D
  • 3D Modeling
  • AI Agents
  • AI Applications
  • AI Architectures
  • AI Assistants
  • AI Governance
  • AI Ops
  • AI Platforms
  • AI Securities
  • AI Solutions
  • AI Technologies
  • AI Tools
  • AI Trainings
  • AJAX
  • API Design
  • API Development
  • API Documentations
  • API Gateways
  • API Integrations
  • API Management
  • API Securities
  • API Testing
  • AWS Step Functions
  • Acadias
  • Acceptance Testing
  • Access Cards
  • Access Controls
  • Access Management
  • Access Management Solutions
  • Accessibility
  • Account Based Marketing
  • Account Management
  • Accountability
  • Accounting
  • Accounting Platforms
  • Accounting Systems
  • Accounts Payables
  • Accounts Receivables
  • Actionscripts
  • Active Directory
  • Active Directory Certificate Services
  • Active Directory Domain Services
  • Activity Tracking
  • Actuarial Sciences
  • Ad Management
  • Ad Platforms
  • Ad-teches
  • Administration
  • Administratives
  • Advertising
  • Advertising Platforms
  • Advertising Technologies
  • Agent Development
  • Agent Frameworks
  • Agent-Based Frameworks
  • Agentic AI
  • Agentic Frameworks
  • Agentic Solutions
  • Agentic Systems
  • Agentics
  • Agents
  • Alarm Systems
  • Alert Systems
  • Alerting
  • Alerts
  • Algorithm Design
  • Algorithm Development
  • Algorithms
  • Ambassadors
  • Analysis
  • Analytical Databases
  • Analytics
  • Analytics Infrastructure
  • Androids
  • Animations
  • Annotations
  • Anomaly Detections
  • Anti-Money Launderings
  • Antivirus
  • Apache Portable Runtimes
  • App Store Deployments
  • Apple iOS
  • Applicant Tracking Systems
  • Application Architectures
  • Application Deliveries
  • Application Development
  • Application Integrations
  • Application Lifecycle Management
  • Application Management
  • Application Monitoring
  • Application Performance Management
  • Application Platforms
  • Application Programming Interfaces
  • Application Securities
  • Application Servers
  • Applications
  • Architecture Design
  • Architecture Governance
  • Architecture Strategies
  • Architectures
  • Archives
  • Archiving
  • Argus
  • Artemis
  • Artifact Repositories
  • Artificial Intelligence
  • Artificial Intelligence/Machine Learning
  • Assessment Tools
  • Assessments
  • Asset Allocations
  • Asset Inventories
  • Asset Management
  • Asset Protection
  • Asset Valuations
  • Assignments
  • Asynchronous
  • Asynchronous Processing
  • Audience Engagements
  • Audience Segmentations
  • Audience Targetings
  • Audio
  • Audit Management
  • Audit Processes
  • Audit Reports
  • Audit Systems
  • Audit Techniques
  • Audit Tools
  • Audit Trails
  • Audits
  • Australias
  • Authentications
  • Authoring Tools
  • Authorizations
  • Auto Scaling
  • Automated Testing
  • Automated Testing Frameworks
  • Automation
  • Automation Platforms
  • Automation Testing
  • Automation Toolings
  • Automation Tools And Processes
  • Automotive
  • Autonomous Agents
  • Autonomous Systems
  • Autoscalings
  • Awareness
  • Axioms
  • B2B Marketing
  • BI
  • BPM
  • Backend Development
  • Backend Engineering
  • Backends
  • Background Checks
  • Backup And Recovery
  • Backups
  • Banking
  • Barcode Scanners
  • Bashes
  • Batch Processing
  • Battery Technologies
  • Behavioral Analysis
  • Belts
  • Benchmarkings
  • Benchmarks
  • Benefits Administration
  • Best Practices
  • Big Data
  • Billings
  • Biotechnologies
  • Blockchains
  • Bookings
  • Bookkeepings
  • Border Controls
  • Bots
  • Bridges
  • Browser Compatibilities
  • Browser Support
  • Browser-Based
  • Browsers
  • Budgetings
  • Bug Tracking
  • Build Automation
  • Build Pipelines
  • Build Systems
  • Build Tools
  • Building Automation
  • Building Securities
  • Business
  • Business Alignments
  • Business Analysis
  • Business Analytics
  • Business Applications
  • Business Automation
  • Business Continuities
  • Business Excellence
  • Business Intelligence
  • Business Logics
  • Business Management
  • Business Modeling
  • Business Models
  • Business Networking
  • 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 Processing
  • Cash Reconciliations
  • Catalog Management
  • Catalogs
  • Centralized Management
  • Certificate Authorities
  • Certificates
  • Certifications
  • Change Data Captures
  • Change Management
  • Chaos Engineering
  • Charting
  • Charts
  • Chatbot Platforms
  • Chatbots
  • Chats
  • Check-In Systems
  • Chemical Engineering
  • Cities
  • Claims Management
  • Claims Processing
  • Classification
  • Clean Energies
  • Clearings
  • Clerical Works
  • Client Communications
  • Client Data
  • Client Experiences
  • Client Management
  • Client Relations
  • Client Relationship Management
  • Client Reportings
  • Client Services
  • Client Solutions
  • Client Updates
  • Client-servers
  • Clients
  • Climate Changes
  • Climates
  • Clinical Texts
  • Cloud Access
  • Cloud Adoptions
  • Cloud Architectures
  • Cloud Computing
  • Cloud Computing Environments
  • Cloud Computing Platforms
  • Cloud Connectivity
  • Cloud Data
  • Cloud Data Environments
  • Cloud Data Management
  • Cloud Data Platforms
  • Cloud Data Warehouses
  • Cloud Databases
  • Cloud Deployments
  • Cloud Development
  • Cloud Ecosystems
  • Cloud Engineering
  • Cloud Environments
  • Cloud Governance
  • Cloud Infrastructure
  • Cloud Integrations
  • Cloud Landing Zones
  • Cloud Migrations
  • Cloud Natives
  • Cloud Networking
  • Cloud Operations
  • Cloud Platforms
  • Cloud Runs
  • Cloud Securities
  • Cloud Security Best Practices
  • Cloud Security Controls
  • Cloud Security Posture Management
  • Cloud Service Providers
  • Cloud Services
  • Cloud Software
  • Cloud Solutions
  • Cloud Storage
  • Cloud Strategies
  • Cloud Systems
  • Cloud Technologies
  • Cloud Workload Protection Platforms
  • Cloud-Based
  • Cloud-Based Applications
  • Cloud-Based Architectures
  • Cloud-Based Data Platforms
  • Cloud-Based Products
  • Cloud-Based Technologies
  • Cloud-based Environments
  • 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 Assistants
  • Code Coverages
  • Code Generations
  • Code Inspections
  • Code Management
  • Code Quality
  • Code Refactorings
  • Code Repositories
  • Code Reusabilities
  • Code Reuses
  • Code Reviews
  • Code Signings
  • Codes
  • Collaboration Tools
  • Collaborations
  • Collaborative Development
  • Collaterals
  • Collections
  • Columnar Data
  • Command Lines
  • Commerce
  • Commercial Services
  • Commodities
  • Common Sense
  • Communication Tools
  • Communications
  • Communities
  • Community Driven
  • Community Engagements
  • Community Healths
  • Compatibilities
  • Compensation Management
  • Competency Frameworks
  • Competitive Analyses
  • Competitive Analysis
  • Competitive Intelligence
  • Competitor Analysis
  • Compilations
  • Compilers
  • Complaint Management
  • Complex Systems
  • Complexity Analysis
  • Compliance
  • Compliance Automation
  • Compliance Expertises
  • Compliance Frameworks
  • Compliance Management
  • Compliance Managers
  • Compliance Monitoring
  • Compliance Monitoring Programs
  • Compliance Oversights
  • Compliance Policies
  • Compliance Systems
  • Compliance Tools
  • Component Engineering
  • Component Libraries
  • Compressions
  • Computational Biologies
  • Computational Linguistics
  • Computational Modeling
  • Computational Tools
  • 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
  • Conditional Sums
  • Conference Plannings
  • Conferences
  • Conferencings
  • Configuration Management
  • Configuration Management Tools
  • Configurations
  • Connectivity
  • Connectors
  • Construction
  • Consulting Services
  • Consultings
  • Consumer Analytics
  • Consumer Behaviors
  • Consumer Electronics
  • Consumer Protection
  • Contact Centers
  • Contact Management
  • Contacts
  • Container Networking
  • Container Orchestration
  • Container Orchestration Services
  • Container Platforms
  • Container Securities
  • Container Services
  • Containerization
  • Containerization Technologies
  • Containerized Applications
  • Containerized Environments
  • Containerized Workloads
  • Containers
  • Content Analytics
  • Content Creations
  • Content Deliveries
  • Content Delivery Networks
  • Content Filterings
  • Content Generations
  • Content Management
  • Content Management Systems
  • Content Marketing
  • Content Personalizations
  • Content Repositories
  • Content Strategies
  • Contents
  • Contexts and Dependency Injections
  • Continuous Deliveries
  • Continuous Deployments
  • Continuous Improvement Programmes
  • Continuous Improvements
  • Continuous Integration/Continuous Deployments
  • Continuous Integrations
  • Continuous Learning
  • Continuous Monitoring
  • Contract Management
  • Contract Management Software
  • Contributions
  • Control Algorithms
  • Control Methods
  • Control Planes
  • Control Systems
  • Controllers
  • Controls
  • Controls Frameworks
  • Conversational AI
  • Conversion Optimizations
  • Conveyor Systems
  • Coordinates
  • Coordination Services
  • Copywritings
  • Core Systems
  • Corporate Finances
  • Corporate Learning
  • Cost Accounting
  • Cost Containments
  • Cost Controls
  • Cost Engineering
  • Cost Management
  • Cost Optimizations
  • Country-Specific
  • Crawlings
  • Creative Productions
  • Creative Services
  • Creative Software
  • Creative Suites
  • Credentials
  • Credit Applications
  • Credit Cards
  • Credit Controls
  • Credit Management
  • Credit Process
  • Credit Risks
  • Credit Valuation Adjustments
  • Crisis Management
  • Critical Thinkings
  • Cross Languages
  • Cross Platforms
  • Cross Validation
  • Cross-browser Compatibilities
  • Cryptographies
  • Cs
  • Cultural Changes
  • Currencies
  • Custodies
  • Custom Development
  • Custom Software
  • Custom Solutions
  • Customer Analytics
  • Customer Data
  • Customer Data Platforms
  • Customer Databases
  • Customer Engagements
  • Customer Experience Design
  • Customer Experiences
  • Customer Feedback
  • Customer Intelligence
  • Customer Journey Mappings
  • Customer Journeys
  • Customer Management
  • Customer Onboardings
  • Customer Portals
  • Customer Relationship Management
  • Customer Satisfactions
  • Customer Segmentations
  • Customer Service
  • Customer Success
  • Customer Support
  • Customer Targetings
  • Customizations
  • Customs
  • Customs Brokerages
  • Cyber Defenses
  • Cyber Governance
  • Cyber Resiliences
  • Cyber Risk Management
  • Cyber Securities
  • Cyber Security Assessments
  • Cybersecurities
  • Cybersecurity Frameworks
  • DNS, DHCP, and IP Address Management
  • Daemons
  • Dashboards
  • Data
  • Data Access
  • Data Accessibility
  • Data Acquisition
  • Data Activations
  • Data Analysis
  • Data Analysis Methods
  • Data Analysis Software
  • Data Analysis Techniques
  • Data Analysis Tools
  • Data Analysis Tools And Software
  • Data Analysis Tools And Techniques
  • Data Analytic Tools
  • Data Analytics
  • Data Analytics Platforms
  • Data Analytics Tools
  • Data And Analytics Tools
  • Data Annotations
  • Data Anonymizations
  • Data Architectures
  • Data Capabilities
  • Data Captures
  • Data Catalogs
  • Data Center Infrastructure
  • Data Center Operations
  • Data Centers
  • Data Certifications
  • Data Classification
  • Data Cleanings
  • Data Cleansing
  • Data Cleanups
  • Data Collection Systems
  • Data Collection Tools
  • Data Collections
  • Data Consumptions
  • Data Conversions
  • Data Cores
  • Data Dashboards
  • Data Deletions
  • Data Discoveries
  • Data Distributions
  • Data Drifts
  • Data Encryptions
  • Data Engineering
  • Data Enrichments
  • Data Entries
  • Data Exchanges
  • Data Explorations
  • Data Extractions
  • Data Fabrics
  • Data Factories
  • Data Flows
  • Data Foundations
  • Data Gatherings
  • Data Governance
  • Data Governance Frameworks
  • Data Governance Policies
  • Data Governance Strategies
  • Data Handling
  • Data Historians
  • Data Hubs
  • Data Infrastructure
  • Data Ingestions
  • Data Insights
  • Data Integrations
  • Data Integrity
  • Data Intelligence
  • Data Interchange
  • Data Interpretations
  • Data Labelings
  • Data Lake Storage
  • Data Lakes
  • Data Lifecycle
  • Data Lifecycle Management
  • Data Lineages
  • Data Loadings
  • Data Loss Preventions
  • Data Management
  • Data Management Frameworks
  • Data Management Platforms
  • Data Management Strategies
  • Data Management Systems
  • Data Management Tools
  • Data Manipulations
  • Data Mappings
  • Data Marts
  • Data Meshes
  • Data Migrations
  • Data Minimizations
  • Data Mining
  • Data Monitoring
  • Data Movements
  • Data Observability
  • Data Operations
  • Data Orchestration
  • Data Ownerships
  • Data Parsings
  • Data Persistences
  • Data Pipelines
  • Data Platforms
  • Data Preparations
  • Data Privacies
  • Data Processes
  • Data Processing
  • Data Processing Frameworks
  • Data Processing Pipelines
  • Data Processing Platforms
  • Data Products
  • Data Profilings
  • Data Protection
  • Data Providers
  • Data Quality
  • Data Quality Checks
  • Data Quality Controls
  • Data Quality Frameworks
  • Data Quality Management
  • Data Quality Tools
  • Data Reconciliations
  • Data Replications
  • Data Reportings
  • Data Repositories
  • Data Retentions
  • Data Retrievals
  • Data Risk Management
  • Data Science Libraries
  • Data Science Models
  • Data Science Techniques
  • Data Sciences
  • Data Securities
  • Data Services
  • Data Sharing
  • Data Stacks
  • Data Standardizations
  • Data Stewardships
  • Data Storage
  • Data Storage Systems
  • Data Storytellings
  • Data Strategies
  • Data Streamings
  • Data Structures
  • Data Systems
  • Data Technologies
  • Data Testing
  • Data Tools
  • Data Tracking
  • Data Transfers
  • Data Transformation Workflows
  • Data Transformations
  • Data Transmissions
  • Data Validation
  • Data Vaults
  • Data Visualisations
  • Data Visualization Platforms
  • Data Visualization Software
  • Data Visualization Tools
  • Data Visualizations
  • Data Warehouse Architectures
  • Data Warehouse Technologies
  • Data Warehouses
  • Data Warehousing
  • Data Wranglings
  • Data and Analytics
  • Data-Driven
  • Data-Driven Development
  • Data-Driven Processes
  • Data-Driven Products
  • Data-Driven Techniques
  • Data-driven Dashboards
  • Data-driven Decision Making
  • Data-driven Initiatives
  • Data-driven Insights
  • Data-driven Optimizations
  • Database Administration
  • Database Applications
  • Database Architectures
  • Database Design
  • Database Integrations
  • Database Management
  • Database Optimizations
  • Database Performance Tuning
  • Database Queries
  • Database Securities
  • Database Systems
  • Database Technologies
  • Database Usages
  • Databases
  • Datastages
  • Debt Collections
  • Debuggings
  • Decentralized
  • Decentralized Autonomous Organizations
  • Decision Automation
  • Decision Making
  • Decision Sciences
  • Decision Support
  • Decision Support Systems
  • Deep Learning
  • Defis
  • Deliveries
  • Dependencies
  • Dependency Management
  • Dependency Mappings
  • Deployment Automation
  • Deployment Pipelines
  • Deployment Practices
  • Deployment Strategies
  • 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 Productivity Tools
  • Developer Tools
  • Development
  • Development Lifecycle
  • Development Operations
  • Development Platforms
  • Development Practices
  • Development Process
  • Development Tools
  • Device Drivers
  • Device Management
  • Diagnostic Tools
  • Diagnostics
  • Digital Advertising
  • Digital Arts
  • Digital Assets
  • Digital Channels
  • Digital Commerce
  • Digital Contents
  • Digital Engagements
  • Digital Experiences
  • Digital Identities
  • Digital Infrastructure
  • Digital Learning Tools
  • Digital Marketing
  • Digital Marketing Technologies
  • Digital Media
  • Digital Operations
  • Digital Products
  • Digital Publishings
  • Digital Rights
  • Digital Self-services
  • Digital Services
  • Digital Solutions
  • Digital Storytellings
  • Digital Strategies
  • Digital Systems
  • Digital Technologies
  • Digital Tools
  • Digital Transactions
  • Digital Transformations
  • Digital Twins
  • Digitals
  • Digitizations
  • Directed Acyclic Graphs
  • Directory
  • Directory Integrations
  • Directory Services
  • Disaster Recovery
  • Discontinued
  • Disease Preventions
  • Distributed
  • Distributed Applications
  • Distributed Computing
  • Distributed Data Processing
  • Distributed Databases
  • Distributed Environments
  • Distributed Storage
  • Distributed Systems
  • Distributed Tracing
  • Distributed Trainings
  • Distribution Platforms
  • Distribution Systems
  • Distributions
  • Document Creations
  • Document Management
  • Document Management Systems
  • Document Object Models
  • Document Processing
  • Documentations
  • Documents
  • Drift Detections
  • Due Diligences
  • Dynamic Application Security Testing
  • Dynamic Contents
  • Dynamic Languages
  • Dynamic Models
  • Dynamics
  • E-bankings
  • E-commerces
  • E-learnings
  • E-mails
  • E-procurements
  • E-signatures
  • ERP
  • ESB
  • Ecommerce Platforms
  • Ecommerces
  • Econometric Models
  • Econometric Techniques
  • Econometrics
  • Economic Analysis
  • Economic Data
  • Economics
  • Ecosystems
  • Edge Computing
  • Edteches
  • Education Technologies
  • Educational Technologies
  • Educations
  • Efficiencies
  • Elections
  • Electric Vehicles
  • Electrical Infrastructure
  • Electromagnetic Compatibilities
  • Electronic Banking
  • Electronic Communications
  • Electronic Data Interchange
  • Electronic Platforms
  • Electronic Signatures
  • Electronics
  • Email Filterings
  • Email Marketing
  • Email Securities
  • Emails
  • Embedded Analytics
  • 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 Protection
  • Endpoint Securities
  • Energies
  • Energy Efficiencies
  • 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 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
  • Enterprise-grade Architectures
  • Enterprises
  • Entertainments
  • Entity Data
  • Entity Framework Cores
  • Entity Resolutions
  • Entrepreneurships
  • Environment Management
  • Equipments
  • Equities
  • Equity Analysis
  • Error Handling
  • Error Tracking
  • Estimations
  • Ethical Hackings
  • Ethics
  • Evaluation Frameworks
  • Evaluations
  • Event Driven
  • Event Management
  • Event Plannings
  • Event Registrations
  • Event Streamings
  • Event-driven Systems
  • Events
  • Examples
  • Excels
  • Executions
  • Executive Reportings
  • Expense Management
  • Experiment Design
  • Experimentations
  • Exploitations
  • Exploratory Data Analysis
  • Extended Detection and Responses
  • Extensions
  • External Databases
  • 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 Systems
  • File Sharing
  • File Storage
  • File Transfers
  • Filing Systems
  • Finances
  • Financial Accounting
  • Financial Analysis
  • Financial Analytics
  • Financial Compliances
  • Financial Controls
  • Financial Data
  • Financial Management
  • Financial Modeling
  • Financial Models
  • Financial Operations
  • Financial Plannings
  • Financial Policies
  • Financial Reportings
  • Financial Researches
  • Financial Risk Management
  • Financial Securities
  • Financial Services
  • Financial Software
  • Financial Stabilities
  • Financial Systems
  • Financial Systems Interfaces
  • Financial Technologies
  • Fine-tunings
  • Fintech
  • Firewalls
  • Firmwares
  • First-Party Data
  • Fixed Incomes
  • Flashes
  • Flexibilities
  • Flexible Workings
  • Flinks
  • Flow Data
  • Food Safety
  • Forecasting
  • Forecasting Models
  • Foreign Exchanges
  • Forexes
  • Forge
  • Form Validation
  • Formal Verifications
  • Formatting Objects Processors
  • Forms
  • Foundations
  • Frameworks
  • Fraud Detections
  • Fraud Preventions
  • Freight Forwardings
  • Frenches
  • Front-ends
  • Frontend Development
  • Frontend Frameworks
  • Frontends
  • Full Stack Development
  • Full Stacks
  • Functional Testing
  • Functions
  • Futures
  • Gamings
  • Gateways
  • General Ledgers
  • Generative AI
  • Generative Modeling
  • Generative Models
  • Genetic Testing
  • Genomics
  • Geographies
  • Geolocations
  • Geospatials
  • GitHub Copilots
  • Global Markets
  • Global Positioning Systems
  • Global Trade Solutions
  • Goal Settings
  • Google Cloud Functions
  • Governance
  • Governance And Controls
  • Governance Frameworks
  • Governance Tools
  • Government
  • Government Policies
  • Government Relations
  • Government Systems
  • Graph Databases
  • Graphic Design
  • Graphical User Interfaces
  • Graphics
  • Graphics Processing Units
  • Graphings
  • Graphs
  • HCM
  • HR Analytics
  • HR Management
  • HR Systems
  • HR Tech
  • HR Technologies
  • HTTP Clients
  • Hadoop Distributed File Systems
  • Hardenings
  • Hardware
  • Hbases
  • Healthcare
  • Healthcare Economics
  • Healthcare Systems
  • Heating, Ventilation, and Air Conditionings
  • Hedging
  • Help Desks
  • High Availabilities
  • High Performance Computing
  • High Performances
  • High Throughputs
  • Hirings
  • Hospitality
  • Hosting
  • Human Capital Management
  • Human Computer Interactions
  • Human Factors
  • Human Resources
  • Human-Centered Design
  • Hybrid Apps
  • Hybrid Clouds
  • Hypervisors
  • Hypothesis Testing
  • IPAM
  • IT Architectures
  • IT Audits
  • IT Consultings
  • IT Equipments
  • IT Governance
  • IT Infrastructure
  • IT Management
  • IT Operations
  • IT Plannings
  • IT Platforms
  • IT Project Management
  • IT Risk Management
  • IT Risks
  • IT Service Management
  • IT Services
  • IT Strategies
  • Ideas
  • Ideations
  • Identities
  • Identity And Access Management
  • Identity Management
  • Identity Providers
  • Identity Verifications
  • Image Generations
  • Image Processing
  • Implementations
  • In-house Systems
  • Incident Management
  • Incident Management Systems
  • Incident Responses
  • Inclusive Design
  • Incubation
  • Indexings
  • Industrial Automation
  • Industrial Engineering
  • Industrial Equipments
  • Industry Analysis
  • Industry Reports
  • Inference Optimizations
  • Inferences
  • Informatics
  • Information Architectures
  • Information Design
  • 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
  • Informationssystemes
  • Infrastructure
  • Infrastructure As Codes
  • Infrastructure Components
  • Infrastructure Improvements
  • Infrastructure Management
  • Infrastructure Monitoring
  • Infrastructure Securities
  • Infrastructure Testing
  • Infrastructure-as-a-Service
  • Ingress Controllers
  • Innovation
  • Input Validation
  • Insights
  • Inspections
  • Instant Messaging
  • Instrumentations
  • Insurance Operations
  • Insurance Technologies
  • 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
  • Interactive Contents
  • Interactive Design
  • Interactive Voice Responses
  • Interactives
  • Interface Design
  • Interfaces
  • Internal Applications
  • Internal Audits
  • Internal Communications
  • Internal Control Frameworks
  • Internal Controls
  • Internal Databases
  • Internal Networks
  • Internal Platforms
  • Internal Systems
  • Internal Tools
  • International Laws
  • International Markets
  • International Trades
  • Internationalizations
  • Internet
  • Internet Applications
  • Internet of Things
  • Interoperabilities
  • Intranets
  • Intrusion Detection Systems
  • Intrusion Detections
  • Inventory Management
  • Investment Analysis
  • Investment Banking
  • Investment Management
  • Investment Tracking
  • Investments
  • Investor Relations
  • Invoice Processing
  • Isolations
  • Issue Tracking
  • Iterative Development
  • Ivies
  • Java Virtual Machines
  • Job Boards
  • Job Schedulers
  • Job Scheduling
  • Journalism
  • Journey Builders
  • Journey Design
  • Journey Mappings
  • Kernels
  • Key Management
  • Key Metrics
  • Key Values
  • Knowledge Bases
  • Knowledge Graphs
  • Knowledge Management
  • Knowledge Representations
  • Knowledge Sharing
  • Knowledge-sharing Platforms
  • LLM
  • Language Understandings
  • Large Data Sets
  • Large Databases
  • Large Dataset Manipulations
  • Large Datasets
  • Large Language Models
  • Large-scale Data Analysis
  • Large-scale Data Platforms
  • Large-scale Distributed Systems
  • 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 Holds
  • Legal Researches
  • Legal Tech
  • Legal Technologies
  • Lendings
  • Lessons Learned
  • Libraries
  • License Compliances
  • License Management
  • Licensings
  • Life Cycle Management
  • Lifecycle Management
  • Lightings
  • Linear Algebras
  • Liquidity Management
  • Live Chats
  • Live Streamings
  • Load Balancers
  • Load Balancings
  • Load Testing
  • Local GAAP
  • Localizations
  • Location Services
  • Log Analysis
  • Log Management
  • Logging
  • Logistic Regressions
  • Logistics
  • Low Carbons
  • Low Codes
  • Low Latencies
  • Low-Code Platforms
  • M&AS
  • ML Engineering
  • Machine Learning
  • Machine Learning Algorithms
  • 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 Researches
  • Market Risks
  • Marketing
  • Marketing Analytics
  • Marketing Automation
  • Marketing Platforms
  • Marketing Strategies
  • Marketing Technologies
  • Marketing Tools
  • Marketplace Platforms
  • Marketplaces
  • Markets
  • Massively Parallel Processing
  • Master Data
  • Master Data Management
  • Material Handling
  • Mathematical Modeling
  • Mathematics
  • Matrixes
  • Measurements
  • Mechanical Systems
  • Media
  • Media Contents
  • Media Management
  • Media Monitoring
  • Media Productions
  • Mediations
  • Medical Devices
  • Medical Records
  • Meeting Management
  • Meetings
  • Memory Management
  • Mental Healths
  • Mentoring
  • Mergers And Acquisitions
  • Meridians
  • Message Brokers
  • Message Buses
  • Message Queues
  • Messaging
  • Messaging Platforms
  • Messaging Queues
  • Messaging Systems
  • Metadata
  • Metadata Management
  • Metrics
  • Micro-services
  • Microcontrollers
  • Microservices
  • Microsoft Access
  • Middlewares
  • Migration Plannings
  • Migrations
  • Milestone Tracking
  • Mission Critical
  • Mobile Applications
  • Mobile Apps
  • Mobile Development
  • Mobile Devices
  • Mobile Technologies
  • Mobile Testing
  • Mobiles
  • Mockings
  • Model Adaptations
  • Model Architectures
  • Model Compressions
  • Model Context Protocols
  • Model Context Protocols (MCP)
  • Model Deployments
  • Model Development
  • Model Efficiencies
  • Model Evaluations
  • Model Fine-tunings
  • Model Governance
  • Model Guidances
  • Model Integrity
  • Model Interpretabilities
  • Model Lifecycle Management
  • Model Maintenance
  • Model Monitoring
  • Model Observability
  • Model Optimizations
  • Model Orchestration
  • Model Performance
  • Model Retrainings
  • Model Servings
  • Model Testing
  • Model Trainings
  • Model Validation
  • Model Validation Techniques
  • Model Versionings
  • Modeling
  • Modeling Platforms
  • Modeling Tools
  • Modern Digital Tools
  • Modernizations
  • Modularity
  • Monetizations
  • Money Markets
  • 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-platforms
  • Multi-regions
  • Multimedias
  • Multimodal AI
  • Multimodals
  • Multiple Systems
  • NLP
  • Named Entity Recognitions
  • Natural Language Processing
  • Navigation
  • Negotiations
  • Netwerkens
  • Network Access
  • Network Access Controls (NAC)
  • Network Analysis
  • Network Architectures
  • Network Automation
  • Network Configurations
  • Network Design
  • Network Devices
  • Network Diagnostics
  • Network Engineering
  • Network Infrastructure
  • Network Management
  • Network Monitoring
  • Network Optimizations
  • Network Performance
  • Network Securities
  • Network Topologies
  • Networking
  • Neural Networks
  • Neurodiversities
  • New Tabs
  • News
  • News Media
  • Newsletters
  • No Codes
  • NoSQL
  • Nonprofits
  • Nostro
  • Notebooks
  • Notifications
  • OIA
  • OLE for Process Controls
  • ORM
  • OSX
  • Object Storage
  • Object Stores
  • Object-Oriented
  • Observability
  • Observability Platforms
  • Observability Toolings
  • Observability Tools
  • Office Applications
  • Office Management
  • Office Software
  • Office Suites
  • Omnichannels
  • On Demands
  • Onboardings
  • Online Analytical Processing
  • Online Forms
  • Online Learning
  • Online Services
  • Online Shoppings
  • Online Tools
  • Online Transaction Processing
  • Ontologies
  • Open Source
  • Open-Source Software
  • Open-source Frameworks
  • Open-source Libraries
  • Open-source Tools
  • Operating Systems
  • 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
  • Operators
  • Optical Character Recognitions
  • Optimization Techniques
  • Optimizations
  • Options
  • Orchestration
  • Order Books
  • Order Executions
  • Order Management
  • Order Management Systems
  • Organizational Changes
  • Organizational Design
  • Organizational Development
  • Organizational Learning
  • Organizational Structures
  • Organizational Transformations
  • Organizations
  • Outils Digitauxes
  • Package Management
  • Package Managers
  • Packages
  • Packaging
  • Paid Media
  • Pair Programming
  • Panoramas
  • Parallel Computing
  • Parallel Processing
  • Patch Management
  • Pattern Recognitions
  • Patterns
  • Pay Per Clicks
  • Payment Means
  • Payment Models
  • Payment Processing
  • Payment Solutions
  • Payment Systems
  • Payments
  • Payroll
  • Payroll Payments
  • Penetration Testing
  • Performance
  • Performance Analysis
  • Performance Engineering
  • Performance Evaluations
  • Performance Improvements
  • Performance Management
  • Performance Marketing
  • Performance Measurements
  • Performance Metrics
  • Performance Monitoring
  • Performance Optimizations
  • Performance Testing
  • Performance Tracking
  • Performance Tuning
  • Persistences
  • Personalizations
  • Personalized Medicines
  • Pharmaceuticals
  • Photographies
  • Physical Securities
  • Pigs
  • Pipeline Management
  • Pipeline Orchestration
  • Pipelines
  • Pivot Tables
  • Planning Analytics
  • Plannings
  • Platform Development
  • Platform Ecosystems
  • Platform Engineering
  • Platform Management
  • Platform Modernizations
  • Platform Observability
  • Platform Securities
  • Platform Services
  • Platform Software
  • Platform Solutions
  • Platform Strategies
  • Platform Systems
  • Platform-as-a-Service
  • Platforms
  • Plottings
  • Plugins
  • Point Of Sales
  • Policies
  • Policy Administration
  • Policy Analysis
  • Policy As Codes
  • Policy Enforcements
  • Policy Management
  • Policy Researches
  • Political Engagements
  • Portabilities
  • Portables
  • Portals
  • Portfolio Management
  • Portfolio Management Tools
  • Portfolio Reviews
  • Postmortems
  • Power Distributions
  • Power Tools
  • Practice Management
  • Pre-trainings
  • Predictabilities
  • Predictions
  • Predictive Analytics
  • Predictive Modeling
  • Presentation Software
  • Presentations
  • Price Transparency
  • Pricing Analytics
  • Pricing Models
  • Pricing Strategies
  • Pricing Systems
  • Pricing Tools
  • Pricings
  • Prioritizations
  • Privacy
  • Privacy Impact Assessments
  • Private Clouds
  • Privilege Escalations
  • Privileged Access Controls
  • Probabilistic Models
  • Probabilities
  • Probability Theories
  • Problem Management
  • Problem Resolutions
  • Problem Solving
  • Problem-Solving Tools
  • Process Analysis
  • Process Analytics
  • Process Automation
  • Process Controls
  • Process Design
  • Process Documentations
  • Process Engineering
  • Process Frameworks
  • Process Improvements
  • Process Management
  • Process Mappings
  • Process Maps
  • Process Mining
  • Process Modeling
  • Process Modeling Tools
  • Process Monitoring
  • Process Optimizations
  • Process Orchestration
  • Process Re-engineerings
  • Process Reengineerings
  • Process Safety
  • Process Visualizations
  • Processes
  • Procure To Pays
  • Procurement Tools
  • 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 Manufacturing Processes
  • 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 Management
  • Project Management Processes
  • Project Management Tools
  • Project Schedules
  • Projects
  • Prompt Engineering
  • Prompt Injection Defenses
  • Promptings
  • Prompts
  • Property Management
  • Proprietary Software
  • Protection
  • Protocols
  • Prototype Development
  • Prototyping
  • Provisioning Process
  • Provisionings
  • Proxies
  • Prunings
  • Psychologies
  • Public Affairs
  • Public Clouds
  • Public Health Systems
  • Public Healths
  • Public Key Infrastructure
  • Purchasings
  • QA
  • QA Automation
  • Quality Assurance
  • Quality Assurance Frameworks
  • Quality Assurance Processes
  • Quality Centers
  • Quality Control Reports
  • Quality Controls
  • Quality Frameworks
  • Quality Management
  • Quality Metrics
  • Quality Testing
  • Quality Tools
  • Quantitative Analysis
  • Quantitative Methods
  • Quantitative Modeling
  • Quantum Computing
  • Query Languages
  • Query Optimizations
  • Query Tools
  • 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 Streamings
  • Real-time Systems
  • Real-time Visibility
  • Reasonings
  • Receivables Management
  • Recipes
  • Recommendation Systems
  • Reconciliation Reports
  • Reconciliations
  • Reconnaissances
  • Record Keepings
  • Recordings
  • Records Management
  • Recruitings
  • Recruitment
  • Reference Data
  • Reference Models
  • Registrations
  • Regression Analysis
  • Regression Testing
  • Regulatory Affairs
  • Regulatory Analysis
  • Regulatory Compliances
  • Regulatory Filings
  • Regulatory Intelligence
  • Regulatory Reportings
  • Regulatory Solutions
  • Regulatory Technologies
  • Reinforcement Learning
  • Relational Data
  • Relational Database Management Systems
  • Relational Database Tools
  • Relational Databases
  • Relationals
  • Relationship Buildings
  • Relationship Management
  • Release Activities
  • Release Engineering
  • Release Management
  • Release Management Processes
  • Release Management Tools
  • Release Pipelines
  • Release Plannings
  • Reliabilities
  • Reliability Engineering
  • Remittances
  • Remote Access
  • Remote Collaborations
  • Remote Communications
  • Remote Desktops
  • Remote Works
  • Rendering
  • Renewable Energies
  • Replications
  • Reporting And Analytics
  • Reporting And Analytics Tools
  • Reporting Automation
  • Reporting Dashboards
  • Reporting Frameworks
  • Reporting Mechanisms
  • Reporting Metrics
  • Reporting Platforms
  • Reporting Solutions
  • Reporting Systems
  • Reporting Tools
  • Reportings
  • Repository Management
  • Requirements
  • Requirements Engineering
  • Requirements Gatherings
  • Requirements Management
  • Research
  • Research Data
  • Research Methods
  • Research Tools
  • Resiliences
  • Resiliency
  • Resilient Systems
  • Resource Allocations
  • Resource Management
  • Resource Plannings
  • Resource Scheduling
  • Responsive Design
  • Rest Assured
  • Retail Technologies
  • Retails
  • 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 Management Tools
  • Roadmappings
  • Robotic Process Automation
  • Robotics
  • Robustness
  • Root Cause Analysis
  • Routers
  • Routings
  • Runtimes
  • SQL Databases
  • SQL Queries
  • SQL Stored Procedures
  • SUMIF
  • Safes
  • Safety
  • Safety Engineering
  • Sales
  • Sales Analytics
  • Sales Analytics Tools
  • Sales Automation
  • Sales Clouds
  • Sales Enablement
  • Sales Enablement Platforms
  • Sales Enablement Tools
  • Sales Intelligence
  • Sales Management
  • Sales Productivity
  • Sales Technologies
  • Sales Tools
  • Sales Trainings
  • Sanctions
  • Sanctions Screenings
  • Sandboxes
  • Scalabilities
  • Scaling
  • Scanning Systems
  • Scannings
  • Scenario Analysis
  • Scenario Modeling
  • Scenarios
  • Scheduling
  • Scientific Computing
  • Scientific Methods
  • Scorings
  • Screenings
  • Scripting Languages
  • Scriptings
  • Search
  • Search Engine Optimizations
  • Search Engines
  • Secrets Management
  • Secure Architectures
  • Secure Code Reviews
  • Secure Coding Practices
  • Secure Codings
  • Secure Communications
  • Secure Configurations
  • Secure Design
  • Secure Development
  • Secure Platforms
  • Secure Transports
  • Security
  • Security Administration
  • Security Alarms
  • Security Analysis
  • Security Analytics
  • Security Architecture Reviews
  • Security Architectures
  • Security Assessments
  • Security Audits
  • Security Automation
  • Security Baselines
  • Security Best Practices
  • Security Compliances
  • Security Controls
  • Security Dashboards
  • 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 Models
  • Security Monitoring
  • Security Operations
  • Security Orchestration, Automation and Responses
  • Security Platforms
  • Security Procedures
  • Security Requirements
  • Security Reviews
  • Security Risk Assessments
  • Security Solutions
  • Security Systems
  • Security Testing
  • Security Tools
  • Security Updates
  • Segmentations
  • Self Services
  • Self-Hosted
  • Self-healings
  • Self-improvements
  • Semantic Searches
  • Semantic Technologies
  • Semantic Webs
  • Sensors
  • Serializations
  • Server-Side Rendering
  • Serverless
  • Serverless Architectures
  • Servers
  • Service Bus
  • Service Catalogs
  • Service Clouds
  • Service Deliveries
  • Service Design
  • Service Desks
  • Service Discoveries
  • Service Frameworks
  • Service Level Objectives (SLOs)
  • Service Management
  • Service Meshes
  • Service Operations
  • Service Recovery
  • Service Strategies
  • Services
  • Settlements
  • Shared Resources
  • Shared Responsibilities
  • Shells
  • Shippings
  • Short Message Services
  • Signal Processing
  • Simple API for XML
  • Simulation Modeling
  • Simulation Platforms
  • Simulation Tools
  • Simulations
  • Simulators
  • Single Sign Ons
  • Site Reliability Engineering
  • Skill Development
  • Skills Development
  • Slides
  • Smartphones
  • Smoke Testing
  • Social
  • Social Media
  • Social Media Marketing
  • Social Networking
  • Social Networks
  • Social Recruitings
  • Software
  • Software Applications
  • Software Architectures
  • Software Asset Management
  • Software Configuration Management
  • Software Configurations
  • Software Deliveries
  • Software Deployments
  • Software Design
  • Software Development
  • Software Development Best Practices
  • Software Development Kits
  • Software Documentations
  • Software Engineering
  • Software Interfaces
  • Software Languages
  • Software Licensings
  • Software Management
  • Software Platforms
  • Software Projects
  • Software Quality
  • Software Solutions
  • Software Systems
  • Software Technologies
  • Software Testing
  • Software Testing Methodologies
  • Software Tools
  • Software Troubleshooting
  • Software Upgrades
  • Software Version Controls
  • Software as a Services
  • Software-as-a-Service
  • Solutions
  • Source Code Management
  • Source Codes
  • Source Control Management
  • Source Controls
  • Source Systems
  • Sourcings
  • Spatial Data
  • Spend Management
  • Spitabs
  • Spreadsheets
  • Stakeholder Management
  • Standups
  • Startups
  • State Management
  • Statefuls
  • Static Analysis
  • Static Application Security Testing
  • Statistical Analysis
  • Statistical Analysis Software
  • Statistical Analysis Techniques
  • Statistical Computing
  • Statistical Inferences
  • Statistical Methods
  • Statistical Modeling
  • Statistical Modellings
  • Statistical Models
  • Statistical Packages
  • Statistical Techniques
  • Statistical Tools
  • Statistics
  • Steam Turbines
  • Stock Controls
  • Stock Reconciliations
  • Storage
  • Storage Engines
  • Stored Procedures
  • Strategic Design
  • Strategic Plannings
  • Strategies
  • Stream Analytics
  • Stream Processing
  • Streaming Architectures
  • Streaming Data
  • Streamings
  • Stress Testing
  • Stress Tests
  • Structured Data
  • Structured Databases
  • Subscription Management
  • Subscriptions
  • Supervised Learning
  • Supplier Contracts
  • Supplier Management
  • Supply Chain Finances
  • Supply Chain Management
  • Supply Chain Securities
  • Supply Chains
  • Support
  • Support Platforms
  • Support Systems
  • Surveillances
  • Survey Platforms
  • Survey Tools
  • Sustainability
  • Switches
  • Synthetics
  • System Administration
  • System Analysis
  • System Applications
  • System Architectures
  • System Automation
  • System Configurations
  • System Design
  • System Development
  • System Enhancements
  • System Hardenings
  • System Implementations
  • System Information
  • System Integrations
  • System Interfaces
  • System Maintenance
  • System Management
  • System Monitoring
  • System 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
  • Systems
  • Systems Administration
  • Systems Analysis
  • Systems Architectures
  • Systems Biologies
  • Systems Design
  • Systems Development
  • Systems Engineering
  • Systems Enhancements
  • Systems Integrations
  • Systems Management
  • Systems Programming
  • Systems Software
  • Systems Testing
  • Systems Thinkings
  • Systems Upgrades
  • T1S
  • Tableaux De Bords
  • Tablets
  • Tainas
  • Talent Acquisition
  • Talent Management
  • Task Automation
  • Task Management
  • Tasks
  • Tax Compliances
  • Tax Laws
  • Tax Plannings
  • Tax Researches
  • Taxes
  • Tcls
  • Team Collaborations
  • Team Communications
  • Team Development
  • Team Management
  • Teaps
  • Technical Debt
  • Technical Plannings
  • Technical Reviews
  • Technical Support
  • Technical Writings
  • Technologies
  • Technology Adoptions
  • Technology Architectures
  • Technology Enhancements
  • Technology Governance
  • Technology Plannings
  • Technology Platforms
  • Technology Risk Management
  • Technology Services
  • Technology Stacks
  • Technology Strategies
  • Technology Upgrades
  • Telecommunications
  • Telefons
  • Telefoons
  • Telemetry
  • Telephonies
  • Telewerkens
  • Terminals
  • Territory Management
  • Test Anything Protocols
  • Test Automation
  • Test Automation Frameworks
  • Test Automation Tools
  • Test Controls
  • Test Data Preparations
  • Test Design
  • Test Engineering
  • Test Environments
  • Test Equipments
  • Test Executions
  • Test Instruments
  • Test Management
  • Test Management Tools
  • Test Plannings
  • Test Reportings
  • Test Scriptings
  • Test Strategies
  • Test Tools
  • Test-and-learn Approaches
  • Test-and-learns
  • Testing Frameworks
  • Testing Strategies
  • Testing Tools
  • Tests
  • Text Analysis
  • Text Analytics
  • Text Extractions
  • Text Mining
  • Text Processing
  • Third Parties
  • Third Party Risks
  • Third Party Services
  • Third-Party Integrations
  • Third-Party Software
  • Third-party Data
  • Third-party Libraries
  • Third-party Management
  • Third-party Monitoring
  • 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 Protection
  • Ticketing
  • Ticketing Systems
  • Tickets
  • Time Management
  • Time Series
  • Time Series Analysis
  • Time Series Forecasting
  • Timelines
  • Token Management
  • Token-Based
  • Tokens
  • Tools
  • Total Rewards
  • Tracing
  • Tracking
  • Tracking Software
  • Tracs
  • Trade Compliances
  • Trade Finances
  • Trade Management
  • Trade Managers
  • Trade Operations
  • Trade Services
  • Trade Shows
  • Tradings
  • Training Data
  • Training Management
  • Training Matrixes
  • Training Platforms
  • Trainings
  • Transaction Management
  • Transaction Processing
  • Transfer Learning
  • Transformations
  • Transformers
  • Translations
  • Transparency
  • Transportation
  • Travel Management
  • Travels
  • Traversals
  • Treasuries
  • Treasury Management
  • Treasury Operations
  • Treasury Solutions
  • Troubleshooting
  • Tuning
  • Turkishes
  • Type Safes
  • Type Safety
  • UDFs
  • UI
  • UI Design
  • UX
  • UX Design
  • Underwritings
  • Unified Communications
  • Unit Testing
  • Unixes
  • Unstructured Data
  • Unsupervised Learning
  • Updates
  • Uptime
  • Usabilities
  • Usability Testing
  • User Acceptance Testing
  • User Administration
  • User Engagements
  • User Experiences
  • User Feedback
  • User Forums
  • User Guides
  • User Insights
  • User Interface/User Experiences
  • User Interfaces
  • User Journeys
  • User Provisionings
  • User Researches
  • User Testing
  • User Tracking
  • Utilities
  • Utility Systems
  • VBA
  • Validation
  • Validation Frameworks
  • Validation Rules
  • Validation Tools
  • Validation and Testing
  • Valuation Models
  • Valuation Software
  • Valuations
  • Value Streams
  • Vector Databases
  • Vector Stores
  • Vendor Management
  • Venture Capital
  • Venue Management
  • Venue Selections
  • Venues
  • Verifications
  • Version Control Systems
  • Version Controls
  • Versionings
  • Video Conferences
  • Video Conferencings
  • Video Editings
  • Video Platforms
  • Video Productions
  • Videos
  • Virtual Assistants
  • Virtual Environments
  • Virtual Events
  • Virtual Machines
  • Virtual Meetings
  • Virtual Trainings
  • Virtualizations
  • Visibility
  • Visioconférences
  • Visual Analytics
  • Visual Design
  • Visual Effects
  • Visual Management
  • Visual Programming
  • Visualizations
  • Voice
  • Votings
  • Vues
  • Vulnerability Assessments
  • Vulnerability Management
  • Vulnerability Scanning Tools
  • Vulnerability Scannings
  • Wallets
  • Warehouse Automation
  • Warehouse Equipments
  • Warehouse Machineries
  • 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 Performances
  • Web Platforms
  • Web Scrapings
  • Web Searches
  • Web Securities
  • Web Servers
  • Web Services
  • Web Sites
  • Web Technologies
  • Web-based Applications
  • Web-based Trainings
  • Webinars
  • Webs
  • Website Optimizations
  • Wellbeings
  • Whiteboards
  • Wi-Fi
  • Wikis
  • Windows Servers
  • Wins
  • Words
  • Work From Homes
  • Work Life Balances
  • Workflow Analysis
  • Workflow Automation
  • Workflow Automation Platforms
  • Workflow Design
  • Workflow Enhancements
  • Workflow Management
  • Workflow Optimizations
  • Workflow Orchestration
  • Workflow Policies
  • Workflow Systems
  • Workflow Toolings
  • Workflow Tools
  • Workflows
  • Workforce Development
  • Workforce Management
  • Working Capital
  • Workplace Safety
  • Workplace Technologies
  • Workshops
  • Workspaces

Services — Total: 437

  • 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
  • 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
  • Appian
  • Apple
  • Apple Keynote
  • Apple Safari
  • Apptio Cloudability
  • Argus Enterprise
  • Ariba
  • Artifactory
  • Aruba
  • Asana
  • Atlassian
  • AutoCAD
  • Autodesk
  • Autodesk Fusion 360
  • Autodesk Maya
  • Autotrac
  • 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 Networking
  • Azure Pipelines
  • Azure Service Bus
  • Azure Storage
  • Azure Synapse Analytics
  • Azure Virtual Desktop
  • Azure Virtual Machines
  • Backstage
  • BigCommerce
  • Bitbucket
  • Bloomberg
  • Bloomberg AIM
  • Bloomberg Buyside Enterprise Solutions
  • Bloomberg EMSX
  • Bloomberg Economics
  • Bloomberg Enterprise Data
  • Bloomberg Government (BGOV)
  • Bloomberg Index Solutions Limited (BISL)
  • Bloomberg Intelligence
  • Bloomberg News
  • Bloomberg Professional Service
  • Bloomberg Query Language (BQL)
  • Bloomberg TV
  • Bloomberg Television and Radio
  • Bloomberg Terminal
  • Bloomberg Tradebook
  • BlueSky
  • Boomi
  • Box
  • Broadcom
  • Bruno
  • Burp Suite
  • Camtasia
  • Canva
  • Cflow
  • ChatGPT
  • Checkmarx
  • Circana
  • Cisco
  • Cisco Catalyst Center
  • Cisco Expressway
  • Cisco Firepower
  • Cisco Nexus
  • Cisco Voice Portal
  • Cisco Webex
  • Citrix
  • Citrix NetScaler
  • Claude
  • CloudFormation
  • CloudWatch
  • Cloudflare
  • Commvault
  • Concur
  • Conductor
  • Confluence
  • Cortex
  • Coupa
  • Crystal Reports
  • Cvent
  • Dagster
  • DataHub
  • Databricks
  • Databricks Asset Bundles
  • Databricks Workflows
  • Datadog
  • Dataiku
  • Demandbase
  • Discord
  • DocuSign
  • Docusaurus
  • DynamoDB
  • Dynatrace
  • EC2
  • EMC
  • Eloqua
  • F5 Networks
  • Facebook
  • Facebook Ads
  • FactSet
  • Fargate
  • Fern
  • Figma
  • ForgeRock
  • Fortify
  • Fortinet
  • Fusio
  • G2
  • GCP Cloud Storage
  • Gainsight
  • Gemini
  • GitHub
  • GitHub Actions
  • GitHub Copilot
  • GitLab
  • Gmail
  • Gong
  • Google
  • Google Ads
  • Google Analytics
  • Google Android
  • Google Apps Script
  • Google Campaign Manager
  • Google Chrome
  • Google Cloud Dataflow
  • Google Cloud Logging
  • Google Cloud Platform
  • Google Data Studio
  • Google Dialogflow
  • Google Docs
  • Google Drive
  • Google Forms
  • Google Maps
  • Google Marketing Platform
  • Google Optimize
  • Google Search Console
  • Google Sheets
  • Google Slides
  • Google Tag Manager
  • Google Workspace
  • HAProxy
  • Harness
  • Hasura
  • Hobart
  • HubSpot
  • Hugging Face
  • Hunter
  • IBM
  • Indeed
  • Infoblox
  • Informatica
  • Informática
  • Insomnia
  • Instagram
  • IntelliJ IDEA
  • International Business Machines
  • Intuit
  • Istio
  • JFrog
  • JFrog Artifactory
  • JetBrains
  • Jira
  • Juniper
  • Juniper Networks
  • Jupyter Notebook
  • Kestra
  • Kinesis
  • Knit
  • Konfig
  • Kong
  • Kuma
  • Lambda
  • Lightroom
  • LinkedIn
  • Linkerd
  • LiteLLM
  • Looker
  • Looker Studio
  • MATLAB
  • MailChimp
  • Make
  • Mastercard
  • Maya
  • McAfee
  • Membrane
  • Merge
  • Meta
  • Metasploit
  • Microsoft
  • Microsoft .NET
  • Microsoft 365
  • Microsoft Access
  • Microsoft Azure
  • Microsoft Bicep
  • Microsoft Configuration Manager
  • Microsoft Copilot
  • Microsoft Defender
  • Microsoft Dynamics
  • Microsoft Dynamics 365
  • Microsoft Edge
  • Microsoft Endpoint Configuration Management
  • Microsoft Endpoint Manager
  • Microsoft Entity Framework
  • Microsoft Entra
  • Microsoft Excel
  • Microsoft Exchange
  • Microsoft Graph
  • Microsoft Identity Manager
  • Microsoft Intune
  • Microsoft Office
  • Microsoft Office 365
  • Microsoft Outlook
  • Microsoft Planner
  • Microsoft Power Apps
  • Microsoft Power Automate
  • Microsoft Power Platform
  • Microsoft PowerPoint
  • Microsoft Project
  • Microsoft Purview
  • Microsoft Sentinel
  • Microsoft Teams
  • Microsoft Technologies
  • Microsoft Visio
  • Microsoft Windows
  • Microsoft Windows 10
  • Microsoft Windows Server
  • Microsoft Word
  • Microsoft Xbox
  • Mistral
  • Mixpanel
  • Montran
  • Moody's
  • MuleSoft
  • NASA
  • Navision
  • Nessus
  • NetApp
  • NetFlow
  • New Relic
  • Notion
  • Nutanix
  • Ollama
  • OpenAI
  • OpenAI APIs
  • OpenShift
  • Oracle
  • Oracle 11g
  • Oracle APEX
  • Oracle Cloud
  • Oracle Database
  • Oracle Database 19c
  • Oracle E-Business Suite
  • Oracle Enterprise Database
  • Oracle Enterprise Manager
  • Oracle Essbase
  • Oracle Exadata
  • Oracle Fusion
  • Oracle GoldenGate
  • Oracle Hyperion
  • Oracle Integration
  • Oracle Partitioning
  • Oracle R12
  • Oracle Siebel
  • Oracle Smart View
  • Oracle WebLogic
  • Orion
  • Palo Alto Networks
  • Panora
  • Paradox
  • Paragon
  • Paw
  • PeopleSoft
  • Perforce
  • Perplexity
  • Photoshop
  • Pluralsight
  • Port
  • Postman
  • Power Apps
  • Power BI
  • Power Platform
  • Power Query
  • Prefect
  • Prisma
  • Productiv
  • Prosci
  • Pulse
  • Qlik
  • Qlik Sense
  • Qlik Sense Enterprise
  • QlikSense
  • QlikView
  • Qube
  • Red Hat
  • Red Hat Ansible Automation Platform
  • Red Hat Enterprise Linux
  • Red Hat Satellite
  • Refinitiv
  • Restream
  • Reuters
  • 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 Experience Cloud
  • Salesforce Flow
  • Salesforce Lightning
  • Salesforce Marketing Cloud
  • Salesforce Sales Cloud
  • Salesforce Service Cloud
  • Seismic
  • Sentry System
  • Service Cloud
  • ServiceNow
  • SharePoint
  • Shell
  • Siebel
  • SimCorp Dimension
  • Slack
  • Snowflake
  • SolarWinds
  • Solaris
  • Solaris Zones
  • Sparx Enterprise Architect
  • Splunk
  • Splunk Enterprise Security
  • Spot
  • Square
  • Stainless
  • Stripe
  • TIBCO
  • Tableau
  • Tableau Desktop
  • Talend
  • Tanium
  • TeamCity
  • Temenos Transact
  • Temporal
  • Teradata
  • Tradeweb
  • Trellix Web Gateway
  • Triton
  • Tropic
  • Twitter
  • Tyk
  • Unity
  • Unix
  • VMware
  • Vantage
  • Vendr
  • Veritas Cluster
  • Veritas InfoScale
  • Veritas NetBackup
  • Veritas Volume Manager
  • Vessel
  • Visio
  • Visualforce
  • WebLogic
  • WebSphere
  • WhatsApp
  • Workato
  • Workday
  • Workday Business Processes
  • Workday Extend
  • Workday Finance
  • Workday Integration
  • Workday Integrations
  • Workday Payroll
  • Workday Recruiting
  • Workday Report Writer
  • Workday Reporting
  • Workday Security
  • Workday Studio
  • Yardi
  • Youtube
  • Zendesk
  • Zoho
  • 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 Avro
  • Apache Axis
  • Apache BRPC
  • Apache Beam
  • Apache BookKeeper
  • Apache Brooklyn
  • Apache CXF
  • Apache Camel
  • Apache Cassandra
  • Apache Commons
  • Apache Cordova
  • Apache CouchDB
  • Apache Curator
  • Apache DB
  • Apache Directory
  • Apache DolphinScheduler
  • Apache Drill
  • Apache Flex
  • Apache Flink
  • Apache Fluo
  • Apache FreeMarker
  • Apache Gora
  • Apache Griffin
  • Apache Groovy
  • Apache HAWQ
  • Apache HBase
  • Apache Hadoop
  • Apache Helix
  • Apache Hive
  • Apache Hop
  • Apache Iceberg
  • Apache Ignite
  • Apache Impala
  • Apache Ivy
  • Apache JMeter
  • Apache Jackrabbit
  • Apache James
  • Apache Jena
  • Apache Juneau
  • Apache Kafka
  • Apache Knox
  • Apache Kylin
  • Apache MINA
  • Apache Maven
  • Apache Mesos
  • Apache NiFi
  • Apache ORC
  • Apache Olingo
  • Apache OpenJPA
  • Apache OpenOffice
  • Apache OpenWebBeans
  • Apache Ozone
  • Apache POI
  • Apache Parquet
  • Apache Phoenix
  • Apache Pig
  • Apache Pivot
  • Apache Portals
  • Apache Pulsar
  • Apache Ranger
  • Apache Ratis
  • Apache Roller
  • Apache Rya
  • Apache SINGA
  • Apache Sedona
  • Apache Serf
  • Apache ShenYu
  • Apache SkyWalking
  • Apache Sling
  • Apache SpamAssassin
  • Apache Spark
  • Apache Spatial
  • Apache Steve
  • Apache Storm
  • Apache Streams
  • Apache Subversion
  • Apache Synapse
  • Apache TVM
  • Apache Tapestry
  • Apache Tcl
  • Apache Tez
  • Apache Tika
  • Apache Tomcat
  • Apache Traffic Control
  • Apache Traffic Server
  • Apache Turbine
  • Apache UIMA
  • Apache VCL
  • Apache Velocity
  • Apache Web Services
  • Apache XML Graphics
  • Apache ZooKeeper
  • Appium
  • Argo
  • BFE
  • Backstage
  • Blender
  • Buildpacks
  • C#
  • C++
  • Capsule
  • Chef
  • ClickHouse
  • Cloud Custodian
  • Consul
  • Contour
  • Copa
  • Cortex
  • Cucumber
  • Debian
  • Dex
  • Django
  • Docker
  • Docker Swarm
  • Eclipse
  • Elastic Stack
  • Elasticsearch
  • Elk
  • Elk Stack
  • Envoy
  • Ethereum
  • Falco
  • FastAPI
  • Fluentd
  • Fluid
  • Flux
  • Git
  • Grafana
  • HAMI
  • Harbor
  • Hashicorp Vault
  • Helm
  • Hibernate
  • Hugging Face Transformers
  • Interlink
  • Istio
  • JBoss
  • JUnit
  • Jenkins
  • Jest
  • Jupyter
  • K3s
  • KCL
  • KServe
  • Kafka Connect
  • Keycloak
  • Kibana
  • Koordinator
  • Kotlin
  • Kubeflow
  • Kubeflow Pipelines
  • Kubernetes
  • Kubernetes Operators
  • Kuma
  • Kyverno
  • Lean
  • Lightning Web Components
  • Lima
  • Linkerd
  • Linux
  • Llama
  • Logstash
  • Matplotlib
  • Maven Central
  • Mockito
  • MongoDB
  • MySQL
  • NATS
  • NUnit
  • Nexus
  • Nginx
  • Node.js
  • NumPy
  • ORAS
  • Open Policy Agent
  • OpenSearch
  • OpenTelemetry
  • PHP
  • Packer
  • Pandas
  • Perl
  • Perses
  • Pixie
  • Playwright
  • Podman
  • 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
  • SpecFlow
  • Spring
  • Spring Batch
  • Spring Boot
  • Spring Boot Admin Console
  • Spring Cloud
  • Spring Cloud Stream
  • Spring Data
  • Spring Framework
  • Spring Security
  • Stacker
  • Swift
  • Telepresence
  • TensorFlow
  • Terraform
  • Ubuntu
  • Vault
  • Vineyard
  • Vite
  • Vitess
  • Vue.js
  • Wireshark
  • WordPress
  • YARN
  • Zabbix
  • Zot
  • bootc
  • cURL
  • eBPF
  • gRPC
  • jQuery
  • kpt
  • werf

Standards — Total: 249

  • 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
  • Convention Over Configuration
  • Cybersecurity Standards
  • DHCP
  • DNS
  • DOT Regulations
  • DSL
  • Data Flow Diagrams
  • Data Format
  • Data Modeling
  • Data Models
  • Data Privacy Standards
  • Data Quality Standards
  • Data Warehouse Schemas
  • Database Schema Design
  • Defense In Depth
  • Dependency Injection
  • Design Patterns
  • Design Standards
  • DevOps
  • DevSecOps
  • Development Methodology
  • Dimensional Modeling
  • Disclosure Requirements
  • Dockerfile
  • Domain-Driven Design
  • Enterprise Integration Patterns
  • Entity Relationship
  • Equator Principles
  • Event Sourcing
  • Event-driven Architecture
  • Extreme Programming
  • FDA Regulations
  • FTP
  • File Format
  • FinOps
  • Financial Regulation
  • Flowcharts
  • Functional Programming
  • GDPR
  • Gantt Charts
  • Gherkin
  • GitOps
  • Good Manufacturing Practices
  • Graph Query Language (GQL)
  • GraphQL
  • HIPAA
  • HTML
  • HTML5
  • HTTP
  • HTTP/2
  • Health Standards
  • IAM
  • ISO
  • ISO Standard
  • IT Standards
  • ITIL
  • ITSM
  • Integration Patterns
  • Interface Specifications
  • Internal Control Standards
  • Inversion Of Control
  • JCR
  • JDBC
  • JMS
  • JPA
  • JSF
  • JSON
  • 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
  • MXML
  • Mandatory Reserves Requirement
  • MapReduce
  • Markup Language
  • Messaging Protocol
  • Methodology
  • Mockups
  • Modeling Language
  • Modular Monolith
  • Monolithic Architecture
  • NFC
  • NIO
  • NIST
  • Network Protocols
  • Normalization
  • OAuth
  • OCI
  • OData
  • OIDC
  • OSHA
  • OWASP
  • Object-Oriented Programming
  • OpenAPI
  • OpenID Connect
  • PCI Compliance
  • PDF
  • Parquet
  • Partitioning
  • Privacy By Design
  • Process Flow Diagrams
  • Product Backlog
  • Product Backlog Items
  • Product Specifications
  • Project Management Methodology
  • Protocol Buffers
  • Prototypes
  • Pub/Sub
  • QoS
  • Quality Of Service
  • Quality Standards
  • RACI
  • RBAC
  • RDF
  • RDP
  • README.md
  • REST
  • REST API
  • RESTful
  • RESTful APIs
  • RFID
  • RPC
  • RTSP
  • Raft
  • Reactive Programming
  • Regular Expressions
  • Regulation
  • Regulatory
  • Relational Data Modeling
  • Reporting Templates
  • Runbooks
  • SAFe Agile
  • SAML
  • SCADA
  • SDLC
  • SECURITY.md
  • SFTP
  • SMTP
  • SOA
  • SOAP
  • SPA
  • SPARQL
  • SQL
  • SSH
  • SSL/TLS
  • SSO
  • SUPPORT.md
  • Scaled Agile
  • Schema Design
  • Schema Evolution
  • Schema Validation
  • Scrum
  • SecOps
  • Secure Tunneling Protocols
  • Secure-by-Design
  • Security By Design
  • Security Protocols
  • Security Standards
  • Security Standards And Procedures
  • Serverless Patterns
  • Service Oriented Architecture
  • Services Patterns
  • 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
  • Technology Standards
  • Templates
  • Test Cases
  • Test First
  • Test Plans
  • Test Scripts
  • Test Specifications
  • Test Suites
  • Test-driven Development
  • UML
  • Underwriting Standards
  • Use Cases
  • User Stories
  • VNC
  • VPN
  • WCAG
  • Waterfall
  • WebSockets
  • Wireframes
  • Write Ahead Log
  • XML
  • XSLT
  • Zero Trust
  • Zero Trust Architecture
  • Zero Trust Network Access
  • Zero-Trust Security Model
  • dependabot.yml
  • openCypher

Why do we do this?

  • Understand the state of the market by industry.
  • Meet new and diverse design partners across verticals.
  • Help us prioritize industry-specific business capabilities.

Who is this for?

  • AI, API, integration and platform leadership within the industry.
  • The C-Suite looking to benchmark their enterprise against peers.
  • Analysts and media outlets reporting on industry-level technology trends.

Why become a design partner?

  • Collaboration to define industry-wide capabilities and benchmarks.
  • Obtain more control over the integrations your industry depends on.
  • Help shape the Naftiko roadmap to meet your vertical’s needs.

About This Research

  • Signals aggregate how we rate investments across all companies in the industry.
  • Areas reveal the technology areas being invested in across the vertical.
  • Services show which SaaS platforms appear across industry companies.
  • Tools highlight the open-source investments being made industry-wide.
  • Standards speak to how aligned integrations are with market standards.

About This Guidance

  • Impact Report provides a narrative analysis of the industry’s collective AI investment posture.
  • Impact Pages outlines the layered data behind the industry’s AI response, with company rankings per signal area.
  • Companies lists all organizations tracked in this industry vertical.
  • Radar maps the maturity of technology investments across the industry.
  • Capabilities are Naftiko definitions for how industry-common services and tools can deliver AI-driven business value.
  • Navigation highlights strategic opportunities for this industry vertical.

What This Means For You

See where you stand, decide what to build, control what you build — grounded in public-data signals, not boilerplate best practice.

01

Where you stand

The leads, the gaps, and where AI has shifted the gradient — in numbers from public data, not vendor decks.

See full report →
02

What to build

Capabilities being built across the peer set — tied to the markets you actually serve.

View capabilities →
03

Where to go next

A prioritized roadmap grounded in signal data. Not a generic best-practices deck, not a vendor-shaped pitch.

Get your navigation →
04

Control what you build

Run it on infrastructure you control. Open source — fork it, audit it, run it on your stack. No vendor lock-in.

First capability live in 90 days.

Become a design partner →