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.
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
- AbbottA global healthcare company manufacturing medical devices, diagnostics, nutritional products, and branded generic pharmaceuticals. Known...
- AbbVieA biopharmaceutical company focused on developing treatments for immunology, oncology, and neuroscience. Maker of blockbuster...
- Acadia HealthcareAcadia Healthcare is a major US corporation and Fortune 1000 company. The Acadia Healthcare API...
- AdaptHealthAdaptHealth is a national provider of home medical equipment, supplies, and related services in the...
- Agilent TechnologiesAgilent Technologies is a global leader in life sciences, diagnostics, and applied chemical markets, providing...
- Agilon HealthAgilon Health is a healthcare services company that partners with primary care physicians to transform...
- AlbertsonsOne of the largest food and drug retailers in the United States operating over 2,200...
- Align TechnologyProfile for Align Technology in the API Evangelist network. Fortune F1000 (rank 888).
- AmgenOne of the world's largest independent biotechnology companies focused on human therapeutics. Develops and manufactures...
- AstraZenecaA British-Swedish multinational pharmaceutical and biotechnology company focused on oncology, cardiovascular, renal, metabolism, and respiratory...
- Baxter InternationalBaxter International is a global medical products company that develops, manufactures, and markets products related...
- Becton DickinsonA global medical technology company manufacturing and selling medical devices, instrument systems, and reagents. A...
- Bio-Rad LaboratoriesBio-Rad Laboratories is a global leader in developing and manufacturing a wide range of products...
- BiogenBiogen is a global biotechnology company that discovers, develops, and delivers therapies for people living...
- Boston ScientificA global medical device manufacturer developing minimally invasive technologies for cardiology, endoscopy, urology, and neuromodulation....
- BrightSpring Health ServicesBrightSpring Health Services is a leading Fortune 500 provider of comprehensive home and community-based health...
- Bristol Myers SquibbA global pharmaceutical company focused on discovering and developing medicines for serious diseases including cancer...
- Brookdale Senior LivingBrookdale Senior Living is one of the largest operators of senior living communities in the...
- Cano HealthCano Health is a primary care provider focused on delivering value-based care to seniors and...
- Cardinal HealthCardinal Health is a Fortune 15 global integrated healthcare services and products company that provides...
- CencoraCencora (formerly AmerisourceBergen, renamed August 2023) is a leading global pharmaceutical solutions organization that connects...
- CenteneCentene Corporation is a leading managed care organization providing government-sponsored healthcare programs including Medicaid, Medicare,...
- Centene CorporationA leading managed care company providing health insurance primarily to government-sponsored programs including Medicaid, Medicare,...
- CignaCigna Healthcare is a leading global health services company offering medical, dental, behavioral, and pharmacy...
- Community Health SystemsCommunity Health Systems (CHS) is a Fortune 500 hospital operator that owns, leases, and operates...
- CooperProfile for Cooper in the API Evangelist network. Fortune F1000 (rank 848).
- CVS HealthA diversified health services company operating the largest pharmacy chain in the United States. Also...
- DanaherA global science and technology conglomerate operating in life sciences, diagnostics, and environmental solutions. Owns...
- DaVitaDaVita Inc. is a Fortune 500 kidney care company operating in-center hemodialysis, home hemodialysis, and...
- Dentsply SironaDentsply Sirona is the world's largest manufacturer of professional dental products and technologies, providing comprehensive...
- DexcomDexcom is a leading medical device company that develops, manufactures, and distributes continuous glucose monitoring...
- Edwards LifesciencesEdwards Lifesciences is a global leader in patient-focused innovations for structural heart disease and critical...
- Elevance HealthOne of the largest health insurance companies in the United States, formerly known as Anthem....
- Encompass HealthEncompass Health is a major US corporation and Fortune 1000 company. The Encompass Health API...
- Ensign GroupEnsign Group is a major US corporation and Fortune 1000 company. The Ensign Group API...
- Envista HoldingsEnvista Holdings is a global family of dental products companies and a Fortune 1000 firm...
- Exact SciencesExact Sciences is a molecular diagnostics company and a Fortune 1000 firm best known for...
- FortiveFortive Corporation is a Fortune 500 diversified industrial technology conglomerate headquartered in Everett, Washington. The...
- GE HealthCare TechnologiesGE HealthCare Technologies (NASDAQ: GEHC) is a global medical technology, pharmaceutical diagnostics, and digital solutions...
- Gilead SciencesA biopharmaceutical company focused on developing and commercializing treatments for life-threatening diseases. A global leader...
- GSKA British multinational pharmaceutical and biotechnology company focused on vaccines, specialty medicines, and general medicines....
- HCA HealthcareHCA Healthcare is one of the largest for-profit operators of healthcare facilities in the world,...
- Henry ScheinHenry Schein is a worldwide distributor of medical and dental supplies including vaccines, pharmaceuticals, financial...
- HologicHologic develops diagnostics, surgical, and medical imaging technologies designed to advance women's health. Explore products...
- HumanaA major health insurance company in the United States with a strong focus on Medicare...
- IlluminaProfile for Illumina in the API Evangelist network. Fortune F1000 (rank 687).
- Intuitive SurgicalIntuitive Surgical is the global leader in robotic-assisted minimally invasive surgery, developing and marketing the...
- IQVIAA leading global provider of advanced analytics, technology solutions, and clinical research services to the...
- Johnson & JohnsonA global healthcare company operating in pharmaceuticals, medical devices, and consumer health products. One of...
- Kaiser PermanenteOne of the largest nonprofit health plans in the United States integrating health insurance with...
- KrogerThe largest supermarket chain by revenue in the United States operating nearly 2,800 stores under...
- LabcorpLabcorp helps patients, providers, organizations, and biopharma companies guide vital healthcare decisions every day. Labcorp...
- McKessonMcKesson is a Fortune 500 healthcare company providing wholesale medical supplies and equipment, pharmaceutical distribution,...
- Medical Mutual of OhioMedical Mutual of Ohio is the oldest and one of the largest health insurance companies...
- MedtronicThe world's largest medical device company developing therapies for cardiovascular, neurological, diabetes, and surgical conditions....
- MerckA global pharmaceutical company discovering and developing medicines, vaccines, and animal health products. Known for...
- ModernaA biotechnology company pioneering messenger RNA therapeutics and vaccines. Rose to global prominence through its...
- ModivCareModivCare Inc. is a technology-enabled healthcare services company that provides a suite of integrated supportive...
- Molina HealthcareA managed care company providing health insurance primarily through government-sponsored programs like Medicaid and Medicare....
- NeueHealthNeueHealth operates a healthcare platform that aligns interests across consumers, payors, and providers to enable...
- NovartisA Swiss multinational pharmaceutical corporation and one of the largest pharmaceutical companies in the world...
- Novo NordiskA Danish multinational pharmaceutical company and the world leader in diabetes care. Also develops treatments...
- Option Care HealthProfile for Option Care Health in the API Evangelist network. Fortune F1000 (rank 918).
- Oscar HealthOscar Health is a technology-driven health insurance company offering individual, small group, and Medicare Advantage...
- Owens & MinorOwens & Minor is a global Fortune 500 healthcare solutions company providing essential products and...
- PACS GroupPACS Group, Inc. is a leading post-acute care company that operates skilled nursing and senior...
- PfizerA global pharmaceutical and biotechnology company developing medicines and vaccines for a wide range of...
- PhilipsA Dutch multinational health technology company focused on diagnostic imaging, patient monitoring, and connected care...
- Quest DiagnosticsQuest Diagnostics is a Fortune 500 company and the world's leading provider of diagnostic information...
- QuidelOrthoQuidelOrtho is a diagnostics company that transforms diagnostic data into action across the entire healthcare...
- RegeneronA leading biotechnology company that invents, develops, and commercializes life-transforming medicines. Known for its EYLEA...
- Regeneron PharmaceuticalsRegeneron Pharmaceuticals is a leading biotechnology company that invents, develops, and commercializes life-transforming medicines for...
- ResmedFortune 1000 company Resmed. Public API documentation has not yet been catalogued in the API...
- RevvityRevvity is a life sciences and diagnostics company providing instruments, software, reagents, and services to...
- Rite AidRite Aid is one of the nation's leading drugstore chains, providing prescription drugs, health and...
- RocheA Swiss multinational healthcare company and the world's largest biotech company by revenue. A global...
- SanofiA French multinational pharmaceutical and healthcare company focused on immunology, oncology, rare diseases, and vaccines....
- Select Medical HoldingsSelect Medical Holdings is one of the largest operators of specialty hospitals, outpatient rehabilitation clinics,...
- StrykerA global medical technology company offering orthopedic implants, surgical equipment, and neurotechnology products. A leader...
- Surgery PartnersSurgery Partners is a leading operator of surgical facilities and ancillary services in the United...
- Teladoc HealthTeladoc Health is a global leader in whole-person virtual care, providing on-demand healthcare, expert medical...
- TeleflexFortune 1000 company Teleflex. Public API documentation has not yet been catalogued in the API...
- Tenet HealthcareTenet Healthcare is a diversified healthcare services company and Fortune 500 organization operating regionally focused,...
- The Cigna GroupA global health services company providing health insurance, pharmacy benefits, and behavioral health services. Serves...
- Thermo Fisher ScientificThe world's largest serving science company providing laboratory equipment, instruments, reagents, and consumables. Supports research,...
- UnitedHealth GroupUnitedHealth Group is a diversified health care company with two distinct platforms, UnitedHealthcare for health...
- UnitedHealth GroupThe largest healthcare company in the world by revenue, operating UnitedHealthcare insurance and Optum health...
- Universal Health ServicesUniversal Health Services (UHS) is one of the nation's largest hospital management companies, operating acute...
- UPMCA world-renowned health care provider and insurer headquartered in Pittsburgh, Pennsylvania. One of the largest...
- Vertex PharmaceuticalsVertex Pharmaceuticals is a global biotechnology company headquartered in Boston, Massachusetts, focused on scientific innovation...
- WalgreensOne of the largest pharmacy store chains in the United States operating thousands of locations...
- Walgreens Boots AllianceWalgreens Boots Alliance (WBA) is a global pharmacy-led health and wellbeing enterprise operating in more...
- Zimmer BiometZimmer 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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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}}®ion={{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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Score Breakdown — Total: 35078
Each row links to its full definition on the Naftiko Signal Groups page.
390 86 146 1331 1526 608 1143 753 529 2719 706 937 1721 350 723 805 314 341 148 979 1393 961 155 624 2541 5421 931 580 212 392 267 25 387 542 1204 304 362 132 244 401 460Areas — 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 Ads
- FactSet
- Fargate
- Fern
- Figma
- ForgeRock
- Fortify
- Fortinet
- Fusio
- G2
- GCP Cloud Storage
- Gainsight
- Gemini
- GitHub
- GitHub Actions
- GitHub Copilot
- GitLab
- Gmail
- Gong
- Google Ads
- Google Analytics
- Google Android
- Google Apps Script
- Google Campaign Manager
- Google Chrome
- Google Cloud Dataflow
- Google Cloud Logging
- Google Cloud Platform
- Google Data Studio
- Google Dialogflow
- Google Docs
- Google Drive
- Google Forms
- Google Maps
- Google Marketing Platform
- Google Optimize
- Google 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
- 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
- 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
- Tyk
- Unity
- Unix
- VMware
- Vantage
- Vendr
- Veritas Cluster
- Veritas InfoScale
- Veritas NetBackup
- Veritas Volume Manager
- Vessel
- Visio
- Visualforce
- WebLogic
- WebSphere
- 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
- 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.
Where you stand
See your signals
The leads, the gaps, and where AI has shifted the gradient — in numbers from public data, not vendor decks.
See full report →What to build
Translate to capabilities
Capabilities being built across the peer set — tied to the markets you actually serve.
View capabilities →Where to go next
Navigate the next move
A prioritized roadmap grounded in signal data. Not a generic best-practices deck, not a vendor-shaped pitch.
Get your navigation →Control what you build
Integrate with AI
Run it on infrastructure you control. Open source — fork it, audit it, run it on your stack. No vendor lock-in.
First capability live in 90 days.
Become a design partner →