Construction Industry Signals

Companies providing engineering, procurement, and construction services for large-scale infrastructure, industrial, and environmental projects worldwide.

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

Across 50 companies in Construction we detected 1300 areas, 244 services, 153 tools, and 152 standards — producing an aggregate signal score of 2587.

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

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

Construction Industry Technology Investment Report

Prepared by Naftiko May 2026

Executive Summary

The Construction industry, comprising companies providing engineering, procurement, and construction services for large-scale infrastructure and industrial projects worldwide, is represented in this analysis by 3 firms — AECOM, Bechtel, and a third peer. Scoring across 11 layers reveals the industry’s strongest concentration in Productivity (Services), Retrieval & Grounding (Data), and Efficiency & Specialization (Operations), where leading companies have built material depth. Cloud infrastructure commands the highest individual scores in the Foundational Layer, signaling that these engineering giants have prioritized scalable compute before more advanced AI capabilities.

The most consequential gap in Construction is the fragile state of Customization & Adaptation: Data Pipelines top out at a score of 10 and Domain Specialization reaches just 2, meaning neither firm has begun translating its substantial data estate into proprietary model behavior suited for construction workflows. AECOM and Bechtel are the two firms that define this competitive landscape — AECOM leads in the majority of scoring areas while Bechtel asserts an edge in Model Registry & Versioning (14 vs. 8) and Security (47 vs. 43), creating a tight but differentiated rivalry.


Layer 1: Foundational Layer

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

Artificial Intelligence — Top Company: AECOM (41)

AECOM and Bechtel are tied at the top of the Artificial Intelligence scoring area, both posting scores of 41, indicating equivalent early-stage commitment to AI tooling across the sector. BigCommerce leads among services deployed across these firms, while Git anchors the toolchain — a signal that AI work is still being staged through engineering workflows rather than purpose-built AI platforms. The parity here is striking: neither firm has broken away, and the low absolute score (41 out of a maximum benchmark) suggests Construction’s AI programs are nascent rather than mature. For firms competing on complex mega-project bids, closing this gap quickly will define which company arrives at the negotiating table with data-driven advantages.

Cloud — Top Company: Bechtel (83)

Bechtel edges AECOM in Cloud adoption with a score of 83 versus 81, making this the highest-scoring area within the Foundational Layer and the dimension where both firms have invested most heavily. Both companies deploy a consistent portfolio of cloud-native services including GitHub, Datadog, Salesforce, and Amazon Web Services. Terraform leads the infrastructure toolchain, confirming that infrastructure-as-code practice is established, even if the full cloud-native application estate remains immature. Cloud maturity at this level creates the backbone upon which AI workloads can be reliably scaled — without it, downstream layers would have no dependable substrate.

Open-Source — Top Company: AECOM (31)

AECOM leads Open-Source adoption with a score of 31 versus Bechtel’s 24, a meaningful gap that reflects deeper engineering investment in community-led tooling. The presence of PyTorch, TensorFlow, Apache Spark, Kubeflow, and PySpark across both firms’ toolchains signals that open-source machine learning infrastructure is already in place, even if full production pipelines have not yet been commissioned. Apache Airflow for orchestration and Elasticsearch for search further round out an open-source stack that spans data engineering and operational observability. The lead AECOM holds here suggests a more permissive internal culture around open tooling, which correlates with faster AI experimentation cycles.

Languages — Top Company: AECOM (38)

AECOM scores 38 in Languages against Bechtel’s 32, a gap that reflects broader polyglot engineering practice within AECOM’s workforce. The toolchain includes Python-heavy data science libraries (Pandas, NumPy) alongside modern frontend frameworks (Vue.js, React Native) and JVM-stack tools (Spring, Spring Boot), demonstrating that engineering teams are not siloed to a single paradigm. Language diversity in a construction firm’s tech stack is often an artifact of acquired digital subsidiaries and embedded engineering teams — the breadth here implies a more federated development culture. Closing the gap for Bechtel would require deliberate investment in language skill diversification across engineering centers.

Code — Top Company: AECOM (27)

Code practice, which measures the depth of software engineering discipline including source control, CI/CD, and collaborative coding patterns, gives AECOM a 27 versus Bechtel’s 23. Both firms rely on Git as the universal anchor, with Consul for service discovery and Terraform for infrastructure, suggesting a DevOps-oriented but not yet developer-experience-optimized environment. The relatively low absolute scores in this area compared to Cloud (83) reveal that construction firms have invested more in infrastructure provisioning than in the software craftsmanship disciplines — testing, code review rigor, and automated quality gates — that accelerate AI-adjacent product delivery.


Layer 2: Retrieval & Grounding

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

Data — Top Company: AECOM (93)

AECOM leads the Data scoring area with a score of 93, closely followed by Bechtel at 90 — the tightest pairing across any high-stakes area in the dataset. Both firms have built substantial data infrastructure evidenced by a toolchain spanning Apache Spark, Apache Airflow, PostgreSQL, Elasticsearch, and Pandas, indicating mature batch and streaming data pipelines are operational. The high scores here relative to the Foundational Layer’s AI area (both at 41) reveal a classic construction industry pattern: robust operational data estates have been assembled for project management and cost control, but translation into AI-ready data products has not yet followed. This data depth is the most immediately exploitable asset in the Construction sector for RAG-based applications.

Databases — Top Company: AECOM (29)

AECOM holds a database score of 29 versus Bechtel’s 25, with PostgreSQL and Elasticsearch appearing prominently across both firms’ tooling inventories. The scores are modest in absolute terms, suggesting that while relational and document-oriented databases are operational, neither firm has made significant investments in vector databases or graph databases that would power next-generation AI retrieval at project scale. The gap between the Data score (93) and the Databases score (29) hints that much of the data infrastructure investment is concentrated in pipeline tooling rather than in managed, queryable data layers — an architectural debt that limits AI grounding sophistication.

Virtualization — Top Company: AECOM (15)

Virtualization adoption scores for AECOM (15) and Bechtel (13) are the lowest in this layer, consistent with the industry’s historically on-premises infrastructure roots in field operations. Construction project sites and engineering centers have relied on hardened, locally managed compute that is only gradually being abstracted into virtualized environments. The limited virtualization depth constrains the ability to spin up isolated AI inference environments on demand — a meaningful operational constraint for firms deploying AI on remote project sites with variable connectivity.

Specifications — Top Company: AECOM (7)

Specifications — covering API contract management, OpenAPI adoption, and formal interface definitions — scores just 7 for AECOM and 4 for Bechtel, the lowest absolute scores in this layer. Construction firms have historically delivered custom-built, point-to-point integrations across project management platforms rather than contract-first API design, and these scores confirm that pattern persists. The weakness here has downstream consequences: without formally specified interfaces, AI agents cannot reliably traverse the ecosystem of BIM tools, ERP systems, and field-data platforms that define the construction workflow fabric.

Context Engineering — Top Company: (Collective signals only)

Context Engineering, which reflects collective signal patterns around prompt architecture and contextual grounding, does not yet surface individual company rankings in Construction — indicating that deliberate context engineering practice has not emerged as a distinct discipline within either firm’s AI programs. The services and toolchain in this area mirror the broader stack (BigCommerce, GitHub, OpenAI, Git, Terraform), suggesting context engineering work is embedded within existing engineering pipelines rather than standing alone. This is an early-stage indicator that firms are prompting AI models in ad hoc ways rather than through systematic context management frameworks.


Layer 3: Customization & Adaptation

Customization & Adaptation measures investment in fine-tuning, model versioning, multimodal infrastructure, and domain-specific adaptation that would allow firms to develop proprietary AI behavior tailored to construction workflows.

Data Pipelines — Top Company: Bechtel (10)

Bechtel leads Data Pipelines with a score of 10 against AECOM’s 6, a reversal of the typical AECOM leadership in this dataset. Both scores are low in absolute terms — the highest-scoring services include BigCommerce and GitHub while Apache Airflow anchors the pipeline tooling — and the disparity suggests that Bechtel has made incremental investments in orchestrated feature engineering pipelines, possibly in support of cost estimation or supply chain analytics. For an industry sitting on vast project datasets, scores this low signal that the infrastructure to feed fine-tuned models has not been systematically built out.

Model Registry & Versioning — Top Company: Bechtel (14)

Bechtel again leads in Model Registry & Versioning, scoring 14 against AECOM’s 8, suggesting Bechtel is slightly further along in building the governance scaffolding around its AI models — tracking versions, managing artifacts, and establishing rollback capability. Git and Kubeflow feature in the toolchain, indicating that MLflow-style registries or Kubeflow Pipelines-backed artifact management are in early use. The absolute scores remain low, and neither firm has reached a state where model registry practice is embedded in production CI/CD workflows. Bechtel’s edge here could accelerate into a durable advantage as model deployment cadences increase.

Multimodal Infrastructure — Top Company: AECOM (12)

AECOM returns to leadership in Multimodal Infrastructure with a score of 12 versus Bechtel’s 9. Construction is an inherently multimodal domain — combining structured project data, 2D/3D CAD drawings, site photography, and sensor telemetry — making multimodal AI a natural fit for applications like automated defect detection, progress monitoring, and safety compliance. The Unity service presence in both firms’ stacks is a notable signal of 3D/visualization investment. Current scores indicate capability building is underway but nowhere near production-grade multimodal deployment.

Domain Specialization — Top Company: Bechtel (2)

Domain Specialization — capturing investment in vertical-specific AI models, construction-specific pre-training, and fine-tuned LLMs — registers just 2 for Bechtel, with AECOM showing no material signal in this area. This is the starkest gap in the Construction dataset: despite the sector’s deep domain complexity involving civil engineering codes, materials science, and project scheduling theory, neither firm has meaningfully invested in domain-adapted models. Any construction firm that commissions domain-specialized AI — trained on project data, engineering standards, and field observations — will generate compounding advantages in bid accuracy, risk modeling, and change order management that no general-purpose LLM can match.


Layer 4: Efficiency & Specialization

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

Automation — Top Company: AECOM (53)

AECOM leads Automation with a score of 53 against Bechtel’s 47 — the highest paired scores outside of Data and Productivity Services. The automation toolchain spans Terraform, PowerShell, Apache Airflow, and Spring Boot, reflecting automation practice rooted in infrastructure provisioning and workflow scheduling rather than in AI-specific pipeline orchestration. The gap between firms is meaningful: AECOM’s higher automation posture means faster iteration cycles on AI-adjacent tooling, lower operational toil, and better positioned engineering teams for handling the volume of model-in-production scenarios that construction deployments will require.

Containers — Top Company: AECOM (23)

AECOM scores 23 in Containers versus Bechtel’s 16, with both firms deploying Consul for service mesh and Terraform as the infrastructure backbone. Container adoption at this level confirms that both firms have moved beyond pure VM-based workloads, though the absolute scores suggest containerization is not yet the default deployment target for new applications. For AI inference endpoints in particular, containerized deployments offer the portability needed to push models closer to construction sites and field operations — a use case that neither firm appears to have prioritized yet.

Platform — Top Company: AECOM (34)

Platform engineering scores at 34 for AECOM and 31 for Bechtel, a tight pair that reflects shared investment in platform-as-a-service tooling including ServiceNow, Datadog, and AWS. Both firms have recognized that internal developer platforms reduce friction for AI adoption, but the similar scores indicate neither has yet established a differentiated internal AI developer platform that would accelerate time-to-production for new model deployments.

Operations — Top Company: AECOM (58)

Operations represents the highest single score in the Efficiency & Specialization layer at 58 for AECOM, with Bechtel close behind at 46. Operational tooling — monitoring, alerting, incident management, and change control — is the most mature AI-adjacent capability in Construction, fed by years of investment in project operations tooling including Datadog, New Relic, ServiceNow, and Prometheus. This operational depth is a genuine strength: firms that can monitor production AI systems with the same rigor they apply to project operations will detect model degradation early and maintain the reliability thresholds that construction decision-makers require.


Layer 5: Productivity

Productivity captures how Construction organizations leverage AI-adjacent tooling — including coding assistants, copilots, and SaaS platforms — to accelerate engineering output and workforce effectiveness.

Software As A Service (SaaS) — Top Company: AECOM (1)

Both AECOM and Bechtel register a score of 1 in SaaS productivity, the lowest absolute scoring area across the entire dataset. This signals that neither firm has embedded AI-powered SaaS tools — such as coding assistants, AI-enhanced project management copilots, or intelligent document analysis platforms — into their core workflows in a measurable way. The services portfolio includes Salesforce, MailChimp, HubSpot, Zendesk, and Microsoft 365, which are standard enterprise SaaS but not differentiated AI productivity tools. Given the labor-intensive nature of engineering documentation, RFI management, and procurement, this represents one of the highest-return, lowest-friction investment areas available to Construction firms.

Code — Top Company: AECOM (27)

The Code scoring area within Productivity (measuring developer tooling depth, IDE integration, and code generation adoption) mirrors the Foundational Layer Code score — AECOM at 27 and Bechtel at 23. GitHub is the universal anchor, and the Git-centric toolchain is consistent across both firms. The flat scores across both Productivity and Foundational Code areas suggest that neither firm has layered AI-assisted coding tools (GitHub Copilot, Cursor, or similar) on top of their existing engineering infrastructure at scale — a missed productivity lever for engineering teams writing infrastructure-as-code, BIM automation scripts, and data pipeline definitions.

Services — Top Company: AECOM (206)

Services is the dominant score across all Productivity areas, with AECOM at 206 and Bechtel at 194 — the highest raw scores in the Productivity layer and among the highest in the entire dataset. Both firms run rich, multi-vendor service portfolios spanning BigCommerce, Zendesk, HubSpot, ServiceNow, Salesforce, Microsoft 365, LinkedIn, and Meta — the breadth expected of large global engineering enterprises. The high scores here reflect breadth of service adoption rather than AI-native capability, but they establish the integration surface across which AI productivity tools could be deployed with relatively low additional infrastructure investment.


Layer 6: Integration & Interoperability

Integration & Interoperability captures how Construction organizations connect AI systems to enterprise data sources, event streams, partner ecosystems, and open standards through APIs, integration patterns, and CNCF tooling.

API — Top Company: AECOM (16)

AECOM leads API adoption with a score of 16 against Bechtel’s 9 — a meaningful gap suggesting AECOM has invested more deliberately in API-driven architecture. The services in this area include Salesforce, GitHub, and AWS, implying that API practice is concentrated around CRM and cloud connectivity rather than construction-domain-specific integration surfaces such as BIM authoring tools or field data collectors. The gap between AECOM and Bechtel here could compound if AECOM begins exposing AI capabilities as internal APIs that development teams can compose into project workflows.

Integrations — Top Company: AECOM (30)

AECOM scores 30 in Integrations versus Bechtel’s 24, with the integration portfolio spanning BigCommerce, ServiceNow, HubSpot, and AWS. The ServiceNow presence is notable — it signals investment in enterprise workflow automation that could serve as an orchestration layer for AI-assisted project management. Both firms operate at a level of integration maturity that is adequate for basic AI connectivity but falls short of the real-time event-driven integration fabric required for AI systems that need to react to project status changes, material delays, or safety incidents as they occur.

Event-Driven — Top Company: Bechtel (15)

Bechtel leads Event-Driven adoption at 15 versus AECOM’s 11 — a notable reversal where Bechtel outperforms on a capability that directly enables real-time AI responsiveness. Event-driven architecture, using tools like Kafka, is foundational to AI systems that must respond to construction site events — safety sensor alerts, crane proximity warnings, or quality inspection failures — in near-real time. Bechtel’s edge here may reflect investments in operational technology integration at the project site level. Both firms should treat event-driven architecture as a strategic priority for any AI safety and quality program.

Patterns — Top Company: AECOM (15)

AECOM leads Patterns at 15 versus Bechtel’s 9, signaling more deliberate investment in reusable architectural patterns — circuit breakers, retry logic, event sourcing, CQRS — that make integration systems resilient. These patterns are the invisible infrastructure that prevents AI-connected systems from cascading failures when external data sources become unavailable. Spring Boot and Vite anchor the toolchain here, consistent with the JVM-stack architectural foundation that AECOM’s engineering teams appear to favor.

Specifications — Top Company: AECOM (7)

AECOM scores 7 in Specifications and Bechtel scores 4, confirming that formal API specification practice (OpenAPI, AsyncAPI) remains underdeveloped in Construction. Without well-specified interfaces, AI agents cannot reliably discover and invoke the BIM, project management, and procurement systems that hold the data Construction AI programs need. This is a design-time investment that pays dividends across every integration surface — addressing it through systematic API specification tooling would immediately unlock AI agent composability.

Apache — Top Company: AECOM (8)

Apache ecosystem adoption — Kafka, Spark, Airflow, Flink, and related projects — scores 8 for AECOM and 7 for Bechtel, with parity reflecting shared investment in open-source data infrastructure. Apache Spark and Airflow are already present in both firms’ toolchains, confirming that batch-scale data processing and workflow orchestration are operational. Deeper Apache Kafka investment would unlock the event-driven streaming layer that complements existing batch pipelines and enables real-time project analytics.

CNCF — Top Company: AECOM (22)

AECOM leads CNCF adoption at 22 versus Bechtel’s 18, reflecting broader investment in cloud-native tooling including Kubernetes, Prometheus, and Consul. CNCF adoption correlates directly with the ability to deploy AI workloads on portable, auto-scaling infrastructure — a prerequisite for moving AI inference from central data centers to regional or edge environments closer to construction sites. Prometheus and Consul are already present in both toolchains, suggesting the observability and service mesh foundations are in place; the next step is activating Kubernetes-native ML serving frameworks.


Layer 7: Statefulness

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

Observability — Top Company: AECOM (34)

AECOM leads Observability at 34 versus Bechtel’s 28. The toolchain includes Datadog, New Relic, and Prometheus — a mature three-tier observability stack covering metrics, logs, and traces across both firms. This depth is a genuine competitive asset: construction firms that can instrument AI-generated recommendations alongside project KPIs will close the feedback loop between model predictions and operational outcomes faster than those relying on manual reporting cycles. The gap between firms suggests AECOM has invested in more granular instrumentation, possibly extending into cost analytics and carbon tracking dashboards.

Governance — Top Company: AECOM (31)

AECOM holds a Governance score of 31 against Bechtel’s 27. Governance in this context spans policy enforcement, data stewardship, access control, and audit trails — all critical in a sector where project data includes sensitive client designs, bid pricing, and subcontractor financials. Both firms deploy Salesforce and ServiceNow as governance-adjacent workflow platforms, but scores in this range indicate governance programs are not yet systematically covering AI model behavior, data provenance, or model output auditability. Establishing AI-specific governance frameworks before model deployment at scale is far less costly than retrofitting them afterward.

Security — Top Company: Bechtel (47)

Security is the area where Bechtel asserts its clearest lead: a score of 47 versus AECOM’s 43. Construction firms handle classified project designs, defense infrastructure data, and critical public infrastructure specifications — making security depth an existential requirement rather than a compliance checkbox. The toolchain includes Datadog, GitHub, and AWS alongside CNCF security tooling via Consul, signaling investment in network-level and API-level security. Bechtel’s edge here may reflect its deeper exposure to government and defense construction programs where CMMC and similar frameworks mandate elevated security posture.

Data — Top Company: AECOM (93)

The Data scoring area appears again in the Statefulness layer (shared with Retrieval & Grounding), reinforcing AECOM’s leadership at 93 versus Bechtel’s 90. In a statefulness context, data depth translates to the ability to maintain persistent AI application state — conversation memory, project context, user preference history — across long-running construction engagements that span years. The toolchain (Apache Spark, Airflow, Elasticsearch) supports large-scale state management, though neither firm has yet deployed AI applications that exploit this data depth for personalized, project-aware AI assistance.


Layer 8: Measurement & Accountability

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

Testing & Quality — Top Company: AECOM (10)

AECOM leads Testing & Quality at 10 versus Bechtel’s 4 — a significant gap that reflects more deliberate investment in automated testing, QA tooling, and quality engineering practice. The difference matters acutely for AI systems: model outputs in construction decision support — cost estimates, schedule predictions, risk flags — must be verifiable and bounded by known confidence intervals. AECOM’s stronger testing posture reduces the risk of AI-generated recommendations entering project workflows without validation gates. Bechtel’s low score here is a governance exposure that should be prioritized ahead of any scaled AI deployment.

Observability — Top Company: AECOM (34)

As noted in the Statefulness layer, both firms maintain mature observability stacks. In the Measurement context, these tools enable continuous AI performance monitoring — detecting when model accuracy drifts, when inference latency spikes, or when recommendation acceptance rates decline. The presence of Datadog, New Relic, and Prometheus across both firms means the monitoring infrastructure for AI observability is available; the remaining work is instrumenting AI-specific metrics into these existing pipelines.

Developer Experience — Top Company: AECOM (16)

Developer Experience — covering internal tooling quality, documentation, onboarding friction, and developer portal maturity — scores 16 for AECOM and 14 for Bechtel. Both scores indicate that engineering talent management and developer enablement are acknowledged priorities but have not yet been elevated to platform-level investment. In competitive talent markets for AI engineers, developer experience is increasingly a retention and recruitment differentiator. Construction firms that build internal developer platforms with high-quality AI tooling — sandboxed model environments, self-service data access, and pre-built construction domain templates — will attract and retain the applied AI talent their transformation programs require.

ROI & Business Metrics — Top Company: AECOM (40)

AECOM leads ROI & Business Metrics at 40 versus Bechtel’s 37. Both firms deploy Salesforce and ServiceNow as core business metrics platforms, supplemented by analytics from Google and LinkedIn data signals. The scores indicate that financial and operational measurement frameworks are operational, but neither firm has yet instrumented AI-specific ROI metrics — such as cost savings per AI-assisted estimate, or schedule compression attributed to AI-flagged risk interventions. Establishing AI ROI baselines before broad deployment is essential for securing continued investment authorization from executive sponsors.


Layer 9: Governance & Risk

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

Regulatory Posture — Top Company: AECOM (9)

AECOM and Bechtel both score 9 in Regulatory Posture, indicating equivalent and early-stage formal engagement with AI-specific regulatory frameworks. Both firms are subject to government contract compliance requirements (CMMC, FedRAMP for US work) and international infrastructure standards, which create a baseline regulatory muscle. Scores this low suggest that AI-specific regulatory mapping — identifying which AI use cases fall under EU AI Act high-risk categories, US executive order guidance, or sector-specific safety standards — has not yet been systematically conducted by either firm.

AI Review & Approval — Top Company: AECOM (13)

AECOM scores 13 in AI Review & Approval versus Bechtel’s 9, suggesting that AECOM has formalized more gate-based review processes for AI system deployment. This likely includes model risk assessment, responsible AI checklists, and approval workflows before models enter production. The gap is meaningful: in construction, AI-generated outputs that inform safety-critical decisions — structural load calculations, hazardous materials handling, emergency evacuation routing — require verifiable review chains. AECOM’s lead here positions it to deploy AI in higher-stakes applications with greater regulatory credibility.

Security — Top Company: Bechtel (47)

Bechtel maintains its security lead at 47 versus AECOM’s 43. In the Governance & Risk context, this security depth translates to stronger controls over AI model access, inference endpoint protection, and training data custody. Construction firms handling sensitive government infrastructure designs, critical facility schematics, and defense project specifications must ensure that AI systems processing this data operate within hardened security envelopes. Bechtel’s investment advantage here is particularly relevant given its deep portfolio of US government construction work.

Governance — Top Company: AECOM (31)

AECOM leads Governance at 31 versus Bechtel’s 27, covering policy enforcement, data stewardship, and operational accountability structures. Governance depth at this level provides the organizational scaffolding for responsible AI deployment: policies govern who can deploy models, what data can be used for training, and how output quality is monitored. Both firms need to extend these governance frameworks to explicitly cover AI-specific controls — model cards, data lineage documentation, and responsible disclosure procedures — before deploying AI in client-facing or safety-critical workflows.

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

Bechtel leads Privacy & Data Rights at 5 versus AECOM’s 2 — the lowest scoring area in the Governance & Risk layer and one of the lowest in the entire Construction dataset. This gap is notable: both firms process large volumes of data from subcontractors, clients, and public agencies, much of which carries contractual and regulatory privacy obligations. The low scores suggest neither firm has invested significantly in privacy engineering tooling — differential privacy, data minimization frameworks, or purpose-limitation controls — that would be required as AI systems begin processing personally identifiable information from project stakeholders and field workforce.


Layer 10: Economics & Sustainability

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

AI FinOps — Top Company: AECOM (4)

Both AECOM and Bechtel score 4 in AI FinOps, indicating that neither firm has developed structured financial operations practices specifically for AI workloads. Cloud cost management and chargeback frameworks exist at the enterprise level, but AI-specific cost attribution — tracking inference costs per project, per use case, or per model version — is not yet operational. As AI deployment scales, unmanaged compute costs can erode project margins in an industry that already operates on thin engineering fee structures. Investing in FinOps tooling for AI workloads before scaling deployments is significantly cheaper than implementing it after cost overruns materialize.

Provider Strategy — Top Company: Bechtel (13)

Bechtel leads Provider Strategy at 13 versus AECOM’s 12, a narrow difference suggesting roughly equivalent multi-cloud and vendor negotiation maturity. Both firms work with AWS, Microsoft, Google, and OpenAI as primary technology providers, a diversified portfolio that avoids single-vendor lock-in for core AI capabilities. Provider strategy at this score level indicates awareness of the multi-cloud imperative but limited formal governance around model procurement, vendor risk management, or contractual AI performance commitments.

Partnerships & Ecosystem — Top Company: AECOM (18)

AECOM leads Partnerships & Ecosystem at 18 versus Bechtel’s 16, signaling slightly broader engagement with technology partners, academic institutions, and construction technology startups. Both firms engage through LinkedIn, Microsoft, and major cloud providers, but the ecosystem investment at these score levels is still primarily transactional — vendor relationships rather than co-development partnerships. The construction technology startup ecosystem (BIM, drone inspection, AI-assisted project controls) has matured rapidly, and firms that establish co-development partnerships early will have preferred access to proprietary datasets and early product capabilities.

Talent & Organizational Design — Top Company: AECOM (16)

AECOM leads Talent & Organizational Design at 16 versus Bechtel’s 8 — the widest percentage gap across the Economics & Sustainability layer. This suggests AECOM has invested more in defining AI-specific roles, training programs, and organizational structures to support scaled AI adoption. In construction, where AI literacy spans civil engineers, project managers, procurement specialists, and field supervisors, workforce transformation requires deliberate organizational design rather than organic capability diffusion. Bechtel’s low score here is an organizational readiness risk that could bottleneck AI program execution regardless of how advanced the technical infrastructure becomes.

Data Centers — (No ranked signals)

Data Centers — capturing investment in GPU compute infrastructure, sustainable energy sourcing, and AI-optimized hardware — does not surface individual firm rankings, suggesting neither AECOM nor Bechtel has publicly committed to proprietary AI compute infrastructure. Both firms are likely consuming AI compute through cloud provider relationships rather than building owned data center capacity, which is an appropriate strategy for firms at this scale of AI maturity.


Layer 11: Storytelling & Entertainment & Theater

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

Alignment — Top Company: AECOM (26)

AECOM leads Alignment at 26 versus Bechtel’s 21, the highest individual score in this layer. Alignment covers how effectively an organization’s AI narrative connects executive ambition to engineering delivery — a dimension that is particularly important in construction, where AI transformation must earn buy-in from project managers, field superintendents, and owner clients who are accustomed to proven engineering methods. AECOM’s higher alignment score may reflect more mature AI communications programs, published whitepapers, or internal CEO-level sponsorship structures.

Standardization — Top Company: AECOM (10)

AECOM leads Standardization at 10 versus Bechtel’s 6, covering investment in reusable AI templates, playbooks, and internal frameworks that accelerate consistent AI adoption across business units. In a project-based business where each engagement is unique, standardization of AI tooling prevents the proliferation of incompatible one-off solutions and enables knowledge transfer across projects. AECOM’s higher score suggests more deliberate internal codification of AI practices, which will compound as its project portfolio grows.

Mergers & Acquisitions — Top Company: AECOM (18)

AECOM scores 18 in M&A versus Bechtel’s 15, reflecting broader signals around technology acquisition strategy and integration of acquired AI capabilities. Both firms have historically grown through acquisition, and the capacity to assess and integrate AI-enabled acquisitions — digital twin companies, BIM software vendors, project analytics platforms — is a strategic differentiator. AECOM’s higher score may reflect more recent or more significant AI-oriented acquisition activity.

Experimentation & Prototyping — (No ranked signals)

Experimentation & Prototyping does not yet surface individual firm rankings, indicating that neither AECOM nor Bechtel has established a visible, structured AI experimentation program with measurable outputs. Pilot programs exist at the project level but have not yet translated into enterprise-level prototyping infrastructure — model sandboxes, internal AI hackathons, or venture-style AI incubator programs — that would accelerate time from concept to proof-of-concept across the business.


Industry Strategic Assessment

Construction occupies a paradoxical position in the AI readiness spectrum: both AECOM and Bechtel have built deep operational foundations — mature cloud infrastructure (Bechtel at 83), substantial data estates (AECOM at 93), and strong operations tooling (AECOM at 58) — yet these investments have not yet been translated into the AI-native capabilities that would generate differentiated competitive advantage. The sector’s strength lies in its operational and data depth, but its weakness is the organizational and architectural work required to connect that depth to production AI programs.

The most urgent gaps center on Customization & Adaptation, where Domain Specialization scores of just 2 and Data Pipeline scores of 10 confirm that proprietary AI model development has not begun in earnest. For firms that manage billions in project portfolios, cost estimate accuracy and schedule risk prediction are direct revenue levers — yet neither firm is investing materially in the fine-tuned models that could deliver these outcomes. Additionally, Privacy & Data Rights (Bechtel at 5, AECOM at 2), SaaS Productivity (both at 1), and AI FinOps (both at 4) represent structural gaps where inaction will compound into regulatory exposure, productivity deficits, and cost management failures as AI programs scale.

AECOM’s clear strength is its breadth of leadership — it leads in AI, Open-Source, Data, Automation, Operations, Governance, Testing, ROI Metrics, Alignment, and Talent. Bechtel’s advantage is concentrated and consequential: it leads in Security (47), Model Registry & Versioning (14), Data Pipelines (10), Provider Strategy (13), and Event-Driven architecture (15) — a cluster of capabilities that underpins trustworthy, production-grade AI deployment. Both firms are well-positioned to partner with a design firm that can translate this foundation into AI product strategy, architectural blueprints, and implementation roadmaps. Naftiko works with technology organizations at exactly this inflection point — where strong infrastructure investment has not yet yielded AI-native product capability — and our design partnership model is built for the sprint from data depth to differentiated AI product.


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

Companies — Total:50

  • Advanced Drainage Systems
    Advanced Drainage Systems (ADS) is a leading manufacturer of stormwater and onsite septic wastewater solutions....
  • AECOM
    A global infrastructure consulting firm providing planning, design, engineering, and construction management services. Delivers projects...
  • APi Group
    APi Group Corporation is a Fortune 500 global, market-leading business services provider of safety, specialty,...
  • Autodesk
    Autodesk is a global leader in design, engineering, and entertainment software, providing cloud-connected platform APIs...
  • Beacon Roofing Supply
    Beacon Roofing Supply (BECN) is one of the largest distributors of residential and non-residential roofing...
  • Bechtel
    One of the largest privately held engineering, procurement, and construction companies in the world. Has...
  • Boise Cascade
    Boise Cascade is a leading North American manufacturer and distributor of building materials for the...
  • BrightView Holdings
    Profile for BrightView Holdings in the API Evangelist network. Fortune F1000 (rank 891).
  • Builders FirstSource
    Builders FirstSource (NYSE: BLDR) is the nation's largest supplier and manufacturer of structural building products,...
  • Carlisle Companies
    Carlisle Companies Incorporated (NYSE: CSL) is a global diversified manufacturer of highly engineered building envelope...
  • Century Communities
    Century Communities is a major US corporation and Fortune 1000 company. The Century Communities API...
  • Comfort Systems USA
    Comfort Systems USA is a major US corporation and Fortune 1000 company. The Comfort Systems...
  • Core & Main
    Core & Main is a leading specialty distributor of water, wastewater, storm drainage, and fire...
  • D.R. Horton
    D.R. Horton is the largest homebuilder by volume in the United States, building and selling...
  • Dream Finders Homes
    Dream Finders Homes is a national homebuilder that constructs new residential properties across markets in...
  • Dycom Industries
    Dycom Industries is a major US corporation and Fortune 1000 company. The Dycom Industries API...
  • EMCOR Group
    EMCOR Group is a Fortune 500 mechanical and electrical construction, energy, and facilities services company...
  • Fluor
    Fluor, a leading engineering & construction company, provides engineering, procurement, construction (EPC), maintenance & project...
  • Fluor Corporation
    A multinational engineering and construction firm providing design, procurement, construction, and maintenance services. Serves energy,...
  • GMS
    Profile for GMS in the API Evangelist network. Fortune F1000 (rank 758).
  • Granite Construction
    Granite Construction is one of the largest diversified heavy civil contractors and construction materials producers...
  • Hovnanian Enterprises
    Hovnanian Enterprises is a leading homebuilder in the United States, designing, constructing, marketing, and selling...
  • Installed Building Products
    Installed Building Products, Inc. is one of the largest installers of insulation, garage doors, rain...
  • Jacobs Solutions
    Jacobs Solutions is a global technology-forward solutions company providing consulting, design, engineering, technical, scientific, and...
  • KB Home
    KB Home is one of the largest and most recognized homebuilders in the United States,...
  • KBR
    KBR is a Fortune 500 company that delivers science, technology, and engineering solutions to governments...
  • Knife River
    Knife River Corporation is one of the leading aggregates-led construction materials and contracting companies in...
  • Lennar
    Lennar Corporation is a Fortune 500 company and one of the leading homebuilders of new...
  • MasTec
    MasTec is a Fortune 500 infrastructure construction company operating across clean energy, data centers, EV...
  • MDC Holdings
    Profile for MDC Holdings in the API Evangelist network. Fortune F1000 (rank 733).
  • MDU Resources Group
    MDU Resources Group is a diversified natural resources company with operations in regulated energy delivery,...
  • Meritage Homes
    Meritage Homes is one of the leading designers and builders of single-family homes in the...
  • M/I Homes
    Profile for M/I Homes in the API Evangelist network. Fortune F1000 (rank 871).
  • MYR Group
    Profile for MYR Group in the API Evangelist network. Fortune F1000 (rank 971).
  • NVR
    NVR Inc. operates in two business segments: homebuilding and mortgage banking, constructing and selling single-family...
  • Parsons Corporation
    Parsons Corporation is a major US corporation and Fortune 1000 company. The Parsons Corporation API...
  • Peter Kiewit Sons'
    Peter Kiewit Sons' (Kiewit Corporation) is one of North America's largest and most respected construction...
  • Primoris Services
    Primoris Services is a specialty contractor and infrastructure company providing construction, fabrication, maintenance, replacement, and...
  • PulteGroup
    PulteGroup is one of America's largest homebuilding companies, building homes under the Centex, Pulte Homes,...
  • Quanta Services
    Quanta Services is a Fortune 500 specialty contracting company that delivers infrastructure solutions to the...
  • Riggs Distler
    A specialty electrical and mechanical contractor headquartered in Cherry Hill, NJ, serving the energy, utility,...
  • Taylor Morrison Home
    Taylor Morrison Home Corporation (NYSE: TMHC) is a leading national homebuilder and developer recognized as...
  • Tetra Tech
    Tetra Tech is an American consulting and engineering services firm headquartered in Pasadena, California. Founded...
  • Toll Brothers
    Toll Brothers is the nation's leading builder of luxury homes, designing, building, marketing, and arranging...
  • TopBuild
    Profile for TopBuild in the API Evangelist network. Fortune F1000 (rank 854).
  • Tri Pointe Homes
    Tri Pointe Homes is one of the largest homebuilders in the United States, designing and...
  • Trimble
    Trimble Inc. is a global technology company that provides advanced positioning, navigation, and data analytics...
  • Tutor Perini
    Tutor Perini Corporation is a leading civil, building, and specialty construction company offering diversified general...
  • Vulcan Materials Company
    Vulcan Materials Company is the nation's largest producer of construction aggregates, primarily crushed stone, sand,...
  • Xylem
    Xylem is a leading global water technology company committed to developing innovative technology solutions to...

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

Sort
Expand
280 capabilities

Manages document revisions in SharePoint, tracks review status in Jira, ensures compliance, logs transmittals in ServiceNow, and notifies teams.

naftiko: '0.5'
info:
  label: Project Document Control Pipeline
  description: Manages document revisions in SharePoint, tracks review status in Jira, ensures compliance, logs transmittals in ServiceNow, and notifies teams.
  tags:
  - document-control
  - jira
  - servicenow
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: document-control
    port: 8080
    tools:
    - name: project_document_control_pipeline
      description: Orchestrate project document control pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-confluence
        type: call
        call: confluence.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → project-document-control-pipeline.yml

Ingests GIS survey data, processes in Snowflake, generates maps, stores in SharePoint, creates Jira review tasks, and notifies GIS team.

naftiko: '0.5'
info:
  label: Geospatial Data Processing Pipeline
  description: Ingests GIS survey data, processes in Snowflake, generates maps, stores in SharePoint, creates Jira review tasks, and notifies GIS team.
  tags:
  - gis
  - snowflake
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: gis
    port: 8080
    tools:
    - name: geospatial_data_processing_pipeline
      description: Orchestrate geospatial data processing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-confluence
        type: call
        call: confluence.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.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://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → geospatial-data-processing-pipeline.yml

When a qualified lead arrives in HubSpot, retrieves the contact details, creates a Salesforce opportunity, and notifies the business development team via Microsoft Teams.

naftiko: '0.5'
info:
  label: HubSpot Lead to Salesforce Opportunity Sync
  description: When a qualified lead arrives in HubSpot, retrieves the contact details, creates a Salesforce opportunity, and notifies the business development team via Microsoft Teams.
  tags:
  - business-development
  - hubspot
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lead-management
    port: 8080
    tools:
    - name: sync-lead-to-opportunity
      description: Pull a HubSpot contact, create a Salesforce opportunity, and notify BD via Teams.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: The HubSpot contact ID.
      - name: deal_amount
        in: body
        type: number
        description: The estimated deal amount.
      - name: bd_channel_id
        in: body
        type: string
        description: The Teams channel ID for business development.
      steps:
      - name: get-contact
        type: call
        call: hubspot.get-contact
        with:
          contact_id: '{{contact_id}}'
      - name: create-opportunity
        type: call
        call: salesforce.create-opportunity
        with:
          name: '{{get-contact.company}} - Infrastructure Project'
          amount: '{{deal_amount}}'
          stage: Prospecting
          contact_name: '{{get-contact.firstname}} {{get-contact.lastname}}'
      - name: notify-bd
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{bd_channel_id}}'
          text: 'New opportunity from HubSpot lead: {{get-contact.company}} (${{deal_amount}}). Contact: {{get-contact.firstname}} {{get-contact.lastname}}. Salesforce: {{create-opportunity.url}}'
  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://aecom.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → hubspot-lead-to-salesforce-opportunity-sync.yml

Retrieves a Microsoft Visio network diagram file from SharePoint and returns its metadata including version, author, and download URL for infrastructure network documentation.

naftiko: '0.5'
info:
  label: Visio Network Diagram Export
  description: Retrieves a Microsoft Visio network diagram file from SharePoint and returns its metadata including version, author, and download URL for infrastructure network documentation.
  tags:
  - engineering
  - microsoft-visio
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: diagram-management
    port: 8080
    tools:
    - name: get-visio-diagram
      description: Retrieve a Visio diagram from SharePoint by site and file path.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site identifier.
      - name: file_path
        in: body
        type: string
        description: The path to the Visio file in the document library.
      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_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: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → visio-network-diagram-export.yml

Looks up a SAP Concur expense report by report ID and returns the approval status, total amount, and submission date for project travel expense tracking.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Status
  description: Looks up a SAP Concur expense report by report ID and returns the approval status, total amount, and submission date for project travel expense tracking.
  tags:
  - finance
  - sap-concur
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: expense-management
    port: 8080
    tools:
    - name: get-expense-report
      description: Retrieve the status of a SAP Concur expense report by report ID.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The Concur expense report identifier.
      call: concur.get-expense-report
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: approval_status
        type: string
        mapping: $.ApprovalStatusName
      - name: total_amount
        type: string
        mapping: $.Total
      - name: submit_date
        type: string
        mapping: $.SubmitDate
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0/expense
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-status.yml

Retrieves Jira issue status for AECOM engineering teams.

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

Retrieves Confluence page content for AECOM knowledge base.

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

Collects contractor timesheets, validates against contracts in SAP, creates approval workflows in ServiceNow, and notifies project managers.

naftiko: '0.5'
info:
  label: Contractor Timesheet Processing Pipeline
  description: Collects contractor timesheets, validates against contracts in SAP, creates approval workflows in ServiceNow, and notifies project managers.
  tags:
  - workforce
  - sap
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: contractor_timesheet_processing_pipeline
      description: Orchestrate contractor timesheet processing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://aecom-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → contractor-timesheet-processing-pipeline.yml

Retrieves payroll summary data from ADP for a given employee ID, returning gross pay, net pay, and pay period for project labor cost tracking.

naftiko: '0.5'
info:
  label: ADP Payroll Data Lookup
  description: Retrieves payroll summary data from ADP for a given employee ID, returning gross pay, net pay, and pay period for project labor cost tracking.
  tags:
  - hr
  - adp
  - payroll
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Retrieve payroll summary from ADP by employee ID.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The ADP employee identifier.
      call: adp.get-payroll
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: gross_pay
        type: string
        mapping: $.payStatements[0].grossPayAmount
      - name: net_pay
        type: string
        mapping: $.payStatements[0].netPayAmount
      - name: pay_period
        type: string
        mapping: $.payStatements[0].payPeriod
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /workers/{{employee_id}}/pay-statements
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → adp-payroll-data-lookup.yml

Retrieves the status and URL of a Tableau project performance dashboard, returning the view name, last refresh time, and embed URL for sharing.

naftiko: '0.5'
info:
  label: Tableau Project Dashboard Lookup
  description: Retrieves the status and URL of a Tableau project performance dashboard, returning the view name, last refresh time, and embed URL for sharing.
  tags:
  - analytics
  - tableau
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: analytics-dashboards
    port: 8080
    tools:
    - name: get-tableau-view
      description: Retrieve a Tableau dashboard view by site and view ID.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The Tableau site identifier.
      - name: view_id
        in: body
        type: string
        description: The Tableau view identifier.
      call: tableau.get-view
      with:
        site_id: '{{site_id}}'
        view_id: '{{view_id}}'
      outputParameters:
      - name: view_name
        type: string
        mapping: $.view.name
      - name: content_url
        type: string
        mapping: $.view.contentUrl
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://aecom-tableau.online.tableau.com/api/3.21/sites
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: views
      path: /{{site_id}}/views/{{view_id}}
      inputParameters:
      - name: site_id
        in: path
      - name: view_id
        in: path
      operations:
      - name: get-view
        method: GET
Open in Framework → View in Fleet → tableau-project-dashboard-lookup.yml

When a safety incident is reported on site, creates a ServiceNow incident, logs the event in Oracle EBS, uploads documentation to SharePoint, and notifies the safety officer and project manager via Slack.

naftiko: '0.5'
info:
  label: Safety Incident Reporting Pipeline
  description: When a safety incident is reported on site, creates a ServiceNow incident, logs the event in Oracle EBS, uploads documentation to SharePoint, and notifies the safety officer and project manager via Slack.
  tags:
  - safety
  - servicenow
  - oracle-e-business-suite
  - sharepoint
  - slack
  - construction
capability:
  exposes:
  - type: mcp
    namespace: safety-management
    port: 8080
    tools:
    - name: report-safety-incident
      description: Process a safety incident by creating a ServiceNow ticket, logging in Oracle, uploading docs, and notifying key personnel.
      inputParameters:
      - name: incident_description
        in: body
        type: string
        description: Description of the safety incident.
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: severity
        in: body
        type: string
        description: Incident severity (critical, high, medium, low).
      - name: safety_officer_email
        in: body
        type: string
        description: The Slack email of the safety officer.
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Safety Incident: {{incident_description}}'
          category: safety
          priority: '{{severity}}'
          assigned_group: EHS_Safety
      - name: log-oracle-event
        type: call
        call: oracle-ebs.create-safety-event
        with:
          project_number: '{{project_number}}'
          description: '{{incident_description}}'
          severity: '{{severity}}'
      - name: create-doc-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: safety_records
          folder_path: Incidents/{{create-snow-incident.number}}
      - name: notify-safety-team
        type: call
        call: slack.send-message
        with:
          channel: safety-alerts
          text: 'SAFETY INCIDENT [{{severity}}]: {{incident_description}}. Project: {{project_number}}. ServiceNow: {{create-snow-incident.number}}. Docs: {{create-doc-folder.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: safety-events
      path: /safety-events
      operations:
      - name: create-safety-event
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: create-folder
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → safety-incident-reporting-pipeline.yml

Retrieves a purchase requisition from Coupa by ID, returning the status, requested amount, supplier, and approval status for procurement tracking.

naftiko: '0.5'
info:
  label: Coupa Purchase Requisition Lookup
  description: Retrieves a purchase requisition from Coupa by ID, returning the status, requested amount, supplier, and approval status for procurement tracking.
  tags:
  - procurement
  - coupa
capability:
  exposes:
  - type: mcp
    namespace: procurement-coupa
    port: 8080
    tools:
    - name: get-requisition
      description: Look up a Coupa purchase requisition by ID.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Coupa requisition identifier.
      call: coupa.get-requisition
      with:
        requisition_id: '{{requisition_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: total_amount
        type: string
        mapping: $.total
      - name: supplier_name
        type: string
        mapping: $.supplier.name
  consumes:
  - type: http
    namespace: coupa
    baseUri: https://aecom.coupahost.com/api
    authentication:
      type: apiKey
      name: X-COUPA-API-KEY
      in: header
      value: $secrets.coupa_api_key
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
Open in Framework → View in Fleet → coupa-purchase-requisition-lookup.yml

Checks ServiceNow incident status for AECOM IT operations.

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

Generates a project proposal by pulling opportunity data from Salesforce, retrieving past project references from Confluence, creating a draft in Google Docs, and notifying the proposal lead via Slack.

naftiko: '0.5'
info:
  label: Proposal Generation Workflow
  description: Generates a project proposal by pulling opportunity data from Salesforce, retrieving past project references from Confluence, creating a draft in Google Docs, and notifying the proposal lead via Slack.
  tags:
  - business-development
  - salesforce
  - confluence
  - google-docs
  - slack
  - proposal
capability:
  exposes:
  - type: mcp
    namespace: proposal-management
    port: 8080
    tools:
    - name: generate-proposal
      description: Orchestrate proposal generation by pulling CRM data, past project references, creating a draft document, and notifying the proposal lead.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      - name: reference_space_key
        in: body
        type: string
        description: The Confluence space key containing project references.
      - name: proposal_lead_email
        in: body
        type: string
        description: The proposal lead email for Slack notification.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: search-references
        type: call
        call: confluence.search-content
        with:
          space_key: '{{reference_space_key}}'
          query: '{{get-opportunity.account_name}} {{get-opportunity.project_type}}'
      - name: create-draft
        type: call
        call: googledocs.create-document
        with:
          title: 'Proposal: {{get-opportunity.name}}'
          body: 'Client: {{get-opportunity.account_name}}. Value: ${{get-opportunity.amount}}. Scope: {{get-opportunity.description}}. References: {{search-references.results_summary}}.'
      - name: notify-lead
        type: call
        call: slack.send-message
        with:
          channel: proposals
          text: 'Proposal draft created for {{get-opportunity.name}} (${{get-opportunity.amount}}). Doc: {{create-draft.url}}. {{search-references.total_results}} reference projects found.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://aecom.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: confluence
    baseUri: https://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search?cql=space={{space_key}}+and+text~"{{query}}"
      inputParameters:
      - name: space_key
        in: query
      - name: query
        in: query
      operations:
      - name: search-content
        method: GET
  - type: http
    namespace: googledocs
    baseUri: https://docs.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_docs_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → proposal-generation-workflow.yml

When an engineering design review is initiated, retrieves the drawing from Autodesk BIM 360, creates a Confluence review page, assigns review tasks in Jira, and sends calendar invites via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Design Review Workflow
  description: When an engineering design review is initiated, retrieves the drawing from Autodesk BIM 360, creates a Confluence review page, assigns review tasks in Jira, and sends calendar invites via Microsoft Outlook.
  tags:
  - engineering
  - autodesk
  - confluence
  - jira
  - microsoft-outlook
  - design-review
capability:
  exposes:
  - type: mcp
    namespace: design-review
    port: 8080
    tools:
    - name: initiate-design-review
      description: Start a design review workflow by pulling the drawing, creating a Confluence page, assigning Jira tasks, and scheduling the review meeting.
      inputParameters:
      - name: bim360_project_id
        in: body
        type: string
        description: The BIM 360 project identifier.
      - name: drawing_item_id
        in: body
        type: string
        description: The BIM 360 drawing item ID.
      - name: reviewer_emails
        in: body
        type: string
        description: Comma-separated list of reviewer email addresses.
      - name: review_date
        in: body
        type: string
        description: The scheduled review date in YYYY-MM-DD format.
      steps:
      - name: get-drawing
        type: call
        call: autodesk.get-item
        with:
          project_id: '{{bim360_project_id}}'
          item_id: '{{drawing_item_id}}'
      - name: create-review-page
        type: call
        call: confluence.create-page
        with:
          space_key: ENGR
          title: 'Design Review: {{get-drawing.name}} - {{review_date}}'
          body: 'Drawing: {{get-drawing.name}} (Rev {{get-drawing.version}}). Download: {{get-drawing.download_url}}. Reviewers: {{reviewer_emails}}.'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: ENGR
          summary: 'Design Review: {{get-drawing.name}}'
          description: 'Complete review by {{review_date}}. Confluence: {{create-review-page.url}}'
          issue_type: Task
      - name: send-invite
        type: call
        call: outlook.create-event
        with:
          subject: 'Design Review: {{get-drawing.name}}'
          start_date: '{{review_date}}'
          attendees: '{{reviewer_emails}}'
          body: 'Please review the design at {{create-review-page.url}}. Jira: {{create-review-task.key}}'
  consumes:
  - type: http
    namespace: autodesk
    baseUri: https://developer.api.autodesk.com/data/v1/projects
    authentication:
      type: bearer
      token: $secrets.autodesk_token
    resources:
    - name: items
      path: /{{project_id}}/items/{{item_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: item_id
        in: path
      operations:
      - name: get-item
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://aecom.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://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → design-review-workflow.yml

Retrieves budget and actual costs from Oracle EBS, compares variances, updates a Google Sheets tracker, and alerts the project controller via Microsoft Outlook if variance exceeds threshold.

naftiko: '0.5'
info:
  label: Project Budget Variance Reporter
  description: Retrieves budget and actual costs from Oracle EBS, compares variances, updates a Google Sheets tracker, and alerts the project controller via Microsoft Outlook if variance exceeds threshold.
  tags:
  - finance
  - oracle-e-business-suite
  - google-sheets
  - microsoft-outlook
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: budget-variance
    port: 8080
    tools:
    - name: check-budget-variance
      description: Compare budget vs actuals from Oracle EBS, update the Google Sheets tracker, and alert the controller if variance exceeds threshold.
      inputParameters:
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      - name: variance_threshold
        in: body
        type: number
        description: The variance percentage threshold to trigger an alert.
      - name: controller_email
        in: body
        type: string
        description: The project controller email.
      steps:
      - name: get-costs
        type: call
        call: oracle-ebs.get-project-costs
        with:
          project_number: '{{project_number}}'
      - name: update-tracker
        type: call
        call: googlesheets.update-cells
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: Budget!A2:D2
          values: '[["{{project_number}}", "{{get-costs.budget_amount}}", "{{get-costs.actual_costs}}", "{{get-costs.variance_percent}}"]]'
      - name: send-alert
        type: call
        call: outlook.send-mail
        with:
          to: '{{controller_email}}'
          subject: 'Budget Variance Alert: Project {{project_number}}'
          body: 'Project {{project_number}} has a budget variance of {{get-costs.variance_percent}}%. Budget: ${{get-costs.budget_amount}}. Actuals: ${{get-costs.actual_costs}}. Committed: ${{get-costs.committed_costs}}.'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: project-costs
      path: /costs/{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: googlesheets
    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-cells
        method: PUT
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → project-budget-variance-reporter.yml

Syncs project milestone data from Microsoft Project into a Notion database page, keeping the project wiki current for stakeholder access.

naftiko: '0.5'
info:
  label: Notion Project Wiki Sync
  description: Syncs project milestone data from Microsoft Project into a Notion database page, keeping the project wiki current for stakeholder access.
  tags:
  - project-management
  - notion
  - microsoft-project
capability:
  exposes:
  - type: mcp
    namespace: wiki-sync
    port: 8080
    tools:
    - name: sync-milestones-to-notion
      description: Pull milestones from Microsoft Project and update a Notion database page.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Microsoft Project GUID.
      - name: notion_database_id
        in: body
        type: string
        description: The Notion database identifier.
      steps:
      - name: get-milestones
        type: call
        call: msproject.get-tasks
        with:
          project_id: '{{project_id}}'
          filter: milestone
      - name: update-notion
        type: call
        call: notion.create-page
        with:
          database_id: '{{notion_database_id}}'
          title: Project Milestones Update
          properties: '{"Next Milestone": "{{get-milestones.next_milestone_name}}", "Due Date": "{{get-milestones.next_milestone_date}}", "Percent Complete": "{{get-milestones.overall_percent}}"}'
  consumes:
  - type: http
    namespace: msproject
    baseUri: https://aecom.sharepoint.com/sites/pwa/_api/ProjectServer/Projects
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: ('{{project_id}}')/Tasks?$filter={{filter}}
      inputParameters:
      - name: project_id
        in: path
      - name: filter
        in: query
      operations:
      - name: get-tasks
        method: GET
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    authentication:
      type: bearer
      token: $secrets.notion_token
    resources:
    - name: pages
      path: /pages
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → notion-project-wiki-sync.yml

Compares project costs against industry benchmarks in Snowflake, identifies optimization opportunities, creates Jira tasks, and reports to management.

naftiko: '0.5'
info:
  label: Construction Cost Benchmarking
  description: Compares project costs against industry benchmarks in Snowflake, identifies optimization opportunities, creates Jira tasks, and reports to management.
  tags:
  - cost-management
  - snowflake
  - jira
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cost-management
    port: 8080
    tools:
    - name: construction_cost_benchmarking
      description: Orchestrate construction cost benchmarking workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.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
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → construction-cost-benchmarking.yml

Orchestrates project closeout by archiving project documents in Box, closing the Oracle EBS project, updating the Salesforce opportunity to Closed Won, notifying stakeholders via Microsoft Teams, and creating a Confluence lessons-learned page.

naftiko: '0.5'
info:
  label: Project Closeout Orchestrator
  description: Orchestrates project closeout by archiving project documents in Box, closing the Oracle EBS project, updating the Salesforce opportunity to Closed Won, notifying stakeholders via Microsoft Teams, and creating a Confluence lessons-learned page.
  tags:
  - project-management
  - box
  - oracle-e-business-suite
  - salesforce
  - microsoft-teams
  - confluence
  - project-closeout
capability:
  exposes:
  - type: mcp
    namespace: project-closeout
    port: 8080
    tools:
    - name: close-project
      description: Execute the project closeout workflow across document archival, financial close, CRM update, notification, and knowledge capture.
      inputParameters:
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      - name: box_folder_id
        in: body
        type: string
        description: The Box folder ID for archival.
      - name: teams_channel_id
        in: body
        type: string
        description: The Teams channel for notification.
      steps:
      - name: archive-docs
        type: call
        call: box.lock-folder
        with:
          folder_id: '{{box_folder_id}}'
          lock_type: archive
      - name: close-oracle-project
        type: call
        call: oracle-ebs.close-project
        with:
          project_number: '{{project_number}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          stage: Closed Won
      - name: create-lessons-page
        type: call
        call: confluence.create-page
        with:
          space_key: PM
          title: 'Lessons Learned: Project {{project_number}}'
          body: 'Project {{project_number}} closed on {{close-oracle-project.close_date}}. Final cost: ${{close-oracle-project.final_cost}}. Template for team retrospective.'
      - name: notify-stakeholders
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Project {{project_number}} closed. Documents archived. Lessons learned: {{create-lessons-page.url}}'
  consumes:
  - 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}}
      inputParameters:
      - name: folder_id
        in: path
      operations:
      - name: lock-folder
        method: PUT
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: projects
      path: /{{project_number}}/close
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: close-project
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://aecom.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://aecom.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: post-channel-message
        method: POST
Open in Framework → View in Fleet → project-closeout-orchestrator.yml

Retrieves Datadog monitor status for AECOM infrastructure.

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

Creates a new Slack channel for a project, invites key team members retrieved from Workday, and posts an initial message with project links from SharePoint and Jira.

naftiko: '0.5'
info:
  label: Slack Project Channel Setup
  description: Creates a new Slack channel for a project, invites key team members retrieved from Workday, and posts an initial message with project links from SharePoint and Jira.
  tags:
  - collaboration
  - slack
  - workday
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: project-collaboration
    port: 8080
    tools:
    - name: setup-project-channel
      description: Create a Slack project channel, invite team members from Workday, and post initial project links.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The project name for the channel.
      - name: project_lead_id
        in: body
        type: string
        description: The Workday worker ID of the project lead.
      - name: sharepoint_url
        in: body
        type: string
        description: The SharePoint project site URL.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key.
      steps:
      - name: get-lead
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{project_lead_id}}'
      - name: create-channel
        type: call
        call: slack.create-channel
        with:
          name: proj-{{project_name}}
      - name: invite-lead
        type: call
        call: slack.invite-to-channel
        with:
          channel_id: '{{create-channel.channel_id}}'
          user_email: '{{get-lead.work_email}}'
      - name: post-welcome
        type: call
        call: slack.send-message
        with:
          channel: '{{create-channel.channel_id}}'
          text: 'Welcome to {{project_name}}! Lead: {{get-lead.full_name}}. SharePoint: {{sharepoint_url}}. Jira: https://aecom.atlassian.net/browse/{{jira_project_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: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: channels
      path: /conversations.create
      operations:
      - name: create-channel
        method: POST
    - name: invitations
      path: /conversations.invite
      operations:
      - name: invite-to-channel
        method: POST
    - name: messages
      path: /chat.postMessage
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → slack-project-channel-setup.yml

Queries Grafana dashboard data for AECOM monitoring.

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

Geocodes a project site address using Google Maps API, returning latitude, longitude, and formatted address for use in GIS and environmental assessments.

naftiko: '0.5'
info:
  label: Google Maps Geocoding Lookup
  description: Geocodes a project site address using Google Maps API, returning latitude, longitude, and formatted address for use in GIS and environmental assessments.
  tags:
  - geospatial
  - google-maps
  - environmental
capability:
  exposes:
  - type: mcp
    namespace: geospatial
    port: 8080
    tools:
    - name: geocode-address
      description: Geocode a project site address and return coordinates.
      inputParameters:
      - name: address
        in: body
        type: string
        description: The street address of the project site.
      call: googlemaps.geocode
      with:
        address: '{{address}}'
      outputParameters:
      - name: latitude
        type: string
        mapping: $.results[0].geometry.location.lat
      - name: longitude
        type: string
        mapping: $.results[0].geometry.location.lng
      - name: formatted_address
        type: string
        mapping: $.results[0].formatted_address
  consumes:
  - type: http
    namespace: googlemaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: apiKey
      name: key
      in: query
      value: $secrets.google_maps_api_key
    resources:
    - name: geocode
      path: /geocode/json?address={{address}}
      inputParameters:
      - name: address
        in: query
      operations:
      - name: geocode
        method: GET
Open in Framework → View in Fleet → google-maps-geocoding-lookup.yml

When an RFI is created in Autodesk BIM 360, logs a Jira issue for engineering review, uploads reference documents to SharePoint, and notifies the design lead in Microsoft Teams.

naftiko: '0.5'
info:
  label: Engineering RFI Orchestrator
  description: When an RFI is created in Autodesk BIM 360, logs a Jira issue for engineering review, uploads reference documents to SharePoint, and notifies the design lead in Microsoft Teams.
  tags:
  - engineering
  - autodesk
  - jira
  - sharepoint
  - microsoft-teams
  - rfi
capability:
  exposes:
  - type: mcp
    namespace: rfi-management
    port: 8080
    tools:
    - name: process-rfi
      description: Given an RFI from BIM 360, create a Jira tracking issue, upload reference docs to SharePoint, and notify the design lead via Teams.
      inputParameters:
      - name: bim360_project_id
        in: body
        type: string
        description: The BIM 360 project identifier.
      - name: rfi_id
        in: body
        type: string
        description: The BIM 360 RFI identifier.
      - name: design_lead_email
        in: body
        type: string
        description: The email of the design lead to notify.
      steps:
      - name: get-rfi
        type: call
        call: autodesk.get-rfi
        with:
          project_id: '{{bim360_project_id}}'
          rfi_id: '{{rfi_id}}'
      - name: create-jira-issue
        type: call
        call: jira.create-issue
        with:
          project_key: ENGR
          summary: 'RFI: {{get-rfi.title}}'
          description: 'RFI from BIM 360: {{get-rfi.description}}. Due: {{get-rfi.due_date}}'
          issue_type: Task
      - name: upload-reference
        type: call
        call: sharepoint.upload-file
        with:
          site_id: engineering_rfi_site
          folder_path: RFIs/{{get-rfi.rfi_number}}
          file_name: '{{get-rfi.attachment_name}}'
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{design_lead_email}}'
          text: 'New RFI requires review: {{get-rfi.title}} ({{get-rfi.rfi_number}}). Jira: {{create-jira-issue.key}}. Docs: {{upload-reference.url}}'
  consumes:
  - type: http
    namespace: autodesk
    baseUri: https://developer.api.autodesk.com/bim360/rfis/v2/containers
    authentication:
      type: bearer
      token: $secrets.autodesk_token
    resources:
    - name: rfis
      path: /{{project_id}}/rfis/{{rfi_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: rfi_id
        in: path
      operations:
      - name: get-rfi
        method: GET
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → engineering-rfi-orchestrator.yml

Assembles design package from Confluence, routes for client review in Jira, tracks comments, creates revisions, and notifies design leads.

naftiko: '0.5'
info:
  label: Design Review Submission Pipeline
  description: Assembles design package from Confluence, routes for client review in Jira, tracks comments, creates revisions, and notifies design leads.
  tags:
  - engineering
  - confluence
  - jira
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: design_review_submission_pipeline
      description: Orchestrate design review submission 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:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://aecom.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://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → design-review-submission-pipeline.yml

Analyzes resource needs from Jira, checks availability in Workday, creates staffing requests, updates project plans, and notifies managers.

naftiko: '0.5'
info:
  label: Project Resource Planning Pipeline
  description: Analyzes resource needs from Jira, checks availability in Workday, creates staffing requests, updates project plans, and notifies managers.
  tags:
  - resource-planning
  - jira
  - workday
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: resource-planning
    port: 8080
    tools:
    - name: project_resource_planning_pipeline
      description: Orchestrate project resource planning 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-workday
        type: call
        call: workday.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.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: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/aecom
    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://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → project-resource-planning-pipeline.yml

Retrieves MATLAB simulation output from Amazon S3, creates a summary page in Confluence, uploads the raw data to SharePoint, and notifies the engineering team via Slack.

naftiko: '0.5'
info:
  label: MATLAB Simulation Results Publisher
  description: Retrieves MATLAB simulation output from Amazon S3, creates a summary page in Confluence, uploads the raw data to SharePoint, and notifies the engineering team via Slack.
  tags:
  - engineering
  - matlab
  - amazon-s3
  - confluence
  - sharepoint
  - slack
capability:
  exposes:
  - type: mcp
    namespace: simulation-publishing
    port: 8080
    tools:
    - name: publish-simulation-results
      description: Retrieve MATLAB results from S3, create a Confluence summary, archive to SharePoint, and notify the team.
      inputParameters:
      - name: s3_bucket
        in: body
        type: string
        description: The S3 bucket name.
      - name: s3_key
        in: body
        type: string
        description: The S3 object key for the results file.
      - name: project_code
        in: body
        type: string
        description: The AECOM project code.
      steps:
      - name: get-results
        type: call
        call: s3.get-object
        with:
          bucket: '{{s3_bucket}}'
          key: '{{s3_key}}'
      - name: create-summary
        type: call
        call: confluence.create-page
        with:
          space_key: ENGR
          title: 'Simulation Results: {{project_code}} - {{s3_key}}'
          body: 'MATLAB simulation completed. File: {{s3_key}}. Size: {{get-results.content_length}}. Last modified: {{get-results.last_modified}}.'
      - name: archive-to-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: engineering_archive
          folder_path: Simulations/{{project_code}}
          file_name: '{{s3_key}}'
      - name: notify-team
        type: call
        call: slack.send-message
        with:
          channel: engineering-simulations
          text: 'MATLAB simulation results published for {{project_code}}. Confluence: {{create-summary.url}}. Archive: {{archive-to-sharepoint.url}}'
  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
  - type: http
    namespace: confluence
    baseUri: https://aecom.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: 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: send-message
        method: POST
Open in Framework → View in Fleet → matlab-simulation-results-publisher.yml

Retrieves the details of a ServiceNow incident by number, returning current state, priority, assigned group, and short description for infrastructure IT support.

naftiko: '0.5'
info:
  label: ServiceNow Incident Lookup
  description: Retrieves the details of a ServiceNow incident by number, returning current state, priority, assigned group, and short description for infrastructure IT support.
  tags:
  - it-support
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-service-management
    port: 8080
    tools:
    - name: get-incident
      description: Look up a ServiceNow incident by number and return its details.
      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
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-lookup.yml

Collects bid requirements from Salesforce, assembles cost estimates from Oracle, generates proposal in Confluence, and notifies bid team.

naftiko: '0.5'
info:
  label: Bid Proposal Assembly Pipeline
  description: Collects bid requirements from Salesforce, assembles cost estimates from Oracle, generates proposal in Confluence, and notifies bid team.
  tags:
  - bidding
  - salesforce
  - oracle
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: bidding
    port: 8080
    tools:
    - name: bid_proposal_assembly_pipeline
      description: Orchestrate bid proposal assembly pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-salesforce
        type: call
        call: salesforce.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-oracle
        type: call
        call: oracle.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-confluence
        type: call
        call: confluence.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://aecom.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: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → bid-proposal-assembly-pipeline.yml

Monitors equipment locations and usage from SAP, analyzes utilization in Snowflake, creates maintenance tasks in ServiceNow, and notifies ops.

naftiko: '0.5'
info:
  label: Field Equipment Tracking Pipeline
  description: Monitors equipment locations and usage from SAP, analyzes utilization in Snowflake, creates maintenance tasks in ServiceNow, and notifies ops.
  tags:
  - equipment
  - sap
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: equipment
    port: 8080
    tools:
    - name: field_equipment_tracking_pipeline
      description: Orchestrate field equipment tracking pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://aecom-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → field-equipment-tracking-pipeline.yml

Triggers a Terraform deployment through Azure DevOps, monitors the pipeline run, logs the result in ServiceNow as a change record, and notifies the DevOps team in Slack.

naftiko: '0.5'
info:
  label: Infrastructure Terraform Deployment Pipeline
  description: Triggers a Terraform deployment through Azure DevOps, monitors the pipeline run, logs the result in ServiceNow as a change record, and notifies the DevOps team in Slack.
  tags:
  - infrastructure
  - azure-devops
  - servicenow
  - slack
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: infra-deployment
    port: 8080
    tools:
    - name: deploy-infrastructure
      description: Trigger a Terraform deployment via Azure DevOps, log the change in ServiceNow, and notify the team.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Azure DevOps pipeline definition ID.
      - name: environment
        in: body
        type: string
        description: Target environment (dev, staging, production).
      - name: change_description
        in: body
        type: string
        description: Description of the infrastructure change.
      steps:
      - name: trigger-pipeline
        type: call
        call: azuredevops.queue-build
        with:
          definition_id: '{{pipeline_id}}'
          parameters: '{"environment": "{{environment}}"}'
      - name: create-change-record
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Terraform deployment: {{change_description}}'
          category: infrastructure
          environment: '{{environment}}'
          build_id: '{{trigger-pipeline.build_id}}'
      - name: notify-devops
        type: call
        call: slack.send-message
        with:
          channel: infra-deployments
          text: 'Terraform deployment triggered for {{environment}}. Build: {{trigger-pipeline.build_number}}. Change: {{create-change-record.number}}. Description: {{change_description}}'
  consumes:
  - type: http
    namespace: azuredevops
    baseUri: https://dev.azure.com/aecom
    authentication:
      type: basic
      username: $secrets.azdo_user
      password: $secrets.azdo_pat
    resources:
    - name: builds
      path: /infrastructure/_apis/build/builds?api-version=7.0
      operations:
      - name: queue-build
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → infrastructure-terraform-deployment-pipeline.yml

Monitors project costs in Oracle EBS, detects overruns in Snowflake, creates alerts in Jira, updates Power BI dashboards, and notifies project managers.

naftiko: '0.5'
info:
  label: Project Cost Overrun Detector
  description: Monitors project costs in Oracle EBS, detects overruns in Snowflake, creates alerts in Jira, updates Power BI dashboards, and notifies project managers.
  tags:
  - project-management
  - oracle
  - snowflake
  - jira
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: project-management
    port: 8080
    tools:
    - name: project_cost_overrun_detector
      description: Orchestrate project cost overrun detector workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → project-cost-overrun-detector.yml

Reads a Jira epic and its child issues, creates corresponding Asana tasks for non-technical stakeholders, and sends a Slack summary to the project channel.

naftiko: '0.5'
info:
  label: Asana Task Assignment from Jira Epic
  description: Reads a Jira epic and its child issues, creates corresponding Asana tasks for non-technical stakeholders, and sends a Slack summary to the project channel.
  tags:
  - project-management
  - jira
  - asana
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cross-platform-tasks
    port: 8080
    tools:
    - name: sync-epic-to-asana
      description: Pull a Jira epic with children, create Asana tasks, and notify via Slack.
      inputParameters:
      - name: epic_key
        in: body
        type: string
        description: The Jira epic issue key.
      - name: asana_project_gid
        in: body
        type: string
        description: The Asana project GID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel name.
      steps:
      - name: get-epic
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{epic_key}}'
      - name: create-asana-task
        type: call
        call: asana.create-task
        with:
          project_gid: '{{asana_project_gid}}'
          name: '{{get-epic.summary}}'
          notes: 'From Jira: {{epic_key}}. Status: {{get-epic.status}}. Priority: {{get-epic.priority}}.'
      - name: notify-channel
        type: call
        call: slack.send-message
        with:
          channel: '{{slack_channel}}'
          text: 'Jira epic {{epic_key}} synced to Asana. Task: {{create-asana-task.url}}. Status: {{get-epic.status}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.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: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → asana-task-assignment-from-jira-epic.yml

Aggregates daily construction progress from Autodesk BIM 360 field data, updates the project cost tracker in Oracle EBS, generates a Power BI report refresh, and posts a summary to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Daily Construction Progress Reporter
  description: Aggregates daily construction progress from Autodesk BIM 360 field data, updates the project cost tracker in Oracle EBS, generates a Power BI report refresh, and posts a summary to a Microsoft Teams channel.
  tags:
  - construction
  - autodesk
  - oracle-e-business-suite
  - power-bi
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: construction-reporting
    port: 8080
    tools:
    - name: generate-daily-report
      description: Collect daily field data, update costs, refresh BI report, and post summary to the project Teams channel.
      inputParameters:
      - name: bim360_project_id
        in: body
        type: string
        description: The BIM 360 project identifier.
      - name: oracle_project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: powerbi_dataset_id
        in: body
        type: string
        description: The Power BI dataset identifier.
      - name: teams_channel_id
        in: body
        type: string
        description: The Microsoft Teams channel ID for posting.
      steps:
      - name: get-field-data
        type: call
        call: autodesk.get-daily-log
        with:
          project_id: '{{bim360_project_id}}'
      - name: update-costs
        type: call
        call: oracle-ebs.update-project-costs
        with:
          project_number: '{{oracle_project_number}}'
          labor_hours: '{{get-field-data.total_labor_hours}}'
          equipment_hours: '{{get-field-data.equipment_hours}}'
      - name: refresh-report
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{powerbi_dataset_id}}'
      - name: post-summary
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Daily Progress: {{get-field-data.percent_complete}}% complete. Labor: {{get-field-data.total_labor_hours}} hrs. Weather: {{get-field-data.weather_conditions}}. Issues: {{get-field-data.open_issues_count}}.'
  consumes:
  - type: http
    namespace: autodesk
    baseUri: https://developer.api.autodesk.com/bim360/docs/v1/projects
    authentication:
      type: bearer
      token: $secrets.autodesk_token
    resources:
    - name: daily-logs
      path: /{{project_id}}/daily-logs
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-daily-log
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: project-costs
      path: /costs/{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: update-project-costs
        method: PATCH
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: 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: post-channel-message
        method: POST
Open in Framework → View in Fleet → daily-construction-progress-reporter.yml

Fetches the latest version metadata of an AutoCAD drawing stored in Autodesk BIM 360, including revision number, last modified date, and author.

naftiko: '0.5'
info:
  label: AutoCAD Drawing Version Retrieval
  description: Fetches the latest version metadata of an AutoCAD drawing stored in Autodesk BIM 360, including revision number, last modified date, and author.
  tags:
  - engineering
  - autocad
  - autodesk
capability:
  exposes:
  - type: mcp
    namespace: cad-management
    port: 8080
    tools:
    - name: get-drawing-version
      description: Retrieve the latest revision metadata of an AutoCAD drawing from Autodesk BIM 360 by item ID.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The BIM 360 project identifier.
      - name: item_id
        in: body
        type: string
        description: The drawing item identifier in BIM 360.
      call: autodesk.get-item-versions
      with:
        project_id: '{{project_id}}'
        item_id: '{{item_id}}'
      outputParameters:
      - name: version_number
        type: string
        mapping: $.data[0].attributes.versionNumber
      - name: last_modified
        type: string
        mapping: $.data[0].attributes.lastModifiedTime
      - name: author
        type: string
        mapping: $.data[0].attributes.lastModifiedUserName
  consumes:
  - type: http
    namespace: autodesk
    baseUri: https://developer.api.autodesk.com/data/v1/projects
    authentication:
      type: bearer
      token: $secrets.autodesk_token
    resources:
    - name: item-versions
      path: /{{project_id}}/items/{{item_id}}/versions
      inputParameters:
      - name: project_id
        in: path
      - name: item_id
        in: path
      operations:
      - name: get-item-versions
        method: GET
Open in Framework → View in Fleet → autocad-drawing-version-retrieval.yml

Generates a client invoice by pulling billable hours from Oracle EBS, creating the invoice document in Google Docs, uploading to SharePoint, updating the Salesforce opportunity, and emailing the client via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Client Invoice Generation Pipeline
  description: Generates a client invoice by pulling billable hours from Oracle EBS, creating the invoice document in Google Docs, uploading to SharePoint, updating the Salesforce opportunity, and emailing the client via Microsoft Outlook.
  tags:
  - finance
  - oracle-e-business-suite
  - google-docs
  - sharepoint
  - salesforce
  - microsoft-outlook
  - invoicing
capability:
  exposes:
  - type: mcp
    namespace: invoicing
    port: 8080
    tools:
    - name: generate-client-invoice
      description: Pull billable data, create invoice, upload, update CRM, and email client.
      inputParameters:
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      - name: client_email
        in: body
        type: string
        description: The client contact email.
      - name: billing_period
        in: body
        type: string
        description: The billing period (e.g., 2026-Q1).
      steps:
      - name: get-billable-data
        type: call
        call: oracle-ebs.get-billable-hours
        with:
          project_number: '{{project_number}}'
          period: '{{billing_period}}'
      - name: create-invoice-doc
        type: call
        call: googledocs.create-document
        with:
          title: 'Invoice: {{project_number}} - {{billing_period}}'
          body: 'Billable hours: {{get-billable-data.total_hours}}. Amount: ${{get-billable-data.total_amount}}. Period: {{billing_period}}.'
      - name: upload-invoice
        type: call
        call: sharepoint.upload-file
        with:
          site_id: finance_invoices
          folder_path: Invoices/{{project_number}}
          file_name: invoice_{{billing_period}}.pdf
      - name: update-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          last_invoice_date: '{{billing_period}}'
          invoiced_amount: '{{get-billable-data.total_amount}}'
      - name: email-client
        type: call
        call: outlook.send-mail
        with:
          to: '{{client_email}}'
          subject: 'Invoice: Project {{project_number}} - {{billing_period}}'
          body: 'Please find attached the invoice for {{billing_period}}. Total: ${{get-billable-data.total_amount}}. Document: {{upload-invoice.url}}'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: billable
      path: /billable-hours/{{project_number}}?period={{period}}
      inputParameters:
      - name: project_number
        in: path
      - name: period
        in: query
      operations:
      - name: get-billable-hours
        method: GET
  - type: http
    namespace: googledocs
    baseUri: https://docs.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_docs_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: 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: salesforce
    baseUri: https://aecom.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → client-invoice-generation-pipeline.yml

Retrieves PagerDuty incident details for AECOM on-call teams.

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

Exports a Sparx Enterprise Architect model package as a document, uploads it to SharePoint, and logs the export event in Jira.

naftiko: '0.5'
info:
  label: Sparx Enterprise Architect Model Export
  description: Exports a Sparx Enterprise Architect model package as a document, uploads it to SharePoint, and logs the export event in Jira.
  tags:
  - engineering
  - sparx-enterprise-architect
  - sharepoint
  - jira
  - systems-engineering
capability:
  exposes:
  - type: mcp
    namespace: model-management
    port: 8080
    tools:
    - name: export-ea-model
      description: Export a Sparx EA model, upload to SharePoint, and log in Jira.
      inputParameters:
      - name: model_id
        in: body
        type: string
        description: The Sparx EA model identifier.
      - name: package_guid
        in: body
        type: string
        description: The package GUID to export.
      - name: project_code
        in: body
        type: string
        description: The AECOM project code.
      steps:
      - name: export-model
        type: call
        call: sparxea.export-package
        with:
          model_id: '{{model_id}}'
          package_guid: '{{package_guid}}'
      - name: upload-export
        type: call
        call: sharepoint.upload-file
        with:
          site_id: engineering_models
          folder_path: Exports/{{project_code}}
          file_name: '{{export-model.file_name}}'
      - name: log-export
        type: call
        call: jira.create-issue
        with:
          project_key: ENGR
          summary: 'Model export: {{export-model.package_name}}'
          description: 'Package {{package_guid}} exported. File: {{upload-export.url}}. Version: {{export-model.version}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: sparxea
    baseUri: https://aecom-ea.azurewebsites.net/api/v1
    authentication:
      type: bearer
      token: $secrets.sparxea_token
    resources:
    - name: packages
      path: /models/{{model_id}}/packages/{{package_guid}}/export
      inputParameters:
      - name: model_id
        in: path
      - name: package_guid
        in: path
      operations:
      - name: export-package
        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: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sparx-enterprise-architect-model-export.yml

Collects risks from Jira, scores in Snowflake, updates risk matrix in Power BI, creates mitigation tasks, and notifies project leadership.

naftiko: '0.5'
info:
  label: Project Risk Register Pipeline
  description: Collects risks from Jira, scores in Snowflake, updates risk matrix in Power BI, creates mitigation tasks, and notifies project leadership.
  tags:
  - risk
  - jira
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: risk
    port: 8080
    tools:
    - name: project_risk_register_pipeline
      description: Orchestrate project risk register 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-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.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: snowflake
    baseUri: https://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → project-risk-register-pipeline.yml

Retrieves a document from SharePoint, sends the content to OpenAI for summarization, posts the summary to a Confluence page, and notifies the requestor via Slack.

naftiko: '0.5'
info:
  label: OpenAI Document Summarizer
  description: Retrieves a document from SharePoint, sends the content to OpenAI for summarization, posts the summary to a Confluence page, and notifies the requestor via Slack.
  tags:
  - artificial-intelligence
  - openai
  - sharepoint
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ai-document-processing
    port: 8080
    tools:
    - name: summarize-document
      description: Retrieve a document from SharePoint, summarize via OpenAI, publish to Confluence, and notify.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site identifier.
      - name: file_path
        in: body
        type: string
        description: The path to the document.
      - name: requestor_email
        in: body
        type: string
        description: The requestor Slack email.
      steps:
      - name: get-document
        type: call
        call: sharepoint.get-file-content
        with:
          site_id: '{{site_id}}'
          file_path: '{{file_path}}'
      - name: summarize
        type: call
        call: openai.create-completion
        with:
          model: gpt-4
          prompt: 'Summarize the following engineering document in 3-5 bullet points: {{get-document.content}}'
      - name: publish-summary
        type: call
        call: confluence.create-page
        with:
          space_key: DOCS
          title: 'Summary: {{file_path}}'
          body: '{{summarize.text}}'
      - name: notify-requestor
        type: call
        call: slack.send-message
        with:
          channel: document-summaries
          text: 'Document summarized: {{file_path}}. Summary: {{publish-summary.url}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: file-content
      path: /{{site_id}}/drive/root:/{{file_path}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file-content
        method: GET
  - type: http
    namespace: 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://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → openai-document-summarizer.yml

Routes AutoCAD drawings for review, tracks approvals in Jira, stores final versions in SharePoint, logs in ServiceNow, and notifies design team.

naftiko: '0.5'
info:
  label: Engineering Drawing Approval Workflow
  description: Routes AutoCAD drawings for review, tracks approvals in Jira, stores final versions in SharePoint, logs in ServiceNow, and notifies design team.
  tags:
  - engineering
  - jira
  - servicenow
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: engineering_drawing_approval_workflow
      description: Orchestrate engineering drawing approval workflow workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-confluence
        type: call
        call: confluence.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → engineering-drawing-approval-workflow.yml

Collects safety incident reports, validates against OSHA requirements, creates investigations in ServiceNow, updates dashboards, and alerts safety team.

naftiko: '0.5'
info:
  label: Construction Site Safety Pipeline
  description: Collects safety incident reports, validates against OSHA requirements, creates investigations in ServiceNow, updates dashboards, and alerts safety team.
  tags:
  - safety
  - servicenow
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: safety
    port: 8080
    tools:
    - name: construction_site_safety_pipeline
      description: Orchestrate construction site safety pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → construction-site-safety-pipeline.yml

Exports a Figma design file as an image, uploads it to SharePoint for engineering reference, and posts the link to a Slack channel.

naftiko: '0.5'
info:
  label: Figma Design Asset Export
  description: Exports a Figma design file as an image, uploads it to SharePoint for engineering reference, and posts the link to a Slack channel.
  tags:
  - design
  - figma
  - sharepoint
  - slack
capability:
  exposes:
  - type: mcp
    namespace: design-assets
    port: 8080
    tools:
    - name: export-figma-design
      description: Export a Figma file image, upload to SharePoint, and notify via Slack.
      inputParameters:
      - name: file_key
        in: body
        type: string
        description: The Figma file key.
      - name: node_id
        in: body
        type: string
        description: The specific node ID to export.
      - name: project_code
        in: body
        type: string
        description: The AECOM project code.
      steps:
      - name: export-image
        type: call
        call: figma.get-image
        with:
          file_key: '{{file_key}}'
          node_id: '{{node_id}}'
      - name: upload-to-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: design_assets
          folder_path: Exports/{{project_code}}
          file_name: '{{node_id}}.png'
      - name: notify-team
        type: call
        call: slack.send-message
        with:
          channel: design-reviews
          text: 'Figma design exported for {{project_code}}. Image: {{export-image.image_url}}. SharePoint: {{upload-to-sharepoint.url}}'
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: images
      path: /images/{{file_key}}?ids={{node_id}}
      inputParameters:
      - name: file_key
        in: path
      - name: node_id
        in: query
      operations:
      - name: get-image
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → figma-design-asset-export.yml

Collects field progress data, compares against baseline schedule in Oracle, updates Snowflake analytics, refreshes dashboards, and alerts management.

naftiko: '0.5'
info:
  label: Construction Progress Monitoring
  description: Collects field progress data, compares against baseline schedule in Oracle, updates Snowflake analytics, refreshes dashboards, and alerts management.
  tags:
  - construction
  - oracle
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: construction
    port: 8080
    tools:
    - name: construction_progress_monitoring
      description: Orchestrate construction progress monitoring workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → construction-progress-monitoring.yml

For a given project site, geocodes the address via Google Maps, runs an environmental data query against the EPA API, logs findings to Confluence, and creates a Jira task for the environmental team.

naftiko: '0.5'
info:
  label: Environmental Compliance Assessment Orchestrator
  description: For a given project site, geocodes the address via Google Maps, runs an environmental data query against the EPA API, logs findings to Confluence, and creates a Jira task for the environmental team.
  tags:
  - environmental
  - google-maps
  - confluence
  - jira
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: environmental-compliance
    port: 8080
    tools:
    - name: assess-site-compliance
      description: Given a site address, geocode it, query EPA environmental data, document findings in Confluence, and create a Jira task for review.
      inputParameters:
      - name: site_address
        in: body
        type: string
        description: The street address of the project site.
      - name: project_code
        in: body
        type: string
        description: The internal AECOM project code.
      steps:
      - name: geocode-site
        type: call
        call: googlemaps.geocode
        with:
          address: '{{site_address}}'
      - name: query-epa
        type: call
        call: epa.get-facility-info
        with:
          latitude: '{{geocode-site.latitude}}'
          longitude: '{{geocode-site.longitude}}'
      - name: create-findings-page
        type: call
        call: confluence.create-page
        with:
          space_key: ENV
          title: 'Environmental Assessment: {{project_code}} - {{site_address}}'
          body: 'Site coordinates: {{geocode-site.latitude}}, {{geocode-site.longitude}}. EPA facilities within radius: {{query-epa.facility_count}}. Nearest regulated site: {{query-epa.nearest_facility_name}}.'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          project_key: ENV
          summary: 'Environmental review: {{project_code}}'
          description: 'Review EPA findings for {{site_address}}. Confluence page: {{create-findings-page.url}}. Facilities found: {{query-epa.facility_count}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: googlemaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: apiKey
      name: key
      in: query
      value: $secrets.google_maps_api_key
    resources:
    - name: geocode
      path: /geocode/json?address={{address}}
      inputParameters:
      - name: address
        in: query
      operations:
      - name: geocode
        method: GET
  - type: http
    namespace: epa
    baseUri: https://enviro.epa.gov/enviro/efservice
    authentication:
      type: apiKey
      name: api_key
      in: query
      value: $secrets.epa_api_key
    resources:
    - name: facilities
      path: /FACILITY_SEARCH/LATITUDE/{{latitude}}/LONGITUDE/{{longitude}}/JSON
      inputParameters:
      - name: latitude
        in: path
      - name: longitude
        in: path
      operations:
      - name: get-facility-info
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://aecom.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://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → environmental-compliance-assessment-orchestrator.yml

Retrieves Okta user profile for AECOM identity management.

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

Runs BIM clash detection, logs findings in Jira, tracks resolution progress, updates Confluence reports, and notifies design leads.

naftiko: '0.5'
info:
  label: Design Clash Detection Pipeline
  description: Runs BIM clash detection, logs findings in Jira, tracks resolution progress, updates Confluence reports, and notifies design leads.
  tags:
  - engineering
  - jira
  - confluence
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: design_clash_detection_pipeline
      description: Orchestrate design clash detection 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:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.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://aecom.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: snowflake
    baseUri: https://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → design-clash-detection-pipeline.yml

Schedules preventive maintenance for construction equipment by retrieving asset data from ServiceNow CMDB, creating a maintenance work order, assigning to a technician via Jira, and notifying the field supervisor via Microsoft Teams.

naftiko: '0.5'
info:
  label: Equipment Maintenance Scheduler
  description: Schedules preventive maintenance for construction equipment by retrieving asset data from ServiceNow CMDB, creating a maintenance work order, assigning to a technician via Jira, and notifying the field supervisor via Microsoft Teams.
  tags:
  - construction
  - servicenow
  - jira
  - microsoft-teams
  - maintenance
  - equipment
capability:
  exposes:
  - type: mcp
    namespace: equipment-maintenance
    port: 8080
    tools:
    - name: schedule-maintenance
      description: Retrieve equipment data, create a maintenance work order, assign to a technician, and notify the supervisor.
      inputParameters:
      - name: asset_id
        in: body
        type: string
        description: The ServiceNow CMDB asset identifier.
      - name: maintenance_type
        in: body
        type: string
        description: The type of maintenance (preventive, corrective, inspection).
      - name: supervisor_email
        in: body
        type: string
        description: The field supervisor email.
      steps:
      - name: get-asset
        type: call
        call: servicenow.get-asset
        with:
          asset_id: '{{asset_id}}'
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          asset_id: '{{asset_id}}'
          description: '{{maintenance_type}} maintenance for {{get-asset.name}} ({{get-asset.model}})'
          priority: medium
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project_key: MAINT
          summary: '{{maintenance_type}}: {{get-asset.name}}'
          description: 'Work Order: {{create-work-order.number}}. Asset: {{get-asset.name}} ({{get-asset.serial_number}}). Location: {{get-asset.location}}.'
          issue_type: Task
      - name: notify-supervisor
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{supervisor_email}}'
          text: 'Maintenance scheduled: {{maintenance_type}} for {{get-asset.name}}. Work Order: {{create-work-order.number}}. Jira: {{create-task.key}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: assets
      path: /table/cmdb_ci/{{asset_id}}
      inputParameters:
      - name: asset_id
        in: path
      operations:
      - name: get-asset
        method: GET
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → equipment-maintenance-scheduler.yml

Processes contractor timesheets by retrieving hours from Oracle EBS, validating against the project budget, creating an approval task in Jira, and notifying the project manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Contractor Timesheet Approval Workflow
  description: Processes contractor timesheets by retrieving hours from Oracle EBS, validating against the project budget, creating an approval task in Jira, and notifying the project manager via Microsoft Teams.
  tags:
  - construction
  - oracle-e-business-suite
  - jira
  - microsoft-teams
  - timesheet
capability:
  exposes:
  - type: mcp
    namespace: timesheet-management
    port: 8080
    tools:
    - name: process-contractor-timesheet
      description: Retrieve timesheet data, validate against budget, create approval task, and notify PM.
      inputParameters:
      - name: contractor_id
        in: body
        type: string
        description: The contractor identifier in Oracle EBS.
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: week_ending
        in: body
        type: string
        description: The week ending date (YYYY-MM-DD).
      - name: pm_email
        in: body
        type: string
        description: The project manager email.
      steps:
      - name: get-timesheet
        type: call
        call: oracle-ebs.get-timesheet
        with:
          contractor_id: '{{contractor_id}}'
          project_number: '{{project_number}}'
          week_ending: '{{week_ending}}'
      - name: get-budget
        type: call
        call: oracle-ebs.get-project-costs
        with:
          project_number: '{{project_number}}'
      - name: create-approval-task
        type: call
        call: jira.create-issue
        with:
          project_key: CONSTR
          summary: 'Timesheet approval: {{get-timesheet.contractor_name}} - W/E {{week_ending}}'
          description: 'Hours: {{get-timesheet.total_hours}}. Cost: ${{get-timesheet.total_cost}}. Budget remaining: ${{get-budget.travel_budget_remaining}}.'
          issue_type: Task
      - name: notify-pm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{pm_email}}'
          text: 'Timesheet pending approval: {{get-timesheet.contractor_name}}, {{get-timesheet.total_hours}} hrs (${{get-timesheet.total_cost}}) for W/E {{week_ending}}. Jira: {{create-approval-task.key}}'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: timesheets
      path: /timesheets?contractor={{contractor_id}}&project={{project_number}}&weekEnding={{week_ending}}
      inputParameters:
      - name: contractor_id
        in: query
      - name: project_number
        in: query
      - name: week_ending
        in: query
      operations:
      - name: get-timesheet
        method: GET
    - name: project-costs
      path: /costs/{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → contractor-timesheet-approval-workflow.yml

Collects energy consumption data from building management systems, calculates carbon footprint metrics, stores results in Azure Databricks, and publishes a sustainability report to Confluence.

naftiko: '0.5'
info:
  label: Sustainability Metrics Collector
  description: Collects energy consumption data from building management systems, calculates carbon footprint metrics, stores results in Azure Databricks, and publishes a sustainability report to Confluence.
  tags:
  - sustainability
  - azure-databricks
  - confluence
  - environmental
  - energy-management
capability:
  exposes:
  - type: mcp
    namespace: sustainability-reporting
    port: 8080
    tools:
    - name: collect-sustainability-metrics
      description: Gather energy data, compute carbon metrics, store in Databricks, and publish report.
      inputParameters:
      - name: building_id
        in: body
        type: string
        description: The building management system identifier.
      - name: reporting_period
        in: body
        type: string
        description: The reporting period (e.g., 2026-Q1).
      - name: project_code
        in: body
        type: string
        description: The AECOM project code.
      steps:
      - name: get-energy-data
        type: call
        call: bms-api.get-consumption
        with:
          building_id: '{{building_id}}'
          period: '{{reporting_period}}'
      - name: store-metrics
        type: call
        call: databricks.run-notebook
        with:
          notebook_path: /sustainability/carbon_calculator
          parameters: '{"energy_kwh": "{{get-energy-data.total_kwh}}", "building_id": "{{building_id}}"}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: SUSTAIN
          title: 'Sustainability Report: {{project_code}} - {{reporting_period}}'
          body: 'Building: {{building_id}}. Energy: {{get-energy-data.total_kwh}} kWh. Carbon: {{store-metrics.carbon_tonnes}} tonnes CO2e. Period: {{reporting_period}}.'
  consumes:
  - type: http
    namespace: bms-api
    baseUri: https://aecom-bms.azurewebsites.net/api/v1
    authentication:
      type: bearer
      token: $secrets.bms_api_token
    resources:
    - name: consumption
      path: /buildings/{{building_id}}/consumption?period={{period}}
      inputParameters:
      - name: building_id
        in: path
      - name: period
        in: query
      operations:
      - name: get-consumption
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adb-aecom.azuredatabricks.net/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: confluence
    baseUri: https://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → sustainability-metrics-collector.yml

Generates a project cost report by pulling data from Oracle EBS, writing to a Google Sheets workbook, exporting as Excel, uploading to SharePoint, and emailing via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Microsoft Excel Cost Report Generator
  description: Generates a project cost report by pulling data from Oracle EBS, writing to a Google Sheets workbook, exporting as Excel, uploading to SharePoint, and emailing via Microsoft Outlook.
  tags:
  - finance
  - oracle-e-business-suite
  - google-sheets
  - sharepoint
  - microsoft-outlook
  - microsoft-excel
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: cost-reporting
    port: 8080
    tools:
    - name: generate-cost-report
      description: Pull cost data from Oracle EBS, write to Google Sheets, upload to SharePoint, and email the report.
      inputParameters:
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID for the template.
      - name: recipient_email
        in: body
        type: string
        description: The email address to send the report to.
      steps:
      - name: get-costs
        type: call
        call: oracle-ebs.get-project-costs
        with:
          project_number: '{{project_number}}'
      - name: update-sheet
        type: call
        call: googlesheets.update-cells
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: CostReport!A2:E2
          values: '[["{{project_number}}", "{{get-costs.budget_amount}}", "{{get-costs.actual_costs}}", "{{get-costs.committed_costs}}", "{{get-costs.variance_percent}}"]]'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: finance_reports
          folder_path: CostReports/{{project_number}}
          file_name: cost_report_{{project_number}}.xlsx
      - name: send-report
        type: call
        call: outlook.send-mail
        with:
          to: '{{recipient_email}}'
          subject: 'Cost Report: Project {{project_number}}'
          body: 'Budget: ${{get-costs.budget_amount}}. Actuals: ${{get-costs.actual_costs}}. Variance: {{get-costs.variance_percent}}%. Report: {{upload-report.url}}'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: project-costs
      path: /costs/{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: googlesheets
    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-cells
        method: PUT
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{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/me
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /sendMail
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → microsoft-excel-cost-report-generator.yml

When a project needs additional staff, retrieves project details from Oracle EBS, searches Workday for available engineers, creates an Asana task for HR coordination, and notifies the resource manager via Slack.

naftiko: '0.5'
info:
  label: Project Staffing Request Pipeline
  description: When a project needs additional staff, retrieves project details from Oracle EBS, searches Workday for available engineers, creates an Asana task for HR coordination, and notifies the resource manager via Slack.
  tags:
  - hr
  - workday
  - oracle-e-business-suite
  - asana
  - slack
  - resource-management
capability:
  exposes:
  - type: mcp
    namespace: resource-staffing
    port: 8080
    tools:
    - name: request-project-staff
      description: Orchestrate a staffing request by pulling project data, searching for available engineers in Workday, creating an HR task, and notifying the resource manager.
      inputParameters:
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: role_title
        in: body
        type: string
        description: The required role title (e.g., Senior Structural Engineer).
      - name: resource_manager_email
        in: body
        type: string
        description: The Slack email of the resource manager.
      steps:
      - name: get-project
        type: call
        call: oracle-ebs.get-project
        with:
          project_number: '{{project_number}}'
      - name: search-engineers
        type: call
        call: workday.search-workers
        with:
          job_title: '{{role_title}}'
          availability: 'true'
      - name: create-hr-task
        type: call
        call: asana.create-task
        with:
          project_gid: staffing_requests
          name: 'Staff request: {{role_title}} for {{get-project.project_name}}'
          notes: 'Project: {{get-project.project_name}} ({{project_number}}). Role: {{role_title}}. Available candidates: {{search-engineers.count}}.'
      - name: notify-manager
        type: call
        call: slack.send-message
        with:
          channel: resource-management
          text: 'Staffing request for {{role_title}} on {{get-project.project_name}}. {{search-engineers.count}} candidates available. Asana task: {{create-hr-task.url}}'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: projects
      path: /{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: get-project
        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?jobTitle={{job_title}}&available={{availability}}
      inputParameters:
      - name: job_title
        in: query
      - name: availability
        in: query
      operations:
      - name: search-workers
        method: GET
  - type: http
    namespace: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → project-staffing-request-pipeline.yml

Validates subcontractor certifications from SAP, checks insurance status, creates compliance records in ServiceNow, and notifies procurement.

naftiko: '0.5'
info:
  label: Subcontractor Compliance Monitor
  description: Validates subcontractor certifications from SAP, checks insurance status, creates compliance records in ServiceNow, and notifies procurement.
  tags:
  - compliance
  - sap
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: subcontractor_compliance_monitor
      description: Orchestrate subcontractor compliance monitor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://aecom-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → subcontractor-compliance-monitor.yml

Retrieves an engineering design specification page from Confluence by page ID, returning the title, body content, and last update timestamp.

naftiko: '0.5'
info:
  label: Confluence Design Spec Retrieval
  description: Retrieves an engineering design specification page from Confluence by page ID, returning the title, body content, and last update timestamp.
  tags:
  - engineering
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: knowledge-management
    port: 8080
    tools:
    - name: get-design-spec
      description: Retrieve a Confluence page used as an engineering design specification.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Confluence page identifier.
      call: confluence.get-page
      with:
        page_id: '{{page_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: last_updated
        type: string
        mapping: $.version.when
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://aecom.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,version
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-design-spec-retrieval.yml

Retrieves employee profile from Workday at AECOM.

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

Archives completed engineering drawings by moving them from active Google Drive folders to an archive folder, updating metadata, and logging the action in Confluence.

naftiko: '0.5'
info:
  label: Google Drive Drawing Archive
  description: Archives completed engineering drawings by moving them from active Google Drive folders to an archive folder, updating metadata, and logging the action in Confluence.
  tags:
  - document-management
  - google-drive
  - confluence
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: drawing-archive
    port: 8080
    tools:
    - name: archive-drawing
      description: Move a drawing to the archive folder in Google Drive and log the action in Confluence.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Google Drive file identifier.
      - name: archive_folder_id
        in: body
        type: string
        description: The destination archive folder ID.
      - name: project_code
        in: body
        type: string
        description: The project code for the Confluence log.
      steps:
      - name: get-file
        type: call
        call: googledrive.get-file
        with:
          file_id: '{{file_id}}'
      - name: move-file
        type: call
        call: googledrive.move-file
        with:
          file_id: '{{file_id}}'
          new_parent: '{{archive_folder_id}}'
      - name: log-archive
        type: call
        call: confluence.create-page
        with:
          space_key: ENGR
          title: 'Archived: {{get-file.name}}'
          body: 'Drawing {{get-file.name}} archived from project {{project_code}} on {{move-file.modified_date}}. Original location: {{get-file.parents}}.'
  consumes:
  - type: http
    namespace: googledrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
      - name: move-file
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → google-drive-drawing-archive.yml

Sends a message to a Slack channel for AECOM notifications.

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

Processes vendor invoices from SAP, matches against POs, creates payment batches, logs in ServiceNow, and notifies accounts payable.

naftiko: '0.5'
info:
  label: Vendor Payment Processing Pipeline
  description: Processes vendor invoices from SAP, matches against POs, creates payment batches, logs in ServiceNow, and notifies accounts payable.
  tags:
  - finance
  - sap
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: vendor_payment_processing_pipeline
      description: Orchestrate vendor payment processing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://aecom-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → vendor-payment-processing-pipeline.yml

Aggregates updates from Jira, ServiceNow, and Confluence, generates weekly digest in Power BI, and distributes to project stakeholders.

naftiko: '0.5'
info:
  label: Project Communication Digest
  description: Aggregates updates from Jira, ServiceNow, and Confluence, generates weekly digest in Power BI, and distributes to project stakeholders.
  tags:
  - communications
  - jira
  - servicenow
  - confluence
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: communications
    port: 8080
    tools:
    - name: project_communication_digest
      description: Orchestrate project communication digest workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-confluence
        type: call
        call: confluence.create-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: confluence-op
        method: POST
Open in Framework → View in Fleet → project-communication-digest.yml

When a construction change order is submitted in Oracle EBS, creates a Jira change request, updates the project schedule in Microsoft Project, and notifies the project manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Construction Change Order Pipeline
  description: When a construction change order is submitted in Oracle EBS, creates a Jira change request, updates the project schedule in Microsoft Project, and notifies the project manager via Microsoft Teams.
  tags:
  - construction
  - oracle-e-business-suite
  - jira
  - microsoft-project
  - microsoft-teams
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: change-order-management
    port: 8080
    tools:
    - name: process-change-order
      description: Orchestrate processing of a construction change order from Oracle EBS through Jira tracking, schedule update, and PM notification.
      inputParameters:
      - name: change_order_id
        in: body
        type: string
        description: The Oracle EBS change order identifier.
      - name: project_id
        in: body
        type: string
        description: The Microsoft Project GUID.
      - name: pm_email
        in: body
        type: string
        description: The project manager email for notification.
      steps:
      - name: get-change-order
        type: call
        call: oracle-ebs.get-change-order
        with:
          change_order_id: '{{change_order_id}}'
      - name: create-change-request
        type: call
        call: jira.create-issue
        with:
          project_key: CONSTR
          summary: 'CO: {{get-change-order.description}}'
          description: 'Change Order {{change_order_id}} - Cost Impact: ${{get-change-order.cost_impact}}. Schedule Impact: {{get-change-order.schedule_days}} days.'
          issue_type: Change Request
      - name: update-schedule
        type: call
        call: msproject.update-task
        with:
          project_id: '{{project_id}}'
          task_name: '{{get-change-order.affected_task}}'
          duration_change: '{{get-change-order.schedule_days}}'
      - name: notify-pm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{pm_email}}'
          text: 'Change Order {{change_order_id}} processed. Cost: ${{get-change-order.cost_impact}}. Jira: {{create-change-request.key}}. Schedule updated by {{get-change-order.schedule_days}} days.'
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: change-orders
      path: /change-orders/{{change_order_id}}
      inputParameters:
      - name: change_order_id
        in: path
      operations:
      - name: get-change-order
        method: GET
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msproject
    baseUri: https://aecom.sharepoint.com/sites/pwa/_api/ProjectServer/Projects
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: ('{{project_id}}')/Tasks
      inputParameters:
      - name: project_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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → construction-change-order-pipeline.yml

Triggers Power BI dataset refresh for AECOM reporting.

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

When a SAP purchase order is created for construction materials, retrieves the PO details, looks up the approver in Workday, and sends an approval request via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Purchase Order Approval Pipeline
  description: When a SAP purchase order is created for construction materials, retrieves the PO details, looks up the approver in Workday, and sends an approval request via Microsoft Teams.
  tags:
  - procurement
  - sap
  - workday
  - microsoft-teams
  - construction
capability:
  exposes:
  - type: mcp
    namespace: procurement-approval
    port: 8080
    tools:
    - name: route-po-approval
      description: Retrieve a SAP PO, resolve the approver from Workday, and send an approval notification via Teams.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number.
      - name: requestor_id
        in: body
        type: string
        description: The Workday worker ID of the requestor.
      steps:
      - name: get-po
        type: call
        call: sap.get-po
        with:
          po_number: '{{po_number}}'
      - name: get-requestor
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{requestor_id}}'
      - name: get-approver
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-requestor.manager_id}}'
      - name: send-approval-request
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-approver.work_email}}'
          text: 'PO Approval Required: PO {{po_number}} for ${{get-po.total_value}} from vendor {{get-po.vendor}}. Requested by {{get-requestor.full_name}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://aecom-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-purchase-order-approval-pipeline.yml

Monitors RFI aging in Jira, escalates overdue items, notifies design leads, creates ServiceNow escalation tickets, and tracks resolution.

naftiko: '0.5'
info:
  label: Engineering RFI Escalation Pipeline
  description: Monitors RFI aging in Jira, escalates overdue items, notifies design leads, creates ServiceNow escalation tickets, and tracks resolution.
  tags:
  - engineering
  - jira
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: engineering_rfi_escalation_pipeline
      description: Orchestrate engineering rfi escalation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → engineering-rfi-escalation-pipeline.yml

Monitors training completion from Workday, checks certifications, creates escalation tasks in ServiceNow, and notifies safety management.

naftiko: '0.5'
info:
  label: Safety Training Compliance Tracker
  description: Monitors training completion from Workday, checks certifications, creates escalation tasks in ServiceNow, and notifies safety management.
  tags:
  - safety
  - workday
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: safety
    port: 8080
    tools:
    - name: safety_training_compliance_tracker
      description: Orchestrate safety training compliance tracker 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:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/aecom
    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://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → safety-training-compliance-tracker.yml

Retrieves the current schedule status of an infrastructure project from Microsoft Project, returning milestone dates, percent complete, and critical path items.

naftiko: '0.5'
info:
  label: Project Schedule Status Lookup
  description: Retrieves the current schedule status of an infrastructure project from Microsoft Project, returning milestone dates, percent complete, and critical path items.
  tags:
  - project-management
  - microsoft-project
capability:
  exposes:
  - type: mcp
    namespace: project-scheduling
    port: 8080
    tools:
    - name: get-project-schedule
      description: Look up a Microsoft Project schedule by project ID and return milestone summary, percent complete, and next critical milestone.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Microsoft Project Online project GUID.
      call: msproject.get-project
      with:
        project_id: '{{project_id}}'
      outputParameters:
      - name: project_name
        type: string
        mapping: $.d.ProjectName
      - name: percent_complete
        type: string
        mapping: $.d.PercentComplete
      - name: finish_date
        type: string
        mapping: $.d.FinishDate
  consumes:
  - type: http
    namespace: msproject
    baseUri: https://aecom.sharepoint.com/sites/pwa/_api/ProjectServer/Projects
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: projects
      path: ('{{project_id}}')
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project
        method: GET
Open in Framework → View in Fleet → project-schedule-status-lookup.yml

Receives claims, validates against contracts in Oracle, analyzes in Snowflake, creates resolution workflow in ServiceNow, and notifies legal.

naftiko: '0.5'
info:
  label: Construction Claims Management Pipeline
  description: Receives claims, validates against contracts in Oracle, analyzes in Snowflake, creates resolution workflow in ServiceNow, and notifies legal.
  tags:
  - claims
  - oracle
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: claims
    port: 8080
    tools:
    - name: construction_claims_management_pipeline
      description: Orchestrate construction claims management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → construction-claims-management-pipeline.yml

Onboards a new subcontractor by verifying insurance in Salesforce, creating a vendor record in Oracle EBS, provisioning access in Azure Active Directory, and notifying the contracts team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Subcontractor Onboarding Pipeline
  description: Onboards a new subcontractor by verifying insurance in Salesforce, creating a vendor record in Oracle EBS, provisioning access in Azure Active Directory, and notifying the contracts team via Microsoft Teams.
  tags:
  - procurement
  - salesforce
  - oracle-e-business-suite
  - azure-active-directory
  - microsoft-teams
  - subcontractor
capability:
  exposes:
  - type: mcp
    namespace: subcontractor-onboarding
    port: 8080
    tools:
    - name: onboard-subcontractor
      description: Onboard a subcontractor by verifying insurance, creating vendor record, provisioning access, and notifying the contracts team.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The subcontractor company name.
      - name: salesforce_account_id
        in: body
        type: string
        description: The Salesforce account ID for the subcontractor.
      - name: contact_email
        in: body
        type: string
        description: The primary contact email.
      steps:
      - name: verify-insurance
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{salesforce_account_id}}'
      - name: create-vendor
        type: call
        call: oracle-ebs.create-vendor
        with:
          vendor_name: '{{company_name}}'
          contact_email: '{{contact_email}}'
          insurance_expiry: '{{verify-insurance.insurance_expiry_date}}'
      - name: provision-access
        type: call
        call: azuread.create-guest-user
        with:
          email: '{{contact_email}}'
          display_name: '{{company_name}} - External'
      - name: notify-contracts
        type: call
        call: msteams.send-message
        with:
          recipient_upn: contracts-team@aecom.com
          text: 'Subcontractor onboarded: {{company_name}}. Vendor ID: {{create-vendor.vendor_id}}. Insurance expires: {{verify-insurance.insurance_expiry_date}}. Guest access provisioned for {{contact_email}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://aecom.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: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: vendors
      path: /vendors
      operations:
      - name: create-vendor
        method: POST
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /invitations
      operations:
      - name: create-guest-user
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → subcontractor-onboarding-pipeline.yml

Reconciles project travel expenses by retrieving reports from SAP Concur, matching against Oracle EBS project budgets, flagging discrepancies in a Jira task, and summarizing in a Microsoft Teams message.

naftiko: '0.5'
info:
  label: Travel Expense Reconciliation Orchestrator
  description: Reconciles project travel expenses by retrieving reports from SAP Concur, matching against Oracle EBS project budgets, flagging discrepancies in a Jira task, and summarizing in a Microsoft Teams message.
  tags:
  - finance
  - sap-concur
  - oracle-e-business-suite
  - jira
  - microsoft-teams
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: expense-reconciliation
    port: 8080
    tools:
    - name: reconcile-travel-expenses
      description: Pull Concur expenses, compare with Oracle EBS budgets, flag discrepancies, and notify the finance team.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The SAP Concur expense report ID.
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: finance_channel
        in: body
        type: string
        description: The Teams channel ID for finance notifications.
      steps:
      - name: get-expense
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: get-budget
        type: call
        call: oracle-ebs.get-project-costs
        with:
          project_number: '{{project_number}}'
      - name: create-discrepancy-task
        type: call
        call: jira.create-issue
        with:
          project_key: FIN
          summary: 'Expense reconciliation: Report {{report_id}} vs Project {{project_number}}'
          description: 'Expense total: ${{get-expense.total_amount}}. Project travel budget remaining: ${{get-budget.travel_budget_remaining}}. Status: {{get-expense.approval_status}}.'
          issue_type: Task
      - name: notify-finance
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{finance_channel}}'
          text: 'Expense reconciliation complete for Project {{project_number}}. Report {{report_id}}: ${{get-expense.total_amount}}. Jira: {{create-discrepancy-task.key}}'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0/expense
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: project-costs
      path: /costs/{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: 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: post-channel-message
        method: POST
Open in Framework → View in Fleet → travel-expense-reconciliation-orchestrator.yml

Synchronizes a Microsoft Planner task to Jira by reading the Planner task details, creating a corresponding Jira issue, and posting a link back to the Planner task via Microsoft Teams.

naftiko: '0.5'
info:
  label: Microsoft Planner Task Sync to Jira
  description: Synchronizes a Microsoft Planner task to Jira by reading the Planner task details, creating a corresponding Jira issue, and posting a link back to the Planner task via Microsoft Teams.
  tags:
  - project-management
  - microsoft-planner
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: task-sync
    port: 8080
    tools:
    - name: sync-planner-to-jira
      description: Read a Planner task, create a Jira issue, and post the cross-reference link to Teams.
      inputParameters:
      - name: planner_task_id
        in: body
        type: string
        description: The Microsoft Planner task identifier.
      - name: jira_project_key
        in: body
        type: string
        description: The target Jira project key.
      - name: notify_email
        in: body
        type: string
        description: The email to notify via Teams.
      steps:
      - name: get-planner-task
        type: call
        call: planner.get-task
        with:
          task_id: '{{planner_task_id}}'
      - name: create-jira-issue
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          summary: '{{get-planner-task.title}}'
          description: 'Synced from Planner. Due: {{get-planner-task.due_date}}. Assigned: {{get-planner-task.assignee}}.'
          issue_type: Task
      - name: notify-user
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{notify_email}}'
          text: Planner task '{{get-planner-task.title}}' synced to Jira as {{create-jira-issue.key}}.
  consumes:
  - type: http
    namespace: planner
    baseUri: https://graph.microsoft.com/v1.0/planner
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /tasks/{{task_id}}
      inputParameters:
      - name: task_id
        in: path
      operations:
      - name: get-task
        method: GET
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-planner-task-sync-to-jira.yml

Collects inspection data, assesses condition ratings in Snowflake, prioritizes maintenance in Jira, updates asset registry, and notifies ops.

naftiko: '0.5'
info:
  label: Infrastructure Asset Condition Pipeline
  description: Collects inspection data, assesses condition ratings in Snowflake, prioritizes maintenance in Jira, updates asset registry, and notifies ops.
  tags:
  - asset-management
  - snowflake
  - jira
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: asset-management
    port: 8080
    tools:
    - name: infrastructure_asset_condition_pipeline
      description: Orchestrate infrastructure asset condition pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-snowflake
        type: call
        call: snowflake.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → infrastructure-asset-condition-pipeline.yml

Tracks permit applications and approvals, monitors deadlines in Jira, creates escalations in ServiceNow, and notifies project compliance team.

naftiko: '0.5'
info:
  label: Permit Tracking Orchestrator
  description: Tracks permit applications and approvals, monitors deadlines in Jira, creates escalations in ServiceNow, and notifies project compliance team.
  tags:
  - permits
  - jira
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: permits
    port: 8080
    tools:
    - name: permit_tracking_orchestrator
      description: Orchestrate permit tracking orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → permit-tracking-orchestrator.yml

Looks up a Jira issue by key and returns its current status, assignee, priority, and linked epic for engineering task tracking.

naftiko: '0.5'
info:
  label: Jira Engineering Issue Status
  description: Looks up a Jira issue by key and returns its current status, assignee, priority, and linked epic for engineering task tracking.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: issue-tracking
    port: 8080
    tools:
    - name: get-issue-status
      description: Retrieve a Jira issue by key and return its status, assignee, priority, and epic link.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g. INFRA-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: priority
        type: string
        mapping: $.fields.priority.name
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-engineering-issue-status.yml

Calculates earned value metrics from Oracle project actuals, compares against baseline, generates EVM reports in Power BI, and notifies project controls.

naftiko: '0.5'
info:
  label: Project Earned Value Analysis
  description: Calculates earned value metrics from Oracle project actuals, compares against baseline, generates EVM reports in Power BI, and notifies project controls.
  tags:
  - project-controls
  - earned-value
  - oracle
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: project-controls
    port: 8080
    tools:
    - name: project_earned_value_analysis
      description: Orchestrate project earned value analysis workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: fetch-data
        type: call
        call: primary.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-data
        type: call
        call: processor.transform
        with:
          input: '{{fetch-data.result}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          table: records
          data: '{{process-data.output}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel: operations
          text: 'Workflow {{resource_id}} complete. Record: {{create-record.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://co.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/records
      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
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → project-earned-value-analysis.yml

Retrieves Salesforce account details for AECOM sales teams.

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

Plans site mobilization resources in Oracle, provisions equipment in SAP, creates logistics tasks in ServiceNow, and notifies project team.

naftiko: '0.5'
info:
  label: Site Mobilization Orchestrator
  description: Plans site mobilization resources in Oracle, provisions equipment in SAP, creates logistics tasks in ServiceNow, and notifies project team.
  tags:
  - construction
  - oracle
  - sap
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: construction
    port: 8080
    tools:
    - name: site_mobilization_orchestrator
      description: Orchestrate site mobilization orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-sap
        type: call
        call: sap.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: sap
    baseUri: https://aecom-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → site-mobilization-orchestrator.yml

Receives change orders, validates scope and cost in Oracle, routes for approval in ServiceNow, updates project budget, and notifies stakeholders.

naftiko: '0.5'
info:
  label: Change Order Processing Pipeline
  description: Receives change orders, validates scope and cost in Oracle, routes for approval in ServiceNow, updates project budget, and notifies stakeholders.
  tags:
  - change-management
  - oracle
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: change_order_processing_pipeline
      description: Orchestrate change order processing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → change-order-processing-pipeline.yml

Extracts actuals from Oracle, runs forecast models in Snowflake, updates Power BI projections, creates variance alerts, and notifies finance.

naftiko: '0.5'
info:
  label: Project Financial Forecasting Pipeline
  description: Extracts actuals from Oracle, runs forecast models in Snowflake, updates Power BI projections, creates variance alerts, and notifies finance.
  tags:
  - finance
  - oracle
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: project_financial_forecasting_pipeline
      description: Orchestrate project financial forecasting pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → project-financial-forecasting-pipeline.yml

Schedules inspections from Jira, collects results, validates against specifications, creates NCRs in ServiceNow, and notifies quality team.

naftiko: '0.5'
info:
  label: Quality Inspection Orchestrator
  description: Schedules inspections from Jira, collects results, validates against specifications, creates NCRs in ServiceNow, and notifies quality team.
  tags:
  - quality
  - jira
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: quality_inspection_orchestrator
      description: Orchestrate quality inspection orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → quality-inspection-orchestrator.yml

Searches Splunk indexes for log entries at AECOM.

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

Creates purchase requisitions in SAP, tracks approvals, monitors delivery in Oracle, updates project schedule, and notifies procurement.

naftiko: '0.5'
info:
  label: Material Procurement Pipeline
  description: Creates purchase requisitions in SAP, tracks approvals, monitors delivery in Oracle, updates project schedule, and notifies procurement.
  tags:
  - procurement
  - sap
  - oracle
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: material_procurement_pipeline
      description: Orchestrate material procurement pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-oracle
        type: call
        call: oracle.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://aecom-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → material-procurement-pipeline.yml

Retrieves a Salesforce opportunity by ID, returning stage, amount, close date, and account name for business development tracking of infrastructure projects.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Lookup
  description: Retrieves a Salesforce opportunity by ID, returning stage, amount, close date, and account name for business development tracking of infrastructure projects.
  tags:
  - business-development
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-opportunity
      description: Retrieve a Salesforce opportunity by ID for project pursuit tracking.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity record ID.
      call: salesforce.get-opportunity
      with:
        opportunity_id: '{{opportunity_id}}'
      outputParameters:
      - name: stage
        type: string
        mapping: $.StageName
      - name: amount
        type: string
        mapping: $.Amount
      - name: close_date
        type: string
        mapping: $.CloseDate
      - name: account_name
        type: string
        mapping: $.Account.Name
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://aecom.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-lookup.yml

Searches Elasticsearch indexes for AECOM.

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

Tracks regulatory submittals in Jira, monitors deadlines, creates escalations, logs status in ServiceNow, and notifies regulatory team.

naftiko: '0.5'
info:
  label: Regulatory Submittal Tracking Pipeline
  description: Tracks regulatory submittals in Jira, monitors deadlines, creates escalations, logs status in ServiceNow, and notifies regulatory team.
  tags:
  - regulatory
  - jira
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: regulatory
    port: 8080
    tools:
    - name: regulatory_submittal_tracking_pipeline
      description: Orchestrate regulatory submittal tracking pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → regulatory-submittal-tracking-pipeline.yml

Consolidates JV financial data from Oracle, allocates costs in Snowflake, generates partner reports in Power BI, and notifies JV management.

naftiko: '0.5'
info:
  label: Joint Venture Reporting Pipeline
  description: Consolidates JV financial data from Oracle, allocates costs in Snowflake, generates partner reports in Power BI, and notifies JV management.
  tags:
  - finance
  - oracle
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: joint_venture_reporting_pipeline
      description: Orchestrate joint venture reporting pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-servicenow
        type: call
        call: servicenow.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
Open in Framework → View in Fleet → joint-venture-reporting-pipeline.yml

Retrieves employee training records from Workday, checks certification expirations, creates Jira tasks for overdue trainings, and sends reminders via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Employee Training Compliance Tracker
  description: Retrieves employee training records from Workday, checks certification expirations, creates Jira tasks for overdue trainings, and sends reminders via Microsoft Outlook.
  tags:
  - hr
  - workday
  - jira
  - microsoft-outlook
  - compliance
  - training
capability:
  exposes:
  - type: mcp
    namespace: training-compliance
    port: 8080
    tools:
    - name: check-training-compliance
      description: Check an employee training compliance status, create tasks for overdue items, and send reminders.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: The Workday worker identifier.
      - name: certification_type
        in: body
        type: string
        description: The certification type to check (e.g., OSHA-30, PE-License).
      steps:
      - name: get-training-record
        type: call
        call: workday.get-training-records
        with:
          worker_id: '{{worker_id}}'
          certification: '{{certification_type}}'
      - name: create-renewal-task
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          summary: 'Training renewal: {{certification_type}} for {{get-training-record.employee_name}}'
          description: 'Certification {{certification_type}} expires on {{get-training-record.expiry_date}}. Employee: {{get-training-record.employee_name}}.'
          issue_type: Task
      - name: send-reminder
        type: call
        call: outlook.send-mail
        with:
          to: '{{get-training-record.employee_email}}'
          subject: 'Training Renewal Required: {{certification_type}}'
          body: 'Your {{certification_type}} certification expires on {{get-training-record.expiry_date}}. Please complete renewal. Tracking: {{create-renewal-task.key}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: training
      path: /workers/{{worker_id}}/training?certification={{certification}}
      inputParameters:
      - name: worker_id
        in: path
      - name: certification
        in: query
      operations:
      - name: get-training-records
        method: GET
  - type: http
    namespace: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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-mail
        method: POST
Open in Framework → View in Fleet → employee-training-compliance-tracker.yml

Collects sustainability metrics from field operations, aggregates in Snowflake, generates ESG reports in Power BI, and notifies sustainability team.

naftiko: '0.5'
info:
  label: Sustainability Reporting Pipeline
  description: Collects sustainability metrics from field operations, aggregates in Snowflake, generates ESG reports in Power BI, and notifies sustainability team.
  tags:
  - sustainability
  - snowflake
  - powerbi
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sustainability
    port: 8080
    tools:
    - name: sustainability_reporting_pipeline
      description: Orchestrate sustainability reporting 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:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → sustainability-reporting-pipeline.yml

Tracks vehicle fleet from SAP, monitors fuel consumption, schedules maintenance in ServiceNow, analyzes utilization in Snowflake, and notifies fleet ops.

naftiko: '0.5'
info:
  label: Fleet Management Pipeline
  description: Tracks vehicle fleet from SAP, monitors fuel consumption, schedules maintenance in ServiceNow, analyzes utilization in Snowflake, and notifies fleet ops.
  tags:
  - fleet
  - sap
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: fleet
    port: 8080
    tools:
    - name: fleet_management_pipeline
      description: Orchestrate fleet management pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-sap
        type: call
        call: sap.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-snowflake
        type: call
        call: snowflake.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://aecom-sap.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: sap-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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://aecom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: snowflake-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → fleet-management-pipeline.yml

Executes SQL queries against AECOM Snowflake warehouse.

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

Retrieves a document from a SharePoint project library by site and file path, returning the download URL, last modified date, and author.

naftiko: '0.5'
info:
  label: SharePoint Document Retrieval
  description: Retrieves a document from a SharePoint project library by site and file path, returning the download URL, last modified date, and author.
  tags:
  - document-management
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: document-management
    port: 8080
    tools:
    - name: get-document
      description: Retrieve a document from SharePoint by site ID and file path.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The SharePoint site identifier.
      - name: file_path
        in: body
        type: string
        description: The relative path to the file within the document library.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        file_path: '{{file_path}}'
      outputParameters:
      - name: download_url
        type: string
        mapping: $.['@microsoft.graph.downloadUrl']
      - name: last_modified
        type: string
        mapping: $.lastModifiedDateTime
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-document-retrieval.yml

Collects spatial field data from an ArcGIS feature service, geocodes reference points via Google Maps, stores processed data in PostgreSQL, and publishes a summary to Confluence.

naftiko: '0.5'
info:
  label: GIS Data Collection Pipeline
  description: Collects spatial field data from an ArcGIS feature service, geocodes reference points via Google Maps, stores processed data in PostgreSQL, and publishes a summary to Confluence.
  tags:
  - geospatial
  - google-maps
  - confluence
  - environmental
capability:
  exposes:
  - type: mcp
    namespace: gis-data-collection
    port: 8080
    tools:
    - name: collect-gis-data
      description: Retrieve spatial data from ArcGIS, geocode reference points, store results in PostgreSQL, and publish a summary.
      inputParameters:
      - name: feature_service_url
        in: body
        type: string
        description: The ArcGIS feature service endpoint URL.
      - name: reference_address
        in: body
        type: string
        description: A reference address to geocode for spatial context.
      - name: project_code
        in: body
        type: string
        description: The AECOM project code.
      steps:
      - name: query-features
        type: call
        call: arcgis.query-features
        with:
          service_url: '{{feature_service_url}}'
      - name: geocode-reference
        type: call
        call: googlemaps.geocode
        with:
          address: '{{reference_address}}'
      - name: store-data
        type: call
        call: postgresql.insert-spatial-data
        with:
          project_code: '{{project_code}}'
          feature_count: '{{query-features.feature_count}}'
          ref_lat: '{{geocode-reference.latitude}}'
          ref_lng: '{{geocode-reference.longitude}}'
      - name: publish-summary
        type: call
        call: confluence.create-page
        with:
          space_key: GIS
          title: 'GIS Data Collection: {{project_code}}'
          body: 'Features collected: {{query-features.feature_count}}. Reference point: {{geocode-reference.formatted_address}} ({{geocode-reference.latitude}}, {{geocode-reference.longitude}}).'
  consumes:
  - type: http
    namespace: arcgis
    baseUri: https://services.arcgis.com/aecom
    authentication:
      type: bearer
      token: $secrets.arcgis_token
    resources:
    - name: features
      path: /{{service_url}}/query?where=1=1&outFields=*&f=json
      inputParameters:
      - name: service_url
        in: path
      operations:
      - name: query-features
        method: GET
  - type: http
    namespace: googlemaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: apiKey
      name: key
      in: query
      value: $secrets.google_maps_api_key
    resources:
    - name: geocode
      path: /geocode/json?address={{address}}
      inputParameters:
      - name: address
        in: query
      operations:
      - name: geocode
        method: GET
  - type: http
    namespace: postgresql
    baseUri: https://aecom-gis-api.azurewebsites.net/api/v1
    authentication:
      type: bearer
      token: $secrets.gis_api_token
    resources:
    - name: spatial-data
      path: /spatial-data
      operations:
      - name: insert-spatial-data
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://aecom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → gis-data-collection-pipeline.yml

Validates closeout requirements in Jira, confirms financial settlement in Oracle, archives documents, logs in ServiceNow, and notifies team.

naftiko: '0.5'
info:
  label: Project Closeout Checklist Pipeline
  description: Validates closeout requirements in Jira, confirms financial settlement in Oracle, archives documents, logs in ServiceNow, and notifies team.
  tags:
  - closeout
  - jira
  - oracle
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: closeout
    port: 8080
    tools:
    - name: project_closeout_checklist_pipeline
      description: Orchestrate project closeout checklist pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-oracle
        type: call
        call: oracle.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://aecom.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: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → project-closeout-checklist-pipeline.yml

When a Grafana alert fires for infrastructure monitoring, creates a ServiceNow incident and notifies the on-call engineer via Slack with alert details and dashboard link.

naftiko: '0.5'
info:
  label: Grafana Alert Integration
  description: When a Grafana alert fires for infrastructure monitoring, creates a ServiceNow incident and notifies the on-call engineer via Slack with alert details and dashboard link.
  tags:
  - monitoring
  - grafana
  - servicenow
  - slack
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: alert-management
    port: 8080
    tools:
    - name: process-grafana-alert
      description: Process a Grafana alert by creating a ServiceNow incident and notifying the on-call engineer.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Grafana alert rule identifier.
      - name: dashboard_uid
        in: body
        type: string
        description: The Grafana dashboard UID.
      - name: oncall_channel
        in: body
        type: string
        description: The Slack on-call channel name.
      steps:
      - name: get-alert
        type: call
        call: grafana.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Grafana Alert: {{get-alert.name}}'
          category: infrastructure_monitoring
          priority: '{{get-alert.severity}}'
          description: 'Alert: {{get-alert.name}}. State: {{get-alert.state}}. Dashboard: https://aecom-grafana.azurewebsites.net/d/{{dashboard_uid}}'
      - name: notify-oncall
        type: call
        call: slack.send-message
        with:
          channel: '{{oncall_channel}}'
          text: 'ALERT [{{get-alert.severity}}]: {{get-alert.name}}. State: {{get-alert.state}}. ServiceNow: {{create-incident.number}}. Dashboard: https://aecom-grafana.azurewebsites.net/d/{{dashboard_uid}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://aecom-grafana.azurewebsites.net/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: alerts
      path: /v1/provisioning/alert-rules/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://aecom.service-now.com/api/now
    authentication:
      type: 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: send-message
        method: POST
Open in Framework → View in Fleet → grafana-alert-integration.yml

Orchestrates a permit application workflow by compiling project data from Oracle EBS, generating the application document in Google Docs, uploading to SharePoint, and tracking in Jira.

naftiko: '0.5'
info:
  label: Permit Application Orchestrator
  description: Orchestrates a permit application workflow by compiling project data from Oracle EBS, generating the application document in Google Docs, uploading to SharePoint, and tracking in Jira.
  tags:
  - compliance
  - oracle-e-business-suite
  - google-docs
  - sharepoint
  - jira
  - permits
capability:
  exposes:
  - type: mcp
    namespace: permit-management
    port: 8080
    tools:
    - name: prepare-permit-application
      description: Compile project data, generate application document, upload to SharePoint, and create a Jira tracking issue.
      inputParameters:
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: permit_type
        in: body
        type: string
        description: The type of permit (e.g., environmental, building, land-use).
      - name: site_address
        in: body
        type: string
        description: The project site address.
      steps:
      - name: get-project-data
        type: call
        call: oracle-ebs.get-project
        with:
          project_number: '{{project_number}}'
      - name: create-application
        type: call
        call: googledocs.create-document
        with:
          title: 'Permit Application: {{permit_type}} - {{get-project-data.project_name}}'
          body: 'Project: {{get-project-data.project_name}}. Address: {{site_address}}. Type: {{permit_type}}. Client: {{get-project-data.client_name}}.'
      - name: upload-to-sharepoint
        type: call
        call: sharepoint.upload-file
        with:
          site_id: permits_site
          folder_path: Applications/{{project_number}}
          file_name: '{{permit_type}}_application.docx'
      - name: create-tracking-issue
        type: call
        call: jira.create-issue
        with:
          project_key: PERMIT
          summary: '{{permit_type}} permit: {{get-project-data.project_name}}'
          description: 'Permit application prepared. Document: {{upload-to-sharepoint.url}}. Address: {{site_address}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: projects
      path: /{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: get-project
        method: GET
  - type: http
    namespace: googledocs
    baseUri: https://docs.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_docs_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: 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: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → permit-application-orchestrator.yml

Collects environmental data, runs impact models in Snowflake, generates reports in Power BI, creates regulatory filings, and notifies EHS.

naftiko: '0.5'
info:
  label: Environmental Impact Assessment Pipeline
  description: Collects environmental data, runs impact models in Snowflake, generates reports in Power BI, creates regulatory filings, and notifies EHS.
  tags:
  - environmental
  - snowflake
  - powerbi
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: environmental
    port: 8080
    tools:
    - name: environmental_impact_assessment_pipeline
      description: Orchestrate environmental impact assessment 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:
          resource_id: '{{resource_id}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → environmental-impact-assessment-pipeline.yml

Retrieves GitHub repository metadata for AECOM.

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

Compiles a weekly project status report by pulling schedule data from Microsoft Project, cost data from Oracle EBS, open issues from Jira, and distributing the report via Microsoft Teams and Microsoft Outlook.

naftiko: '0.5'
info:
  label: Weekly Status Report Generator
  description: Compiles a weekly project status report by pulling schedule data from Microsoft Project, cost data from Oracle EBS, open issues from Jira, and distributing the report via Microsoft Teams and Microsoft Outlook.
  tags:
  - project-management
  - microsoft-project
  - oracle-e-business-suite
  - jira
  - microsoft-teams
  - microsoft-outlook
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: status-reporting
    port: 8080
    tools:
    - name: generate-weekly-status
      description: Aggregate schedule, cost, and issue data into a weekly status report and distribute to stakeholders.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Microsoft Project GUID.
      - name: project_number
        in: body
        type: string
        description: The Oracle EBS project number.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key.
      - name: stakeholder_emails
        in: body
        type: string
        description: Comma-separated stakeholder emails.
      - name: teams_channel_id
        in: body
        type: string
        description: The Teams channel ID.
      steps:
      - name: get-schedule
        type: call
        call: msproject.get-project
        with:
          project_id: '{{project_id}}'
      - name: get-costs
        type: call
        call: oracle-ebs.get-project-costs
        with:
          project_number: '{{project_number}}'
      - name: get-open-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{jira_project_key}} AND status!=Done
      - name: post-to-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Weekly Status: Schedule {{get-schedule.percent_complete}}% complete. Budget: ${{get-costs.budget_amount}}, Actuals: ${{get-costs.actual_costs}}. Open issues: {{get-open-issues.total}}.'
      - name: email-stakeholders
        type: call
        call: outlook.send-mail
        with:
          to: '{{stakeholder_emails}}'
          subject: 'Weekly Status Report: Project {{project_number}}'
          body: 'Schedule: {{get-schedule.percent_complete}}% complete, finish {{get-schedule.finish_date}}. Budget variance: {{get-costs.variance_percent}}%. Open Jira issues: {{get-open-issues.total}}.'
  consumes:
  - type: http
    namespace: msproject
    baseUri: https://aecom.sharepoint.com/sites/pwa/_api/ProjectServer/Projects
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: projects
      path: ('{{project_id}}')
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: project-costs
      path: /costs/{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: jira
    baseUri: https://aecom.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
  - type: http
    namespace: 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: post-channel-message
        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-mail
        method: POST
Open in Framework → View in Fleet → weekly-status-report-generator.yml

Extracts billing data from Oracle, reconciles with project costs in Snowflake, creates invoices, logs in ServiceNow, and notifies finance.

naftiko: '0.5'
info:
  label: Client Billing Reconciliation Pipeline
  description: Extracts billing data from Oracle, reconciles with project costs in Snowflake, creates invoices, logs in ServiceNow, and notifies finance.
  tags:
  - finance
  - oracle
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: client_billing_reconciliation_pipeline
      description: Orchestrate client billing reconciliation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: servicenow-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → client-billing-reconciliation-pipeline.yml

When a construction quality inspection is completed in the field, creates a ServiceNow record, updates the Jira quality tracking board, uploads inspection photos to Box, and notifies the QA manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Quality Inspection Workflow
  description: When a construction quality inspection is completed in the field, creates a ServiceNow record, updates the Jira quality tracking board, uploads inspection photos to Box, and notifies the QA manager via Microsoft Teams.
  tags:
  - construction
  - quality-assurance
  - servicenow
  - jira
  - box
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-management
    port: 8080
    tools:
    - name: process-quality-inspection
      description: Record a quality inspection in ServiceNow, update Jira tracking, upload photos, and notify the QA manager.
      inputParameters:
      - name: inspection_type
        in: body
        type: string
        description: The type of inspection (e.g., concrete, structural, electrical).
      - name: result
        in: body
        type: string
        description: Inspection result (pass, fail, conditional).
      - name: project_number
        in: body
        type: string
        description: The project number.
      - name: qa_manager_email
        in: body
        type: string
        description: The QA manager email.
      steps:
      - name: create-snow-record
        type: call
        call: servicenow.create-record
        with:
          table: quality_inspection
          inspection_type: '{{inspection_type}}'
          result: '{{result}}'
          project: '{{project_number}}'
      - name: update-jira
        type: call
        call: jira.create-issue
        with:
          project_key: QA
          summary: 'Inspection: {{inspection_type}} - {{result}}'
          description: 'Project: {{project_number}}. Result: {{result}}. ServiceNow: {{create-snow-record.number}}.'
          issue_type: Task
      - name: create-photo-folder
        type: call
        call: box.create-folder
        with:
          parent_id: inspection_photos
          name: '{{create-snow-record.number}}_{{inspection_type}}'
      - name: notify-qa
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{qa_manager_email}}'
          text: 'Quality inspection [{{result}}]: {{inspection_type}} on project {{project_number}}. ServiceNow: {{create-snow-record.number}}. Jira: {{update-jira.key}}. Photos: {{create-photo-folder.url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://aecom.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: jira
    baseUri: https://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        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: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-inspection-workflow.yml

Analyzes schedule delays from Oracle Primavera, identifies critical path impacts in Snowflake, creates recovery plans in Jira, and notifies management.

naftiko: '0.5'
info:
  label: Construction Delay Analysis Pipeline
  description: Analyzes schedule delays from Oracle Primavera, identifies critical path impacts in Snowflake, creates recovery plans in Jira, and notifies management.
  tags:
  - scheduling
  - oracle
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: scheduling
    port: 8080
    tools:
    - name: construction_delay_analysis_pipeline
      description: Orchestrate construction delay analysis pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-oracle
        type: call
        call: oracle.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-jira
        type: call
        call: jira.create-resource
        with:
          resource_id: '{{resource_id}}'
      - name: notify-slack
        type: call
        call: slack.notify-resource
        with:
          resource_id: '{{resource_id}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://aecom.oraclecloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: oracle-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://aecom.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://aecom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: jira-op
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: slack-op
        method: POST
Open in Framework → View in Fleet → construction-delay-analysis-pipeline.yml

Retrieves project cost summary from Oracle E-Business Suite for a given project number, returning budget, actuals, and committed costs.

naftiko: '0.5'
info:
  label: Oracle EBS Project Cost Lookup
  description: Retrieves project cost summary from Oracle E-Business Suite for a given project number, returning budget, actuals, and committed costs.
  tags:
  - finance
  - oracle
  - oracle-e-business-suite
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: project-finance
    port: 8080
    tools:
    - name: get-project-costs
      description: Look up project cost data from Oracle EBS by project number.
      inputParameters:
      - name: project_number
        in: body
        type: string
        description: The Oracle project number.
      call: oracle-ebs.get-project-costs
      with:
        project_number: '{{project_number}}'
      outputParameters:
      - name: budget_amount
        type: string
        mapping: $.BudgetAmount
      - name: actual_costs
        type: string
        mapping: $.ActualCosts
      - name: committed_costs
        type: string
        mapping: $.CommittedCosts
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://aecom-ebs.oraclecloud.com/webservices/rest/project
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: project-costs
      path: /costs/{{project_number}}
      inputParameters:
      - name: project_number
        in: path
      operations:
      - name: get-project-costs
        method: GET
Open in Framework → View in Fleet → oracle-ebs-project-cost-lookup.yml

When a quality inspection is completed, updates the inspection record in ServiceNow, uploads the inspection report to SharePoint, and notifies the project quality manager.

naftiko: '0.5'
info:
  label: Quality Inspection Closure Pipeline
  description: When a quality inspection is completed, updates the inspection record in ServiceNow, uploads the inspection report to SharePoint, and notifies the project quality manager.
  tags:
  - quality
  - construction
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: close-inspection
      description: Close a quality inspection and distribute the report.
      inputParameters:
      - name: inspection_id
        in: body
        type: string
        description: ServiceNow inspection record ID.
      - name: result
        in: body
        type: string
        description: Inspection result such as pass or fail.
      - name: project_id
        in: body
        type: string
        description: Project ID.
      steps:
      - name: update-record
        type: call
        call: servicenow.update-incident
        with:
          sys_id: '{{inspection_id}}'
          state: closed
          close_notes: 'Inspection result: {{result}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: project_{{project_id}}
          folder_path: QualityInspections
          file_name: inspection_{{inspection_id}}_{{result}}.pdf
      - name: notify-qm
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_{{project_id}}
          text: 'Inspection {{inspection_id}} closed with result: {{result}}. Report uploaded to SharePoint.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bechtel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PUT
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → quality-inspection-closure-pipeline.yml

Manages system commissioning tests by creating a test plan in Jira, recording results in Google Sheets, uploading test reports to SharePoint, and notifying the commissioning team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Commissioning Test Pipeline
  description: Manages system commissioning tests by creating a test plan in Jira, recording results in Google Sheets, uploading test reports to SharePoint, and notifying the commissioning team via Microsoft Teams.
  tags:
  - construction
  - jira
  - google-sheets
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: commissioning
    port: 8080
    tools:
    - name: execute-commissioning-test
      description: Orchestrate commissioning test execution and documentation.
      inputParameters:
      - name: system_id
        in: body
        type: string
        description: System ID.
      - name: test_type
        in: body
        type: string
        description: Type of commissioning test.
      - name: result
        in: body
        type: string
        description: Pass or fail.
      steps:
      - name: update-task
        type: call
        call: jira.create-issue
        with:
          project: COMM
          summary: 'Commissioning test: {{system_id}} - {{test_type}} - {{result}}'
          issue_type: Task
      - name: log-result
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_commissioning
          data: '{{system_id}},{{test_type}},{{result}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: commissioning
          text: 'Commissioning test {{test_type}} for system {{system_id}}: {{result}}. Task: {{update-task.issue_key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → commissioning-test-pipeline.yml

Searches Confluence for engineering standards and procedures by keyword.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Search
  description: Searches Confluence for engineering standards and procedures by keyword.
  tags:
  - collaboration
  - confluence
  - knowledge-management
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: search-standards
      description: Search Confluence for engineering standards and best practices.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search query.
      call: confluence.search
      with:
        cql: text ~ "{{query}}" and space = ENG
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: total
        type: number
        mapping: $.totalSize
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://bechtel.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-base-search.yml

Generates weekly project progress reports by pulling schedule data from Primavera, cost data from SAP, refreshing the Power BI dashboard, and emailing the report to stakeholders via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Weekly Progress Report Orchestrator
  description: Generates weekly project progress reports by pulling schedule data from Primavera, cost data from SAP, refreshing the Power BI dashboard, and emailing the report to stakeholders via Microsoft Outlook.
  tags:
  - construction
  - sap
  - power-bi
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: weekly-report
    port: 8080
    tools:
    - name: generate-weekly-report
      description: Orchestrate weekly project progress report generation.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: week_ending
        in: body
        type: string
        description: Week ending date.
      steps:
      - name: get-schedule-data
        type: call
        call: primavera.get-schedule-status
        with:
          project_id: '{{project_id}}'
      - name: get-cost-data
        type: call
        call: sap.get-project-costs
        with:
          project_id: '{{project_id}}'
          period: '{{week_ending}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: bechtel_project_{{project_id}}
      - name: email-stakeholders
        type: call
        call: outlook.send-email
        with:
          to: project-{{project_id}}-stakeholders@bechtel.com
          subject: Weekly Progress Report - Project {{project_id}} - {{week_ending}}
          body: 'Schedule: {{get-schedule-data.percent_complete}}% complete. Cost: ${{get-cost-data.actual_cost}} of ${{get-cost-data.budget}}. Dashboard refreshed.'
  consumes:
  - type: http
    namespace: primavera
    baseUri: https://primavera.bechtel.com/api/restapi
    authentication:
      type: bearer
      token: $secrets.primavera_token
    resources:
    - name: projects
      path: /project
      operations:
      - name: get-schedule-status
        method: GET
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: project-costs
      path: /API_PROJECT_COST_SRV/ProjectCost
      operations:
      - name: get-project-costs
        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: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → weekly-progress-report-orchestrator.yml

Processes weld inspections by logging results in Google Sheets, creating a Jira task for failures, uploading NDE reports to SharePoint, and notifying the QC team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Weld Inspection Pipeline
  description: Processes weld inspections by logging results in Google Sheets, creating a Jira task for failures, uploading NDE reports to SharePoint, and notifying the QC team via Microsoft Teams.
  tags:
  - construction
  - google-sheets
  - jira
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: weld-inspect
    port: 8080
    tools:
    - name: process-weld-inspection
      description: Orchestrate weld inspection result processing.
      inputParameters:
      - name: weld_id
        in: body
        type: string
        description: Weld identification number.
      - name: result
        in: body
        type: string
        description: Pass or fail.
      - name: nde_method
        in: body
        type: string
        description: NDE method used.
      steps:
      - name: log-result
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_weld_log
          data: '{{weld_id}},{{nde_method}},{{result}}'
      - name: create-repair-task
        type: call
        call: jira.create-issue
        with:
          project: QC
          summary: 'Weld repair: {{weld_id}} - {{result}}'
          issue_type: Task
      - name: notify-qc
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_control
          text: 'Weld {{weld_id}} inspection ({{nde_method}}): {{result}}. Task: {{create-repair-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://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → weld-inspection-pipeline.yml

Sends an email via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Microsoft Outlook Email Sender
  description: Sends an email via Microsoft Outlook.
  tags:
  - collaboration
  - microsoft-outlook
  - email
capability:
  exposes:
  - type: mcp
    namespace: email
    port: 8080
    tools:
    - name: send-email
      description: Send an email via Outlook.
      inputParameters:
      - name: to
        in: body
        type: string
        description: Recipient.
      - name: subject
        in: body
        type: string
        description: Subject.
      - name: body
        in: body
        type: string
        description: Body.
      call: outlook.send-email
      with:
        to: '{{to}}'
        subject: '{{subject}}'
        body: '{{body}}'
  consumes:
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → microsoft-outlook-email-sender.yml

Geocodes a construction site address using Google Maps API, returning latitude and longitude.

naftiko: '0.5'
info:
  label: Google Maps Site Geolocation
  description: Geocodes a construction site address using Google Maps API, returning latitude and longitude.
  tags:
  - construction
  - google-maps
capability:
  exposes:
  - type: mcp
    namespace: gmaps
    port: 8080
    tools:
    - name: geocode-site
      description: Geocode a construction site address.
      inputParameters:
      - name: address
        in: body
        type: string
        description: Site address.
      call: gmaps.geocode
      with:
        address: '{{address}}'
      outputParameters:
      - name: latitude
        type: number
        mapping: $.results[0].geometry.location.lat
      - name: longitude
        type: number
        mapping: $.results[0].geometry.location.lng
  consumes:
  - type: http
    namespace: gmaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: apiKey
      key: $secrets.google_maps_key
    resources:
    - name: geocode
      path: /geocode/json
      operations:
      - name: geocode
        method: GET
Open in Framework → View in Fleet → google-maps-site-geolocation.yml

Processes equipment rental requests by creating a requisition in SAP Ariba, logging in Google Sheets, and notifying the equipment coordinator via Microsoft Teams.

naftiko: '0.5'
info:
  label: Equipment Rental Request Pipeline
  description: Processes equipment rental requests by creating a requisition in SAP Ariba, logging in Google Sheets, and notifying the equipment coordinator via Microsoft Teams.
  tags:
  - construction
  - sap-ariba
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: equip-rental
    port: 8080
    tools:
    - name: request-rental
      description: Orchestrate equipment rental request processing.
      inputParameters:
      - name: equipment_type
        in: body
        type: string
        description: Type of equipment.
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: duration_days
        in: body
        type: number
        description: Rental duration in days.
      steps:
      - name: create-requisition
        type: call
        call: ariba.create-requisition
        with:
          item: '{{equipment_type}}'
          delivery_site: '{{site_code}}'
          duration: '{{duration_days}}'
      - name: log-request
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_rentals
          data: '{{equipment_type}},{{site_code}},{{duration_days}},{{create-requisition.req_number}}'
      - name: notify-coordinator
        type: call
        call: msteams.send-message
        with:
          channel_id: equipment
          text: 'Rental request: {{equipment_type}} for {{duration_days}} days at {{site_code}}. Req: {{create-requisition.req_number}}.'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://api.ariba.com/v2
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions
      operations:
      - name: create-requisition
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → equipment-rental-request-pipeline.yml

Processes client submittals by creating the submittal in Jira, uploading documents to SharePoint, notifying the client via Microsoft Outlook, and tracking status in Google Sheets.

naftiko: '0.5'
info:
  label: Client Submittal Pipeline
  description: Processes client submittals by creating the submittal in Jira, uploading documents to SharePoint, notifying the client via Microsoft Outlook, and tracking status in Google Sheets.
  tags:
  - construction
  - jira
  - sharepoint
  - microsoft-outlook
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: submittal
    port: 8080
    tools:
    - name: process-submittal
      description: Orchestrate client submittal processing.
      inputParameters:
      - name: submittal_title
        in: body
        type: string
        description: Submittal title.
      - name: client_email
        in: body
        type: string
        description: Client email.
      - name: project_id
        in: body
        type: string
        description: Project ID.
      steps:
      - name: create-submittal
        type: call
        call: jira.create-issue
        with:
          project: SUBMIT
          summary: '{{submittal_title}}'
          issue_type: Task
      - name: notify-client
        type: call
        call: outlook.send-email
        with:
          to: '{{client_email}}'
          subject: 'Submittal for Review: {{submittal_title}}'
          body: 'A new submittal has been uploaded for your review. Reference: {{create-submittal.issue_key}}.'
      - name: log-submittal
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_submittals
          data: '{{project_id}},{{create-submittal.issue_key}},{{submittal_title}},pending'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → client-submittal-pipeline.yml

Manages piping isometric drawing reviews by retrieving drawings from AutoCAD via SharePoint, creating review tasks in Jira, and notifying the piping lead via Microsoft Teams.

naftiko: '0.5'
info:
  label: Piping Isometric Review Pipeline
  description: Manages piping isometric drawing reviews by retrieving drawings from AutoCAD via SharePoint, creating review tasks in Jira, and notifying the piping lead via Microsoft Teams.
  tags:
  - construction
  - autocad
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: iso-review
    port: 8080
    tools:
    - name: submit-iso-for-review
      description: Orchestrate piping isometric drawing review.
      inputParameters:
      - name: drawing_number
        in: body
        type: string
        description: Isometric drawing number.
      - name: project_id
        in: body
        type: string
        description: Project ID.
      steps:
      - name: get-drawing
        type: call
        call: sharepoint.get-file
        with:
          site: bechtel-piping
          path: /isometrics/{{drawing_number}}.dwg
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: PIPE
          summary: 'ISO review: {{drawing_number}}'
          issue_type: Task
      - name: notify-lead
        type: call
        call: msteams.send-message
        with:
          channel_id: piping_engineering
          text: 'Piping ISO {{drawing_number}} submitted for review. Task: {{create-review.issue_key}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site}}/drive/root:/{{path}}:/content
      inputParameters:
      - name: site
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → piping-isometric-review-pipeline.yml

Queries Datadog for the health status of Bechtel IT infrastructure services.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Health Monitor
  description: Queries Datadog for the health status of Bechtel IT infrastructure services.
  tags:
  - monitoring
  - devops
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-health
    port: 8080
    tools:
    - name: get-service-health
      description: Check infrastructure service health in Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Service name.
      call: datadog.get-service-status
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.overall_state
      - name: uptime_pct
        type: number
        mapping: $.uptime_percentage
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: $secrets.datadog_api_key
    inputParameters:
    - name: DD-APPLICATION-KEY
      in: header
      value: $secrets.datadog_app_key
    resources:
    - name: monitors
      path: /monitor/search?query=service:{{service_name}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service-status
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-health-monitor.yml

Collects daily progress data from the field, weather conditions, workforce counts, and generates a daily site report uploaded to SharePoint and emailed to the project director.

naftiko: '0.5'
info:
  label: Daily Site Report Generator
  description: Collects daily progress data from the field, weather conditions, workforce counts, and generates a daily site report uploaded to SharePoint and emailed to the project director.
  tags:
  - construction
  - reporting
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: site-reporting
    port: 8080
    tools:
    - name: generate-daily-site-report
      description: Compile and distribute the daily construction site report.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: date
        in: body
        type: string
        description: Report date.
      - name: director_email
        in: body
        type: string
        description: Project director email.
      steps:
      - name: get-progress
        type: call
        call: field-data.get-daily-progress
        with:
          project_id: '{{project_id}}'
          date: '{{date}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: project_{{project_id}}
          folder_path: DailyReports/{{date}}
          file_name: daily_site_report_{{date}}.pdf
      - name: email-director
        type: call
        call: outlook.send-email
        with:
          to: '{{director_email}}'
          subject: Daily Site Report - Project {{project_id}} - {{date}}
          body: 'Workforce: {{get-progress.workforce_count}}. Activities completed: {{get-progress.activities_completed}}. Weather: {{get-progress.weather}}. Safety incidents: {{get-progress.safety_incidents}}.'
  consumes:
  - type: http
    namespace: field-data
    baseUri: https://fielddata.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.field_data_token
    resources:
    - name: daily-progress
      path: /projects/{{project_id}}/daily/{{date}}
      inputParameters:
      - name: project_id
        in: path
      - name: date
        in: path
      operations:
      - name: get-daily-progress
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → daily-site-report-generator.yml

Retrieves current weather conditions for a construction site location to inform work scheduling decisions.

naftiko: '0.5'
info:
  label: Site Weather Monitor
  description: Retrieves current weather conditions for a construction site location to inform work scheduling decisions.
  tags:
  - construction
  - weather
  - safety
capability:
  exposes:
  - type: mcp
    namespace: weather
    port: 8080
    tools:
    - name: get-site-weather
      description: Get current weather conditions for a site location.
      inputParameters:
      - name: latitude
        in: body
        type: number
        description: Site latitude.
      - name: longitude
        in: body
        type: number
        description: Site longitude.
      call: weather.get-current
      with:
        lat: '{{latitude}}'
        lon: '{{longitude}}'
      outputParameters:
      - name: temperature
        type: number
        mapping: $.main.temp
      - name: conditions
        type: string
        mapping: $.weather[0].description
      - name: wind_speed
        type: number
        mapping: $.wind.speed
  consumes:
  - type: http
    namespace: weather
    baseUri: https://api.openweathermap.org/data/2.5
    authentication:
      type: apikey
      key: $secrets.openweather_api_key
    resources:
    - name: current
      path: /weather?lat={{lat}}&lon={{lon}}&appid={{api_key}}
      operations:
      - name: get-current
        method: GET
Open in Framework → View in Fleet → site-weather-monitor.yml

Distributes daily safety toolbox talk materials by retrieving the topic from SharePoint, sending to site crews via Microsoft Teams, logging attendance in Google Sheets, and creating a Jira follow-up task.

naftiko: '0.5'
info:
  label: Site Safety Toolbox Talk Pipeline
  description: Distributes daily safety toolbox talk materials by retrieving the topic from SharePoint, sending to site crews via Microsoft Teams, logging attendance in Google Sheets, and creating a Jira follow-up task.
  tags:
  - construction
  - sharepoint
  - microsoft-teams
  - google-sheets
  - jira
capability:
  exposes:
  - type: mcp
    namespace: toolbox-talk
    port: 8080
    tools:
    - name: distribute-toolbox-talk
      description: Orchestrate daily safety toolbox talk distribution.
      inputParameters:
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: topic_id
        in: body
        type: string
        description: Safety topic ID.
      steps:
      - name: get-topic
        type: call
        call: sharepoint.get-file
        with:
          site: bechtel-safety
          path: /topics/{{topic_id}}.pdf
      - name: send-to-crew
        type: call
        call: msteams.send-message
        with:
          channel_id: site_{{site_code}}_safety
          text: 'Today''s Toolbox Talk: {{get-topic.file_name}}. Please review and confirm attendance.'
      - name: log-distribution
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_safety_log
          data: '{{site_code}},{{topic_id}},distributed'
      - name: create-followup
        type: call
        call: jira.create-issue
        with:
          project: SAFETY
          summary: 'Verify toolbox talk attendance: {{site_code}}'
          issue_type: Task
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site}}/drive/root:/{{path}}:/content
      inputParameters:
      - name: site
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        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
  - 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://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → site-safety-toolbox-talk-pipeline.yml

Manages construction punch list items by creating tasks in Jira, tracking completion in Google Sheets, notifying the superintendent via Microsoft Teams, and emailing the client upon closure via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Punch List Closeout Pipeline
  description: Manages construction punch list items by creating tasks in Jira, tracking completion in Google Sheets, notifying the superintendent via Microsoft Teams, and emailing the client upon closure via Microsoft Outlook.
  tags:
  - construction
  - jira
  - google-sheets
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: punch-list
    port: 8080
    tools:
    - name: process-punch-item
      description: Orchestrate punch list item tracking and closeout.
      inputParameters:
      - name: item_description
        in: body
        type: string
        description: Punch list item description.
      - name: area
        in: body
        type: string
        description: Area or zone.
      - name: project_id
        in: body
        type: string
        description: Project ID.
      steps:
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: PUNCH
          summary: '{{item_description}} - {{area}}'
          issue_type: Task
      - name: log-item
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_punch_list
          data: '{{project_id}},{{area}},{{item_description}},open,{{create-task.issue_key}}'
      - name: notify-super
        type: call
        call: msteams.send-message
        with:
          channel_id: construction
          text: 'Punch list item added: {{item_description}} in {{area}}. Task: {{create-task.issue_key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → punch-list-closeout-pipeline.yml

Checks the status of a GitHub Actions workflow run for infrastructure-as-code repositories.

naftiko: '0.5'
info:
  label: GitHub Actions Workflow Status
  description: Checks the status of a GitHub Actions workflow run for infrastructure-as-code repositories.
  tags:
  - construction
  - github-actions
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: get-workflow-status
      description: Check GitHub Actions workflow run 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: workflow-runs
      path: /repos/bechtel/{{repo}}/actions/runs/{{run_id}}
      inputParameters:
      - name: repo
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → github-actions-workflow-status.yml

Manages document transmittals by uploading documents to SharePoint, creating a transmittal record in Jira, sending the transmittal letter via Microsoft Outlook, and logging in Google Sheets.

naftiko: '0.5'
info:
  label: Document Transmittal Pipeline
  description: Manages document transmittals by uploading documents to SharePoint, creating a transmittal record in Jira, sending the transmittal letter via Microsoft Outlook, and logging in Google Sheets.
  tags:
  - construction
  - sharepoint
  - jira
  - microsoft-outlook
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: transmittal
    port: 8080
    tools:
    - name: send-transmittal
      description: Orchestrate document transmittal to client or vendor.
      inputParameters:
      - name: recipient_email
        in: body
        type: string
        description: Recipient email.
      - name: subject
        in: body
        type: string
        description: Transmittal subject.
      - name: document_list
        in: body
        type: string
        description: List of document numbers.
      steps:
      - name: create-record
        type: call
        call: jira.create-issue
        with:
          project: DOC
          summary: 'Transmittal: {{subject}}'
          issue_type: Task
      - name: send-letter
        type: call
        call: outlook.send-email
        with:
          to: '{{recipient_email}}'
          subject: 'Document Transmittal: {{subject}}'
          body: 'Please find the attached documents: {{document_list}}. Transmittal ref: {{create-record.issue_key}}.'
      - name: log-transmittal
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_transmittals
          data: '{{create-record.issue_key}},{{recipient_email}},{{subject}},sent'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → document-transmittal-pipeline.yml

Checks current inventory levels for a material in SAP by material number and plant code.

naftiko: '0.5'
info:
  label: SAP Material Inventory Check
  description: Checks current inventory levels for a material in SAP by material number and plant code.
  tags:
  - construction
  - sap
capability:
  exposes:
  - type: mcp
    namespace: sap
    port: 8080
    tools:
    - name: check-material-inventory
      description: Check material inventory in SAP.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number.
      call: sap.get-inventory
      with:
        material_number: '{{material_number}}'
      outputParameters:
      - name: quantity_on_hand
        type: number
        mapping: $.d.AvailableQuantity
      - name: unit
        type: string
        mapping: $.d.UnitOfMeasure
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: inventory
      path: /API_MATERIAL_STOCK_SRV/A_MatlStkInAcctMod(Material='{{material_number}}')
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-inventory
        method: GET
Open in Framework → View in Fleet → sap-material-inventory-check.yml

Posts an engineering job opening to LinkedIn and logs it in Google Sheets.

naftiko: '0.5'
info:
  label: LinkedIn Engineering Job Publisher
  description: Posts an engineering job opening to LinkedIn and logs it in Google Sheets.
  tags:
  - hr
  - recruiting
  - linkedin
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: post-engineering-job
      description: Publish an engineering job on LinkedIn and track it.
      inputParameters:
      - name: title
        in: body
        type: string
        description: Job title.
      - name: description
        in: body
        type: string
        description: Job description.
      - name: location
        in: body
        type: string
        description: Location.
      steps:
      - name: create-posting
        type: call
        call: linkedin.create-job
        with:
          title: '{{title}}'
          description: '{{description}}'
          location: '{{location}}'
          company_id: bechtel
      - name: log-posting
        type: call
        call: gsheets.append-row
        with:
          spreadsheet_id: bechtel_recruiting
          range: Jobs!A:D
          values:
          - '{{title}}'
          - '{{location}}'
          - '{{create-posting.id}}'
          - active
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: jobs
      path: /simpleJobPostings
      operations:
      - name: create-job
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → linkedin-engineering-job-publisher.yml

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

naftiko: '0.5'
info:
  label: SAP Purchase Order Status
  description: Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery date.
  tags:
  - procurement
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: erp-procurement
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a SAP purchase order by PO number.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: SAP purchase order 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
      - name: total_value
        type: string
        mapping: $.d.TotalAmount
      - name: delivery_date
        type: string
        mapping: $.d.DeliveryDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bechtel-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: purchase-orders
      path: /A_PurchaseOrder('{{po_number}}')
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-purchase-order-status.yml

Retrieves an engineering document from Box cloud storage by file ID.

naftiko: '0.5'
info:
  label: Box Document Retrieval
  description: Retrieves an engineering document from Box cloud storage by file ID.
  tags:
  - construction
  - box
capability:
  exposes:
  - type: mcp
    namespace: box
    port: 8080
    tools:
    - name: get-document
      description: Retrieve a document from Box.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Box file ID.
      call: box.get-file
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: file_name
        type: string
        mapping: $.name
      - name: download_url
        type: string
        mapping: $.shared_link.download_url
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → box-document-retrieval.yml

When a new subcontractor applies, collects their documents from the vendor portal, runs a compliance check, stores certificates in SharePoint, creates a Jira review task, and notifies the procurement team.

naftiko: '0.5'
info:
  label: Subcontractor Pre-Qualification Pipeline
  description: When a new subcontractor applies, collects their documents from the vendor portal, runs a compliance check, stores certificates in SharePoint, creates a Jira review task, and notifies the procurement team.
  tags:
  - procurement
  - compliance
  - construction
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: subcontractor-qual
    port: 8080
    tools:
    - name: qualify-subcontractor
      description: Process a subcontractor pre-qualification application.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: Vendor identifier.
      - name: vendor_name
        in: body
        type: string
        description: Vendor company name.
      - name: trade
        in: body
        type: string
        description: Construction trade specialty.
      steps:
      - name: get-documents
        type: call
        call: vendor-portal.get-qualification-docs
        with:
          vendor_id: '{{vendor_id}}'
      - name: upload-certs
        type: call
        call: sharepoint.upload-file
        with:
          site_id: vendor_qualifications
          folder_path: Subcontractors/{{vendor_name}}
          file_name: qualification_package.pdf
          file_content: '{{get-documents.package}}'
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: PROCUREMENT
          issue_type: Task
          summary: 'Pre-qualification review: {{vendor_name}} ({{trade}})'
          description: 'Documents: {{upload-certs.url}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement_team
          text: 'New subcontractor application: {{vendor_name}} ({{trade}}). Review task: {{create-review.key}}.'
  consumes:
  - type: http
    namespace: vendor-portal
    baseUri: https://vendors.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.vendor_portal_token
    resources:
    - name: qualification
      path: /vendors/{{vendor_id}}/qualification-docs
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-qualification-docs
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → subcontractor-pre-qualification-pipeline.yml

Creates an Azure AD security group for a new project team and adds initial members.

naftiko: '0.5'
info:
  label: Azure Active Directory Group Provisioner
  description: Creates an Azure AD security group for a new project team and adds initial members.
  tags:
  - identity
  - azure-active-directory
  - security
capability:
  exposes:
  - type: mcp
    namespace: identity-mgmt
    port: 8080
    tools:
    - name: provision-project-group
      description: Create an Azure AD group for a new project team.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - 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: Project-{{project_id}}-{{project_name}}
          mail_nickname: proj-{{project_id}}
          owner: '{{owner_email}}'
      - name: notify-owner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{owner_email}}'
          text: 'Azure AD group created for project {{project_name}} ({{project_id}}). Group ID: {{create-group.id}}.'
  consumes:
  - type: http
    namespace: azuread
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: groups
      path: /groups
      operations:
      - name: create-group
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chat/messages
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → azure-active-directory-group-provisioner.yml

Tracks Request for Information responses by creating the RFI in Jira, notifying the design team via Microsoft Teams, storing documents in SharePoint, and logging status in Google Sheets.

naftiko: '0.5'
info:
  label: RFI Response Tracking Pipeline
  description: Tracks Request for Information responses by creating the RFI in Jira, notifying the design team via Microsoft Teams, storing documents in SharePoint, and logging status in Google Sheets.
  tags:
  - construction
  - jira
  - microsoft-teams
  - sharepoint
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: rfi-track
    port: 8080
    tools:
    - name: track-rfi
      description: Orchestrate RFI creation and tracking.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: question
        in: body
        type: string
        description: RFI question.
      - name: discipline
        in: body
        type: string
        description: Engineering discipline.
      steps:
      - name: create-rfi
        type: call
        call: jira.create-issue
        with:
          project: RFI
          summary: 'RFI: {{discipline}} - Project {{project_id}}'
          description: '{{question}}'
          issue_type: Task
      - name: notify-design
        type: call
        call: msteams.send-message
        with:
          channel_id: design_{{discipline}}
          text: 'New RFI {{create-rfi.issue_key}} for project {{project_id}}: {{question}}'
      - name: log-rfi
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_rfi_log
          data: '{{create-rfi.issue_key}},{{project_id}},{{discipline}},open'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → rfi-response-tracking-pipeline.yml

Creates a Jira issue. Reusable building block for task creation.

naftiko: '0.5'
info:
  label: Jira Issue Creator
  description: Creates a Jira issue. Reusable building block for task creation.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: task-mgmt
    port: 8080
    tools:
    - name: create-jira-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://bechtel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → jira-issue-creator.yml

Queries SolarWinds for network device performance metrics and uptime across Bechtel project sites.

naftiko: '0.5'
info:
  label: SolarWinds Network Performance Monitor
  description: Queries SolarWinds for network device performance metrics and uptime across Bechtel project sites.
  tags:
  - monitoring
  - networking
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: network-monitoring
    port: 8080
    tools:
    - name: get-node-performance
      description: Retrieve network node performance 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.bechtel.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query?query=SELECT+*+FROM+Orion.Nodes+WHERE+NodeID={{node_id}}
      inputParameters:
      - name: node_id
        in: path
      operations:
      - name: get-node
        method: GET
Open in Framework → View in Fleet → solarwinds-network-performance-monitor.yml

Manages scaffold inspections by creating a Jira inspection task, logging results in Google Sheets, uploading photos to SharePoint, and notifying the safety team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Scaffold Inspection Pipeline
  description: Manages scaffold inspections by creating a Jira inspection task, logging results in Google Sheets, uploading photos to SharePoint, and notifying the safety team via Microsoft Teams.
  tags:
  - construction
  - jira
  - google-sheets
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: scaffold-inspect
    port: 8080
    tools:
    - name: process-inspection
      description: Orchestrate scaffold inspection workflow.
      inputParameters:
      - name: scaffold_id
        in: body
        type: string
        description: Scaffold ID.
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: result
        in: body
        type: string
        description: Pass or fail.
      steps:
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: SAFETY
          summary: 'Scaffold inspection: {{scaffold_id}} at {{site_code}} - {{result}}'
          issue_type: Task
      - name: log-result
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_scaffold_log
          data: '{{scaffold_id}},{{site_code}},{{result}}'
      - name: notify-safety
        type: call
        call: msteams.send-message
        with:
          channel_id: safety
          text: 'Scaffold {{scaffold_id}} at {{site_code}}: {{result}}. Task: {{create-task.issue_key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → scaffold-inspection-pipeline.yml

Responds to an environmental spill by creating a ServiceNow incident, notifying the environmental team via Microsoft Teams, alerting regulatory contacts via Microsoft Outlook, and logging in Google Sheets.

naftiko: '0.5'
info:
  label: Environmental Spill Response Pipeline
  description: Responds to an environmental spill by creating a ServiceNow incident, notifying the environmental team via Microsoft Teams, alerting regulatory contacts via Microsoft Outlook, and logging in Google Sheets.
  tags:
  - construction
  - servicenow
  - microsoft-teams
  - microsoft-outlook
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: spill-response
    port: 8080
    tools:
    - name: report-spill
      description: Orchestrate environmental spill response.
      inputParameters:
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: substance
        in: body
        type: string
        description: Spilled substance.
      - name: volume
        in: body
        type: string
        description: Estimated volume.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Environmental spill: {{substance}} at {{site_code}}'
          description: Spill of {{substance}}, estimated {{volume}}, at site {{site_code}}.
          urgency: '1'
      - name: notify-env-team
        type: call
        call: msteams.send-message
        with:
          channel_id: environmental
          text: 'SPILL ALERT: {{substance}} ({{volume}}) at site {{site_code}}. Incident: {{create-incident.incident_number}}.'
      - name: alert-regulatory
        type: call
        call: outlook.send-email
        with:
          to: environmental-compliance@bechtel.com
          subject: 'URGENT: Environmental spill at {{site_code}}'
          body: 'Substance: {{substance}}. Volume: {{volume}}. Incident: {{create-incident.incident_number}}. Regulatory notification may be required.'
      - name: log-spill
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_env_incidents
          data: '{{site_code}},{{substance}},{{volume}},{{create-incident.incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bechtel.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → environmental-spill-response-pipeline.yml

Triggers a Power BI dataset refresh for a project dashboard and notifies the project controls team.

naftiko: '0.5'
info:
  label: Power BI Project Dashboard Refresh
  description: Triggers a Power BI dataset refresh for a project dashboard and notifies the project controls team.
  tags:
  - analytics
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-project-dashboard
      description: Trigger a Power BI refresh for a project dashboard and notify the team.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      - name: project_id
        in: body
        type: string
        description: Project 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: project_controls_{{project_id}}
          text: Power BI dashboard refreshed for project {{project_id}}.
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-project-dashboard-refresh.yml

Generates the daily manpower report by pulling headcount from Workday, comparing against planned resources in SAP, logging in Google Sheets, and distributing via Microsoft Teams.

naftiko: '0.5'
info:
  label: Daily Manpower Report Pipeline
  description: Generates the daily manpower report by pulling headcount from Workday, comparing against planned resources in SAP, logging in Google Sheets, and distributing via Microsoft Teams.
  tags:
  - construction
  - workday
  - sap
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: manpower
    port: 8080
    tools:
    - name: generate-manpower-report
      description: Orchestrate daily manpower report generation.
      inputParameters:
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: date
        in: body
        type: string
        description: Report date.
      steps:
      - name: get-actual-headcount
        type: call
        call: workday.get-site-headcount
        with:
          site_code: '{{site_code}}'
          date: '{{date}}'
      - name: get-planned
        type: call
        call: sap.get-planned-resources
        with:
          site_code: '{{site_code}}'
          date: '{{date}}'
      - name: log-report
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_manpower
          data: '{{site_code}},{{date}},{{get-actual-headcount.total}},{{get-planned.total}}'
      - name: distribute
        type: call
        call: msteams.send-message
        with:
          channel_id: site_{{site_code}}
          text: 'Daily manpower {{date}}: Actual={{get-actual-headcount.total}}, Planned={{get-planned.total}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bechtel
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /workers/headcount
      operations:
      - name: get-site-headcount
        method: GET
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: resources
      path: /API_PROJECT_RESOURCE_SRV/PlannedResource
      operations:
      - name: get-planned-resources
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → daily-manpower-report-pipeline.yml

Manages crane lift plan approval by retrieving the plan from SharePoint, creating an approval request in Jira, checking weather via the site weather service, and notifying the safety team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Crane Lift Plan Approval Pipeline
  description: Manages crane lift plan approval by retrieving the plan from SharePoint, creating an approval request in Jira, checking weather via the site weather service, and notifying the safety team via Microsoft Teams.
  tags:
  - construction
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lift-plan
    port: 8080
    tools:
    - name: submit-lift-plan
      description: Orchestrate crane lift plan submission and approval.
      inputParameters:
      - name: plan_id
        in: body
        type: string
        description: Lift plan document ID.
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: lift_date
        in: body
        type: string
        description: Planned lift date.
      steps:
      - name: get-plan
        type: call
        call: sharepoint.get-file
        with:
          site: bechtel-engineering
          path: /lift-plans/{{plan_id}}.pdf
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project: SAFETY
          summary: 'Crane lift plan approval: {{plan_id}} at {{site_code}}'
          issue_type: Approval
          description: Lift plan {{plan_id}} for {{lift_date}} at site {{site_code}} requires safety approval.
      - name: check-weather
        type: call
        call: weather.get-forecast
        with:
          site_code: '{{site_code}}'
          date: '{{lift_date}}'
      - name: notify-safety
        type: call
        call: msteams.send-message
        with:
          channel_id: safety
          text: 'Lift plan {{plan_id}} submitted for {{site_code}} on {{lift_date}}. Wind forecast: {{check-weather.wind_speed}} mph. Approval: {{create-approval.issue_key}}.'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site}}/drive/root:/{{path}}:/content
      inputParameters:
      - name: site
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bechtel.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: weather
    baseUri: https://api.weather.bechtel.com/v1
    authentication:
      type: bearer
      token: $secrets.weather_api_token
    resources:
    - name: forecast
      path: /forecast
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → crane-lift-plan-approval-pipeline.yml

Compares actual project costs in SAP against the budgeted amounts and sends a variance alert to the project controller if thresholds are exceeded.

naftiko: '0.5'
info:
  label: Project Cost Variance Alerter
  description: Compares actual project costs in SAP against the budgeted amounts and sends a variance alert to the project controller if thresholds are exceeded.
  tags:
  - finance
  - project-management
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cost-control
    port: 8080
    tools:
    - name: check-cost-variance
      description: Compare actual vs budgeted project costs and alert on variances.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: SAP project ID.
      - name: variance_threshold_pct
        in: body
        type: number
        description: Threshold percentage for alerting.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-project-costs
        with:
          project_id: '{{project_id}}'
      - name: alert-controller
        type: call
        call: msteams.send-message
        with:
          channel_id: project_controls_{{project_id}}
          text: 'Cost variance alert for project {{project_id}}: Budget ${{get-actuals.budget}}, Actual ${{get-actuals.actual}}, Variance {{get-actuals.variance_pct}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://bechtel-s4.sap.com/sap/opu/odata/sap/API_PROJECT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: project-costs
      path: /A_Project('{{project_id}}')/CostSummary
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → project-cost-variance-alerter.yml

Pulls project cost analytics from SAP BW and returns budget utilization and forecast data.

naftiko: '0.5'
info:
  label: SAP BW Project Cost Report
  description: Pulls project cost analytics from SAP BW and returns budget utilization and forecast data.
  tags:
  - finance
  - analytics
  - sap-bw
capability:
  exposes:
  - type: mcp
    namespace: cost-analytics
    port: 8080
    tools:
    - name: get-cost-report
      description: Retrieve project cost analytics from SAP BW.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: period
        in: body
        type: string
        description: Reporting period.
      call: sap-bw.get-project-costs
      with:
        project_id: '{{project_id}}'
        period: '{{period}}'
      outputParameters:
      - name: budget_utilized_pct
        type: number
        mapping: $.data.budget_utilization
      - name: forecast_at_completion
        type: number
        mapping: $.data.eac
  consumes:
  - type: http
    namespace: sap-bw
    baseUri: https://bechtel-bw.sap.com/sap/bw/odata/v1
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: project-costs
      path: /ProjectCosts(ProjectId='{{project_id}}')
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-costs
        method: GET
Open in Framework → View in Fleet → sap-bw-project-cost-report.yml

Retrieves an employee profile from Workday including name, department, and job title.

naftiko: '0.5'
info:
  label: Workday Employee Profile Lookup
  description: Retrieves an employee profile from Workday including name, department, and job title.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-employee
      description: Look up a Bechtel employee in Workday.
      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: $.worker.full_name
      - name: department
        type: string
        mapping: $.worker.department
      - name: job_title
        type: string
        mapping: $.worker.job_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: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-employee-profile-lookup.yml

Tracks hazardous materials on site by logging inventory in SAP, storing SDS documents in SharePoint, creating compliance tasks in Jira, and alerting the safety team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Hazardous Materials Tracking Pipeline
  description: Tracks hazardous materials on site by logging inventory in SAP, storing SDS documents in SharePoint, creating compliance tasks in Jira, and alerting the safety team via Microsoft Teams.
  tags:
  - construction
  - sap
  - sharepoint
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hazmat
    port: 8080
    tools:
    - name: track-hazmat
      description: Orchestrate hazardous materials tracking and compliance.
      inputParameters:
      - name: material_name
        in: body
        type: string
        description: Hazardous material name.
      - name: quantity
        in: body
        type: string
        description: Quantity on site.
      - name: site_code
        in: body
        type: string
        description: Site code.
      steps:
      - name: log-inventory
        type: call
        call: sap.update-hazmat-inventory
        with:
          material_name: '{{material_name}}'
          quantity: '{{quantity}}'
          site: '{{site_code}}'
      - name: create-compliance-task
        type: call
        call: jira.create-issue
        with:
          project: SAFETY
          summary: 'Hazmat compliance check: {{material_name}} at {{site_code}}'
          issue_type: Task
      - name: alert-safety
        type: call
        call: msteams.send-message
        with:
          channel_id: safety
          text: 'Hazmat update: {{material_name}} ({{quantity}}) at {{site_code}}. Compliance task: {{create-compliance-task.issue_key}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: hazmat
      path: /API_MATERIAL_SRV/Material
      operations:
      - name: update-hazmat-inventory
        method: PATCH
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hazardous-materials-tracking-pipeline.yml

Retrieves project analytics views from Tableau Server for executive review.

naftiko: '0.5'
info:
  label: Tableau Project Analytics Dashboard
  description: Retrieves project analytics views from Tableau Server for executive review.
  tags:
  - analytics
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: project-analytics
    port: 8080
    tools:
    - name: get-dashboard-url
      description: Retrieve a Tableau dashboard URL for a project.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: Tableau workbook name.
      call: tableau.get-workbook
      with:
        workbook_name: '{{workbook_name}}'
      outputParameters:
      - name: url
        type: string
        mapping: $.workbook.contentUrl
      - name: last_updated
        type: string
        mapping: $.workbook.updatedAt
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.bechtel.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks?filter=name:eq:{{workbook_name}}
      inputParameters:
      - name: workbook_name
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-project-analytics-dashboard.yml

Pulls environmental monitoring data, generates a compliance report, uploads it to SharePoint, and emails the environmental officer.

naftiko: '0.5'
info:
  label: Environmental Compliance Report Generator
  description: Pulls environmental monitoring data, generates a compliance report, uploads it to SharePoint, and emails the environmental officer.
  tags:
  - compliance
  - environmental
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: environmental-compliance
    port: 8080
    tools:
    - name: generate-env-report
      description: Generate and distribute an environmental compliance report for a project.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: report_period
        in: body
        type: string
        description: Reporting period.
      - name: officer_email
        in: body
        type: string
        description: Environmental officer email.
      steps:
      - name: get-env-data
        type: call
        call: env-monitoring.get-data
        with:
          project_id: '{{project_id}}'
          period: '{{report_period}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: compliance_{{project_id}}
          folder_path: Environmental/{{report_period}}
          file_name: env_compliance_{{report_period}}.pdf
      - name: email-officer
        type: call
        call: outlook.send-email
        with:
          to: '{{officer_email}}'
          subject: Environmental Compliance Report - Project {{project_id}} - {{report_period}}
          body: 'Report generated and uploaded. Air quality: {{get-env-data.air_quality_status}}. Water: {{get-env-data.water_status}}. Noise: {{get-env-data.noise_status}}.'
  consumes:
  - type: http
    namespace: env-monitoring
    baseUri: https://envmon.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.envmon_token
    resources:
    - name: data
      path: /projects/{{project_id}}/environmental
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-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
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → environmental-compliance-report-generator.yml

Retrieves an engineering document or project file from Amazon S3 by bucket and key.

naftiko: '0.5'
info:
  label: Amazon S3 Document Retrieval
  description: Retrieves an engineering document or project file from Amazon S3 by bucket and key.
  tags:
  - construction
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: s3
    port: 8080
    tools:
    - name: get-document
      description: Retrieve a file from Amazon S3.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: S3 bucket name.
      - 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: last_modified
        type: string
        mapping: $.LastModified
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: get-object
        method: GET
Open in Framework → View in Fleet → amazon-s3-document-retrieval.yml

Responds to construction site network outages by checking Cisco device status, creating a ServiceNow incident, alerting IT via Microsoft Teams, and escalating to the network vendor via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Site Network Outage Response Pipeline
  description: Responds to construction site network outages by checking Cisco device status, creating a ServiceNow incident, alerting IT via Microsoft Teams, and escalating to the network vendor via Microsoft Outlook.
  tags:
  - construction
  - cisco
  - servicenow
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: network-outage
    port: 8080
    tools:
    - name: handle-network-outage
      description: Orchestrate site network outage response.
      inputParameters:
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: device_id
        in: body
        type: string
        description: Network device ID.
      steps:
      - name: check-device
        type: call
        call: cisco.get-device-status
        with:
          device_id: '{{device_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Network outage at site {{site_code}}
          description: 'Device {{device_id}} status: {{check-device.status}}'
          urgency: '1'
      - name: alert-it
        type: call
        call: msteams.send-message
        with:
          channel_id: it_network
          text: 'Network outage at {{site_code}}. Device: {{device_id}}. Status: {{check-device.status}}. Incident: {{create-incident.incident_number}}.'
      - name: escalate
        type: call
        call: outlook.send-email
        with:
          to: network-support@bechtel.com
          subject: 'URGENT: Network outage at site {{site_code}}'
          body: 'Device {{device_id}} is {{check-device.status}}. Incident: {{create-incident.incident_number}}.'
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://cisco-dnac.bechtel.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-status
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bechtel.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
Open in Framework → View in Fleet → site-network-outage-response-pipeline.yml

Tracks delivery status of construction materials from the logistics provider, updates the project schedule, and alerts the site supervisor via Microsoft Teams.

naftiko: '0.5'
info:
  label: Construction Material Delivery Tracker
  description: Tracks delivery status of construction materials from the logistics provider, updates the project schedule, and alerts the site supervisor via Microsoft Teams.
  tags:
  - logistics
  - construction
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: material-tracking
    port: 8080
    tools:
    - name: track-material-delivery
      description: Check delivery status for a construction material shipment and update the project team.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: Shipment tracking ID.
      - name: project_id
        in: body
        type: string
        description: Project ID.
      steps:
      - name: get-shipment
        type: call
        call: logistics.get-shipment-status
        with:
          shipment_id: '{{shipment_id}}'
      - name: update-schedule
        type: call
        call: ms-project.update-delivery-date
        with:
          project_id: '{{project_id}}'
          shipment_id: '{{shipment_id}}'
          eta: '{{get-shipment.estimated_delivery}}'
      - name: notify-site
        type: call
        call: msteams.send-message
        with:
          channel_id: site_{{project_id}}
          text: 'Material shipment {{shipment_id}} status: {{get-shipment.status}}. ETA: {{get-shipment.estimated_delivery}}.'
  consumes:
  - type: http
    namespace: logistics
    baseUri: https://logistics.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.logistics_token
    resources:
    - name: shipments
      path: /shipments/{{shipment_id}}
      inputParameters:
      - name: shipment_id
        in: path
      operations:
      - name: get-shipment-status
        method: GET
  - type: http
    namespace: ms-project
    baseUri: https://project.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.msproject_token
    resources:
    - name: deliveries
      path: /projects/{{project_id}}/deliveries/{{shipment_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: shipment_id
        in: path
      operations:
      - name: update-delivery-date
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → construction-material-delivery-tracker.yml

When a construction permit is needed, gathers project details from Oracle Primavera, prepares the application documents, uploads to SharePoint, and creates a Jira task to track the permit application.

naftiko: '0.5'
info:
  label: Permit Application Pipeline
  description: When a construction permit is needed, gathers project details from Oracle Primavera, prepares the application documents, uploads to SharePoint, and creates a Jira task to track the permit application.
  tags:
  - construction
  - compliance
  - permits
  - oracle
  - sharepoint
  - jira
capability:
  exposes:
  - type: mcp
    namespace: permits
    port: 8080
    tools:
    - name: initiate-permit-application
      description: Prepare and track a construction permit application.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: permit_type
        in: body
        type: string
        description: Type of permit.
      - name: jurisdiction
        in: body
        type: string
        description: Regulatory jurisdiction.
      steps:
      - name: get-project-details
        type: call
        call: oracle-primavera.get-project
        with:
          project_id: '{{project_id}}'
      - name: upload-application
        type: call
        call: sharepoint.upload-file
        with:
          site_id: project_{{project_id}}
          folder_path: Permits/{{permit_type}}
          file_name: permit_application_{{permit_type}}.pdf
      - name: create-tracker
        type: call
        call: jira.create-issue
        with:
          project: PERMITS
          issue_type: Task
          summary: '{{permit_type}} permit for project {{project_id}} - {{jurisdiction}}'
          description: 'Application uploaded: {{upload-application.url}}. Project: {{get-project-details.name}}.'
  consumes:
  - type: http
    namespace: oracle-primavera
    baseUri: https://primavera.bechtel.com/p6ws/restapi
    authentication:
      type: basic
      username: $secrets.primavera_user
      password: $secrets.primavera_password
    resources:
    - name: projects
      path: /project?Filter=ObjectId={{project_id}}
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project
        method: GET
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → permit-application-pipeline.yml

Executes a search query against Splunk for construction site operational logs and IoT sensor data.

naftiko: '0.5'
info:
  label: Splunk Construction Log Search
  description: Executes a search query against Splunk for construction site operational logs and IoT sensor data.
  tags:
  - construction
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: splunk
    port: 8080
    tools:
    - name: search-logs
      description: Search Splunk for construction site logs.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Splunk search query.
      call: splunk.create-search
      with:
        search: '{{query}}'
      outputParameters:
      - name: search_id
        type: string
        mapping: $.sid
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.bechtel.com:8089
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /services/search/jobs
      operations:
      - name: create-search
        method: POST
Open in Framework → View in Fleet → splunk-construction-log-search.yml

Checks the status of Fortinet VPN connections for remote construction site offices.

naftiko: '0.5'
info:
  label: Fortinet VPN Status Check
  description: Checks the status of Fortinet VPN connections for remote construction site offices.
  tags:
  - security
  - networking
  - fortinet
capability:
  exposes:
  - type: mcp
    namespace: vpn
    port: 8080
    tools:
    - name: get-vpn-status
      description: Check the status of a Fortinet VPN tunnel.
      inputParameters:
      - name: tunnel_name
        in: body
        type: string
        description: VPN tunnel name.
      call: fortinet.get-vpn-tunnel
      with:
        tunnel_name: '{{tunnel_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.results.status
      - name: incoming_bytes
        type: number
        mapping: $.results.incoming_bytes
      - name: outgoing_bytes
        type: number
        mapping: $.results.outgoing_bytes
  consumes:
  - type: http
    namespace: fortinet
    baseUri: https://fortigate.bechtel.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fortinet_token
    resources:
    - name: vpn
      path: /monitor/vpn/ipsec?name={{tunnel_name}}
      inputParameters:
      - name: tunnel_name
        in: path
      operations:
      - name: get-vpn-tunnel
        method: GET
Open in Framework → View in Fleet → fortinet-vpn-status-check.yml

Generates monthly cost forecasts by pulling actuals from SAP, running forecast models in Snowflake, refreshing the Power BI dashboard, and distributing the report via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Monthly Cost Forecast Pipeline
  description: Generates monthly cost forecasts by pulling actuals from SAP, running forecast models in Snowflake, refreshing the Power BI dashboard, and distributing the report via Microsoft Outlook.
  tags:
  - construction
  - sap
  - snowflake
  - power-bi
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: cost-forecast
    port: 8080
    tools:
    - name: generate-forecast
      description: Orchestrate monthly cost forecast generation.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: month
        in: body
        type: string
        description: Forecast month.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-project-costs
        with:
          project_id: '{{project_id}}'
          period: '{{month}}'
      - name: run-forecast
        type: call
        call: snowflake.run-forecast-model
        with:
          project_id: '{{project_id}}'
          actuals: '{{get-actuals.cost_data}}'
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: bechtel_forecast_{{project_id}}
      - name: distribute-report
        type: call
        call: outlook.send-email
        with:
          to: project-{{project_id}}-stakeholders@bechtel.com
          subject: Monthly Cost Forecast - {{project_id}} - {{month}}
          body: 'Actual cost: ${{get-actuals.total}}. Forecast at completion: ${{run-forecast.eac}}. Variance: ${{run-forecast.variance}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: costs
      path: /API_PROJECT_COST_SRV/ProjectCost
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://bechtel.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-forecast-model
        method: POST
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → monthly-cost-forecast-pipeline.yml

Triggers a MATLAB simulation on Bechtel engineering compute infrastructure and retrieves the results.

naftiko: '0.5'
info:
  label: MATLAB Engineering Simulation Runner
  description: Triggers a MATLAB simulation on Bechtel engineering compute infrastructure and retrieves the results.
  tags:
  - engineering
  - simulation
  - matlab
capability:
  exposes:
  - type: mcp
    namespace: engineering-compute
    port: 8080
    tools:
    - name: run-simulation
      description: Execute a MATLAB engineering simulation and return results.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: MATLAB model name.
      - name: parameters
        in: body
        type: object
        description: Simulation input parameters.
      steps:
      - name: submit-job
        type: call
        call: matlab.submit-job
        with:
          model: '{{model_name}}'
          inputs: '{{parameters}}'
      - name: get-results
        type: call
        call: matlab.get-job-results
        with:
          job_id: '{{submit-job.job_id}}'
  consumes:
  - type: http
    namespace: matlab
    baseUri: https://matlab-compute.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.matlab_token
    resources:
    - name: jobs
      path: /jobs
      operations:
      - name: submit-job
        method: POST
    - name: results
      path: /jobs/{{job_id}}/results
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: get-job-results
        method: GET
Open in Framework → View in Fleet → matlab-engineering-simulation-runner.yml

Queries Workday for an employee's current time-off balance by employee ID.

naftiko: '0.5'
info:
  label: Workday Time Off Balance Lookup
  description: Queries Workday for an employee's current time-off balance by employee ID.
  tags:
  - construction
  - workday
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: get-time-off-balance
      description: Look up employee time-off balance in Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Employee ID.
      call: workday.get-balance
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: vacation_hours
        type: number
        mapping: $.data.vacation_balance
      - name: sick_hours
        type: number
        mapping: $.data.sick_balance
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bechtel
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-off
      path: /workers/{{employee_id}}/timeOffBalance
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → workday-time-off-balance-lookup.yml

Triggers a reload of a Qlik Sense app to refresh project analytics dashboards with latest data.

naftiko: '0.5'
info:
  label: Qlik Sense Dashboard Reload
  description: Triggers a reload of a Qlik Sense app to refresh project analytics dashboards with latest data.
  tags:
  - construction
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: qlik
    port: 8080
    tools:
    - name: reload-app
      description: Trigger a Qlik Sense app 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.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: reloads
      path: /reloads
      operations:
      - name: reload-app
        method: POST
Open in Framework → View in Fleet → qlik-sense-dashboard-reload.yml

Sends a message to a Microsoft Teams channel. Reusable notification building block.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Notifier
  description: Sends a message to a Microsoft Teams channel. Reusable notification building block.
  tags:
  - collaboration
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: teams-messaging
    port: 8080
    tools:
    - name: send-channel-message
      description: Post a message to a Teams channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: Channel ID.
      - name: text
        in: body
        type: string
        description: Message.
      call: msteams.send-message
      with:
        channel_id: '{{channel_id}}'
        text: '{{text}}'
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-notifier.yml

When New Relic fires a performance alert, creates a ServiceNow incident and notifies the SRE team.

naftiko: '0.5'
info:
  label: New Relic Alert Handler
  description: When New Relic fires a performance alert, creates a ServiceNow incident and notifies the SRE team.
  tags:
  - monitoring
  - new-relic
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: perf-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://bechtel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → new-relic-alert-handler.yml

When a construction milestone is completed in Oracle Primavera, updates the project schedule in Microsoft Project, creates a compliance inspection task in ServiceNow, uploads progress photos to SharePoint, and notifies the project team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Project Construction Milestone Orchestrator
  description: When a construction milestone is completed in Oracle Primavera, updates the project schedule in Microsoft Project, creates a compliance inspection task in ServiceNow, uploads progress photos to SharePoint, and notifies the project team in Microsoft Teams.
  tags:
  - construction
  - project-management
  - oracle
  - microsoft-project
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: project-milestones
    port: 8080
    tools:
    - name: complete-milestone
      description: Process a construction milestone completion across project management, compliance, and documentation systems.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Bechtel project identifier.
      - name: milestone_id
        in: body
        type: string
        description: Milestone identifier.
      - name: completion_date
        in: body
        type: string
        description: Completion date in YYYY-MM-DD format.
      - name: inspector_email
        in: body
        type: string
        description: Assigned inspector email.
      steps:
      - name: get-milestone
        type: call
        call: oracle-primavera.get-activity
        with:
          project_id: '{{project_id}}'
          activity_id: '{{milestone_id}}'
      - name: update-schedule
        type: call
        call: ms-project.update-task
        with:
          project_id: '{{project_id}}'
          task_id: '{{milestone_id}}'
          actual_finish: '{{completion_date}}'
          percent_complete: 100
      - name: create-inspection
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Inspection required: milestone {{get-milestone.name}} on project {{project_id}}'
          category: construction_inspection
          assigned_to: '{{inspector_email}}'
          description: Milestone {{get-milestone.name}} completed {{completion_date}}. Inspection required before proceeding.
      - name: upload-photos
        type: call
        call: sharepoint.upload-file
        with:
          site_id: project_{{project_id}}
          folder_path: Milestones/{{milestone_id}}/Photos
          file_name: completion_{{completion_date}}.zip
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: project_{{project_id}}
          text: 'Milestone ''{{get-milestone.name}}'' completed on {{completion_date}}. Inspection ticket: {{create-inspection.number}}. Photos uploaded to SharePoint.'
  consumes:
  - type: http
    namespace: oracle-primavera
    baseUri: https://primavera.bechtel.com/p6ws/restapi
    authentication:
      type: basic
      username: $secrets.primavera_user
      password: $secrets.primavera_password
    resources:
    - name: activities
      path: /activity?Fields=Name,Status,PlannedFinish&Filter=ObjectId={{activity_id}}
      inputParameters:
      - name: activity_id
        in: path
      operations:
      - name: get-activity
        method: GET
  - type: http
    namespace: ms-project
    baseUri: https://project.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.msproject_token
    resources:
    - name: tasks
      path: /projects/{{project_id}}/tasks/{{task_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: task_id
        in: path
      operations:
      - name: update-task
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://bechtel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → project-construction-milestone-orchestrator.yml

Processes a design drawing revision by uploading to SharePoint, notifying the engineering team via Microsoft Teams, creating a Jira review task, and logging the revision in Google Sheets.

naftiko: '0.5'
info:
  label: Design Drawing Revision Pipeline
  description: Processes a design drawing revision by uploading to SharePoint, notifying the engineering team via Microsoft Teams, creating a Jira review task, and logging the revision in Google Sheets.
  tags:
  - construction
  - sharepoint
  - microsoft-teams
  - jira
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: drawing-rev
    port: 8080
    tools:
    - name: process-revision
      description: Orchestrate design drawing revision workflow.
      inputParameters:
      - name: drawing_number
        in: body
        type: string
        description: Drawing number.
      - name: revision
        in: body
        type: string
        description: Revision letter.
      - name: discipline
        in: body
        type: string
        description: Engineering discipline.
      steps:
      - name: upload-drawing
        type: call
        call: sharepoint.upload-file
        with:
          site: bechtel-engineering
          folder: drawings/{{drawing_number}}
          file_name: '{{drawing_number}}_Rev{{revision}}.pdf'
      - name: notify-engineers
        type: call
        call: msteams.send-message
        with:
          channel_id: engineering_{{discipline}}
          text: Drawing {{drawing_number}} Rev {{revision}} uploaded. Please review.
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: ENG
          summary: Review drawing {{drawing_number}} Rev {{revision}}
          issue_type: Task
      - name: log-revision
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_drawing_log
          data: '{{drawing_number}},{{revision}},{{discipline}},{{create-review.issue_key}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /sites/{{site}}/drive/root:/{{folder}}/{{file_name}}:/content
      inputParameters:
      - name: site
        in: path
      - name: folder
        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
  - type: http
    namespace: jira
    baseUri: https://bechtel.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
Open in Framework → View in Fleet → design-drawing-revision-pipeline.yml

When heavy equipment fails on site, logs the incident in ServiceNow, creates a maintenance work order in SAP, notifies the site supervisor via Microsoft Teams, and updates the equipment tracker in Google Sheets.

naftiko: '0.5'
info:
  label: Heavy Equipment Failure Response Pipeline
  description: When heavy equipment fails on site, logs the incident in ServiceNow, creates a maintenance work order in SAP, notifies the site supervisor via Microsoft Teams, and updates the equipment tracker in Google Sheets.
  tags:
  - construction
  - servicenow
  - sap
  - microsoft-teams
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: equip-failure
    port: 8080
    tools:
    - name: handle-equipment-failure
      description: Orchestrate equipment failure response across systems.
      inputParameters:
      - name: equipment_id
        in: body
        type: string
        description: Equipment asset ID.
      - name: site_code
        in: body
        type: string
        description: Construction site code.
      - name: failure_description
        in: body
        type: string
        description: Description of failure.
      steps:
      - name: log-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Equipment failure: {{equipment_id}} at site {{site_code}}'
          description: '{{failure_description}}'
          urgency: '1'
      - name: create-work-order
        type: call
        call: sap.create-maintenance-order
        with:
          equipment_id: '{{equipment_id}}'
          description: '{{failure_description}}'
          priority: high
      - name: notify-supervisor
        type: call
        call: msteams.send-message
        with:
          channel_id: site_{{site_code}}
          text: 'Equipment {{equipment_id}} failure reported. SNOW: {{log-incident.incident_number}}. SAP WO: {{create-work-order.order_number}}.'
      - name: update-tracker
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_equip_tracker
          data: '{{equipment_id}},{{site_code}},down,{{log-incident.incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bechtel.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: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: maintenance-orders
      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
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → heavy-equipment-failure-response-pipeline.yml

Creates a scheduled Zoom meeting for project coordination calls and safety briefings.

naftiko: '0.5'
info:
  label: Zoom Meeting Scheduler
  description: Creates a scheduled Zoom meeting for project coordination calls and safety briefings.
  tags:
  - construction
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom
    port: 8080
    tools:
    - name: create-meeting
      description: Schedule a Zoom meeting.
      inputParameters:
      - name: topic
        in: body
        type: string
        description: Meeting topic.
      - name: start_time
        in: body
        type: string
        description: Start time in ISO 8601.
      call: zoom.create-meeting
      with:
        topic: '{{topic}}'
        start_time: '{{start_time}}'
      outputParameters:
      - name: meeting_id
        type: string
        mapping: $.id
      - name: join_url
        type: string
        mapping: $.join_url
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
Open in Framework → View in Fleet → zoom-meeting-scheduler.yml

When an engineer submits a travel expense report in SAP Concur, validates against project budget in SAP, creates an approval workflow in Microsoft Power Automate, and notifies the project manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Travel Expense Processor
  description: When an engineer submits a travel expense report in SAP Concur, validates against project budget in SAP, creates an approval workflow in Microsoft Power Automate, and notifies the project manager in Microsoft Teams.
  tags:
  - finance
  - travel
  - sap-concur
  - sap
  - microsoft-power-automate
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: travel-expenses
    port: 8080
    tools:
    - name: process-expense-report
      description: Validate and route a travel expense report through the approval workflow.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Concur expense report ID.
      - name: project_id
        in: body
        type: string
        description: Associated project ID.
      - name: pm_email
        in: body
        type: string
        description: Project manager email.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: check-budget
        type: call
        call: sap.check-project-budget
        with:
          project_id: '{{project_id}}'
          amount: '{{get-report.total_amount}}'
      - name: trigger-approval
        type: call
        call: power-automate.trigger-flow
        with:
          flow_id: expense_approval
          report_id: '{{report_id}}'
          amount: '{{get-report.total_amount}}'
      - name: notify-pm
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{pm_email}}'
          text: 'Expense report {{report_id}} submitted for project {{project_id}}: ${{get-report.total_amount}}. Budget status: {{check-budget.status}}.'
  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: sap
    baseUri: https://bechtel-s4.sap.com/sap/opu/odata/sap/API_PROJECT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: budgets
      path: /A_Project('{{project_id}}')/Budget
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: check-project-budget
        method: GET
  - 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/chat/messages
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → sap-concur-travel-expense-processor.yml

Schedules a concrete pour by checking weather conditions, verifying material availability in SAP, creating a Jira task for the crew, and notifying the project manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Concrete Pour Scheduling Pipeline
  description: Schedules a concrete pour by checking weather conditions, verifying material availability in SAP, creating a Jira task for the crew, and notifying the project manager via Microsoft Teams.
  tags:
  - construction
  - sap
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: concrete-pour
    port: 8080
    tools:
    - name: schedule-pour
      description: Orchestrate concrete pour scheduling with weather and material checks.
      inputParameters:
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: pour_date
        in: body
        type: string
        description: Planned pour date.
      - name: volume_cubic_yards
        in: body
        type: number
        description: Volume in cubic yards.
      steps:
      - name: check-weather
        type: call
        call: weather.get-forecast
        with:
          site_code: '{{site_code}}'
          date: '{{pour_date}}'
      - name: verify-material
        type: call
        call: sap.check-material-availability
        with:
          material: CONCRETE_MIX
          quantity: '{{volume_cubic_yards}}'
      - name: create-task
        type: call
        call: jira.create-issue
        with:
          project: SITE
          summary: 'Concrete pour: {{volume_cubic_yards}} cy at {{site_code}} on {{pour_date}}'
          issue_type: Task
      - name: notify-pm
        type: call
        call: msteams.send-message
        with:
          channel_id: project_mgmt
          text: 'Concrete pour scheduled: {{volume_cubic_yards}} cy at {{site_code}} on {{pour_date}}. Weather: {{check-weather.conditions}}. Material: {{verify-material.status}}.'
  consumes:
  - type: http
    namespace: weather
    baseUri: https://api.weather.bechtel.com/v1
    authentication:
      type: bearer
      token: $secrets.weather_api_token
    resources:
    - name: forecast
      path: /forecast
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: material-availability
      path: /API_MATERIAL_STOCK_SRV/A_MatlStkInAcctMod
      operations:
      - name: check-material-availability
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → concrete-pour-scheduling-pipeline.yml

Retrieves the current state, priority, and assignment for a ServiceNow incident.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Lookup
  description: Retrieves the current state, priority, and assignment for a ServiceNow incident.
  tags:
  - it-support
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-support
    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:
        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
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bechtel.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident?sysparm_query=number={{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status-lookup.yml

Retrieves the latest run status for a Terraform Cloud workspace used for infrastructure provisioning.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Status
  description: Retrieves the latest run status for a Terraform Cloud workspace used for infrastructure provisioning.
  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
      - name: created_at
        type: string
        mapping: $.data.attributes.created-at
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /workspaces/{{workspace_id}}/runs?page[size]=1
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: get-latest-run
        method: GET
Open in Framework → View in Fleet → terraform-cloud-workspace-status.yml

Reconciles labor timesheets by pulling data from Workday, comparing against SAP project charges, flagging discrepancies in Google Sheets, and notifying project controls via Microsoft Teams.

naftiko: '0.5'
info:
  label: Labor Timesheet Reconciliation Pipeline
  description: Reconciles labor timesheets by pulling data from Workday, comparing against SAP project charges, flagging discrepancies in Google Sheets, and notifying project controls via Microsoft Teams.
  tags:
  - construction
  - workday
  - sap
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: timesheet-recon
    port: 8080
    tools:
    - name: reconcile-timesheets
      description: Orchestrate labor timesheet reconciliation.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: period
        in: body
        type: string
        description: Pay period.
      steps:
      - name: get-workday-hours
        type: call
        call: workday.get-time-entries
        with:
          project_id: '{{project_id}}'
          period: '{{period}}'
      - name: get-sap-charges
        type: call
        call: sap.get-labor-charges
        with:
          project_id: '{{project_id}}'
          period: '{{period}}'
      - name: log-discrepancies
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_timesheet_recon
          data: '{{project_id}},{{period}},{{get-workday-hours.total}},{{get-sap-charges.total}}'
      - name: notify-controls
        type: call
        call: msteams.send-message
        with:
          channel_id: project_controls
          text: 'Timesheet reconciliation for {{project_id}} period {{period}}: Workday={{get-workday-hours.total}} hrs, SAP={{get-sap-charges.total}} hrs.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bechtel
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-entries
      path: /workers/timeEntries
      operations:
      - name: get-time-entries
        method: GET
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: labor
      path: /API_PROJECT_LABOR_SRV/LaborCharges
      operations:
      - name: get-labor-charges
        method: GET
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → labor-timesheet-reconciliation-pipeline.yml

Processes hot work permit requests by creating the permit in Jira, verifying fire watch requirements in the safety system, logging in Google Sheets, and notifying the area supervisor via Microsoft Teams.

naftiko: '0.5'
info:
  label: Hot Work Permit Pipeline
  description: Processes hot work permit requests by creating the permit in Jira, verifying fire watch requirements in the safety system, logging in Google Sheets, and notifying the area supervisor via Microsoft Teams.
  tags:
  - construction
  - jira
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hot-work
    port: 8080
    tools:
    - name: request-hot-work-permit
      description: Orchestrate hot work permit request and approval.
      inputParameters:
      - name: location
        in: body
        type: string
        description: Work location.
      - name: work_type
        in: body
        type: string
        description: Type of hot work.
      - name: site_code
        in: body
        type: string
        description: Site code.
      steps:
      - name: create-permit
        type: call
        call: jira.create-issue
        with:
          project: SAFETY
          summary: 'Hot work permit: {{work_type}} at {{location}}'
          issue_type: Approval
      - name: log-permit
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_permits
          data: '{{site_code}},{{location}},{{work_type}},{{create-permit.issue_key}},pending'
      - name: notify-supervisor
        type: call
        call: msteams.send-message
        with:
          channel_id: site_{{site_code}}
          text: 'Hot work permit requested: {{work_type}} at {{location}}. Permit: {{create-permit.issue_key}}. Fire watch required.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → hot-work-permit-pipeline.yml

Processes subcontractor invoices by verifying scope in SAP, creating an approval task in Jira, notifying project controls via Microsoft Teams, and sending payment status to the subcontractor via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Subcontractor Invoice Approval Pipeline
  description: Processes subcontractor invoices by verifying scope in SAP, creating an approval task in Jira, notifying project controls via Microsoft Teams, and sending payment status to the subcontractor via Microsoft Outlook.
  tags:
  - construction
  - sap
  - jira
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: sub-invoice
    port: 8080
    tools:
    - name: process-sub-invoice
      description: Orchestrate subcontractor invoice approval.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: Invoice number.
      - name: subcontractor_name
        in: body
        type: string
        description: Subcontractor name.
      - name: amount
        in: body
        type: number
        description: Invoice amount.
      steps:
      - name: verify-scope
        type: call
        call: sap.verify-subcontract
        with:
          invoice_number: '{{invoice_number}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project: FINANCE
          summary: 'Invoice approval: {{subcontractor_name}} - ${{amount}}'
          issue_type: Approval
      - name: notify-controls
        type: call
        call: msteams.send-message
        with:
          channel_id: project_controls
          text: 'Sub invoice {{invoice_number}} from {{subcontractor_name}}: ${{amount}}. Approval: {{create-approval.issue_key}}.'
      - name: notify-sub
        type: call
        call: outlook.send-email
        with:
          to: '{{verify-scope.contact_email}}'
          subject: Invoice {{invoice_number}} - Under Review
          body: Your invoice {{invoice_number}} for ${{amount}} is being reviewed.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: subcontracts
      path: /API_PURCHASEORDER_SRV/PurchaseOrder
      operations:
      - name: verify-subcontract
        method: GET
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → subcontractor-invoice-approval-pipeline.yml

Retrieves monthly cloud infrastructure costs from Oracle Cloud for Bechtel project environments.

naftiko: '0.5'
info:
  label: Oracle Cloud Cost Report
  description: Retrieves monthly cloud infrastructure costs from Oracle Cloud for Bechtel project environments.
  tags:
  - finance
  - cloud
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: cloud-costs
    port: 8080
    tools:
    - name: get-cloud-costs
      description: Retrieve Oracle Cloud monthly cost report for a project compartment.
      inputParameters:
      - name: compartment_id
        in: body
        type: string
        description: Oracle Cloud compartment ID.
      - name: month
        in: body
        type: string
        description: Month in YYYY-MM format.
      call: oci.get-cost-report
      with:
        compartment_id: '{{compartment_id}}'
        time_period: '{{month}}'
      outputParameters:
      - name: total_cost
        type: number
        mapping: $.data.total_cost
      - name: service_breakdown
        type: array
        mapping: $.data.services
  consumes:
  - type: http
    namespace: oci
    baseUri: https://usageapi.us-ashburn-1.oci.oraclecloud.com/20200107
    authentication:
      type: bearer
      token: $secrets.oci_token
    resources:
    - name: usage
      path: /usage
      operations:
      - name: get-cost-report
        method: POST
Open in Framework → View in Fleet → oracle-cloud-cost-report.yml

Creates a new risk entry in the project risk register on SharePoint and notifies the risk manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Risk Register Entry Creator
  description: Creates a new risk entry in the project risk register on SharePoint and notifies the risk manager via Microsoft Teams.
  tags:
  - project-management
  - risk-management
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: risk-management
    port: 8080
    tools:
    - name: create-risk-entry
      description: Add a risk to the project risk register and notify the risk manager.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: risk_description
        in: body
        type: string
        description: Risk description.
      - name: likelihood
        in: body
        type: string
        description: Likelihood rating.
      - name: impact
        in: body
        type: string
        description: Impact rating.
      steps:
      - name: add-to-register
        type: call
        call: sharepoint.add-list-item
        with:
          site_id: project_{{project_id}}
          list_name: RiskRegister
          fields:
            Description: '{{risk_description}}'
            Likelihood: '{{likelihood}}'
            Impact: '{{impact}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: risk_{{project_id}}
          text: 'New risk logged on project {{project_id}}: {{risk_description}} ({{likelihood}}/{{impact}}). ID: {{add-to-register.id}}'
  consumes:
  - 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: add-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: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → risk-register-entry-creator.yml

Processes employee travel requests by creating the request in SAP Concur, getting manager approval via Jira, booking via the travel system, and notifying the employee via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Travel Request Approval Pipeline
  description: Processes employee travel requests by creating the request in SAP Concur, getting manager approval via Jira, booking via the travel system, and notifying the employee via Microsoft Outlook.
  tags:
  - construction
  - sap-concur
  - jira
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: travel-request
    port: 8080
    tools:
    - name: process-travel-request
      description: Orchestrate travel request approval workflow.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Employee ID.
      - name: destination
        in: body
        type: string
        description: Travel destination.
      - name: travel_dates
        in: body
        type: string
        description: Travel date range.
      steps:
      - name: create-request
        type: call
        call: concur.create-travel-request
        with:
          employee_id: '{{employee_id}}'
          destination: '{{destination}}'
          dates: '{{travel_dates}}'
      - name: create-approval
        type: call
        call: jira.create-issue
        with:
          project: TRAVEL
          summary: 'Travel approval: {{employee_id}} to {{destination}}'
          issue_type: Approval
      - name: notify-employee
        type: call
        call: outlook.send-email
        with:
          to: '{{employee_id}}@bechtel.com'
          subject: Travel Request Submitted - {{destination}}
          body: 'Your travel request to {{destination}} for {{travel_dates}} has been submitted. Concur ref: {{create-request.request_id}}. Approval: {{create-approval.issue_key}}.'
  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
      operations:
      - name: create-travel-request
        method: POST
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → travel-request-approval-pipeline.yml

When an engineering document is submitted for approval, creates a review task in Jira, notifies the reviewing engineer via Microsoft Teams, and updates the document status in the EDMS upon approval.

naftiko: '0.5'
info:
  label: Engineering Document Approval Workflow
  description: When an engineering document is submitted for approval, creates a review task in Jira, notifies the reviewing engineer via Microsoft Teams, and updates the document status in the EDMS upon approval.
  tags:
  - engineering
  - document-management
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: doc-approval
    port: 8080
    tools:
    - name: submit-for-approval
      description: Submit an engineering document for review and route the approval workflow.
      inputParameters:
      - name: drawing_number
        in: body
        type: string
        description: Drawing number.
      - name: reviewer_email
        in: body
        type: string
        description: Reviewer email.
      - name: project_id
        in: body
        type: string
        description: Project ID.
      steps:
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project: ENGREV
          issue_type: Task
          summary: Review drawing {{drawing_number}} for project {{project_id}}
          assignee: '{{reviewer_email}}'
      - name: notify-reviewer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{reviewer_email}}'
          text: 'Drawing {{drawing_number}} is ready for your review. Jira task: {{create-review.key}}.'
      - name: update-status
        type: call
        call: edms.update-drawing-status
        with:
          drawing_number: '{{drawing_number}}'
          status: in_review
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: 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: chat-messages
      path: /users/{{recipient_upn}}/chat/messages
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: edms
    baseUri: https://edms.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.edms_token
    resources:
    - name: drawings
      path: /drawings/{{drawing_number}}/status
      inputParameters:
      - name: drawing_number
        in: path
      operations:
      - name: update-drawing-status
        method: PUT
Open in Framework → View in Fleet → engineering-document-approval-workflow.yml

Kicks off a new project by creating the project structure in SAP, setting up the Primavera schedule, provisioning a SharePoint site, and scheduling a kickoff meeting via Zoom.

naftiko: '0.5'
info:
  label: New Project Kickoff Orchestrator
  description: Kicks off a new project by creating the project structure in SAP, setting up the Primavera schedule, provisioning a SharePoint site, and scheduling a kickoff meeting via Zoom.
  tags:
  - construction
  - sap
  - sharepoint
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: project-kickoff
    port: 8080
    tools:
    - name: kickoff-project
      description: Orchestrate new project kickoff across systems.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: Project name.
      - name: project_code
        in: body
        type: string
        description: Project code.
      - name: pm_email
        in: body
        type: string
        description: Project manager email.
      steps:
      - name: create-sap-project
        type: call
        call: sap.create-project
        with:
          project_code: '{{project_code}}'
          project_name: '{{project_name}}'
      - name: create-schedule
        type: call
        call: primavera.create-project
        with:
          project_code: '{{project_code}}'
          project_name: '{{project_name}}'
      - name: provision-site
        type: call
        call: sharepoint.create-site
        with:
          name: Project-{{project_code}}
          template: project_site
      - name: schedule-kickoff
        type: call
        call: zoom.create-meeting
        with:
          topic: 'Project Kickoff: {{project_name}}'
          duration: 60
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.bechtel.com/sap/opu/odata/sap
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: projects
      path: /API_PROJECT_SRV/Project
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: primavera
    baseUri: https://primavera.bechtel.com/api/restapi
    authentication:
      type: bearer
      token: $secrets.primavera_token
    resources:
    - name: projects
      path: /project
      operations:
      - name: create-project
        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: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /users/me/meetings
      operations:
      - name: create-meeting
        method: POST
Open in Framework → View in Fleet → new-project-kickoff-orchestrator.yml

Processes field nonconformance reports by creating a Jira NCR ticket, logging in Google Sheets, uploading evidence to SharePoint, and alerting the QA manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Field Nonconformance Report Pipeline
  description: Processes field nonconformance reports by creating a Jira NCR ticket, logging in Google Sheets, uploading evidence to SharePoint, and alerting the QA manager via Microsoft Teams.
  tags:
  - construction
  - jira
  - google-sheets
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ncr
    port: 8080
    tools:
    - name: submit-ncr
      description: Orchestrate nonconformance report submission.
      inputParameters:
      - name: description
        in: body
        type: string
        description: NCR description.
      - name: severity
        in: body
        type: string
        description: Severity level.
      - name: site_code
        in: body
        type: string
        description: Site code.
      steps:
      - name: create-ncr
        type: call
        call: jira.create-issue
        with:
          project: QA
          summary: 'NCR: {{description}}'
          issue_type: Bug
          priority: '{{severity}}'
      - name: log-ncr
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_ncr_log
          data: '{{create-ncr.issue_key}},{{site_code}},{{severity}},{{description}}'
      - name: alert-qa
        type: call
        call: msteams.send-message
        with:
          channel_id: quality_assurance
          text: 'NCR {{create-ncr.issue_key}} at {{site_code}}: {{description}}. Severity: {{severity}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → field-nonconformance-report-pipeline.yml

Checks the status of VPN connections on the Fortinet firewall for remote site connectivity.

naftiko: '0.5'
info:
  label: Fortinet VPN Connection Status
  description: Checks the status of VPN connections on the Fortinet firewall for remote site connectivity.
  tags:
  - construction
  - fortinet
capability:
  exposes:
  - type: mcp
    namespace: fortinet
    port: 8080
    tools:
    - name: get-vpn-status
      description: Check Fortinet VPN connection status.
      inputParameters:
      - name: tunnel_name
        in: body
        type: string
        description: VPN tunnel name.
      call: fortinet.get-vpn
      with:
        tunnel_name: '{{tunnel_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.results[0].status
      - name: incoming_bytes
        type: number
        mapping: $.results[0].incoming_bytes
  consumes:
  - type: http
    namespace: fortinet
    baseUri: https://fortinet.bechtel.com/api/v2
    authentication:
      type: bearer
      token: $secrets.fortinet_token
    resources:
    - name: vpn
      path: /monitor/vpn/ipsec
      operations:
      - name: get-vpn
        method: GET
Open in Framework → View in Fleet → fortinet-vpn-connection-status.yml

Queries Cisco network infrastructure for device status and uptime.

naftiko: '0.5'
info:
  label: Cisco Network Device Status Check
  description: Queries Cisco network infrastructure for device status and uptime.
  tags:
  - infrastructure
  - networking
  - cisco
capability:
  exposes:
  - type: mcp
    namespace: network
    port: 8080
    tools:
    - name: check-device-status
      description: Check the status of a Cisco network device.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Cisco device ID.
      call: cisco.get-device
      with:
        device_id: '{{device_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.device.reachabilityStatus
      - name: uptime
        type: string
        mapping: $.device.upTime
      - name: hostname
        type: string
        mapping: $.device.hostname
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://dnac.bechtel.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_dnac_token
    resources:
    - name: devices
      path: /network-device/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → cisco-network-device-status-check.yml

Pulls schedule variance data from Oracle Primavera and emails a summary to the project director.

naftiko: '0.5'
info:
  label: Primavera Schedule Variance Report
  description: Pulls schedule variance data from Oracle Primavera and emails a summary to the project director.
  tags:
  - project-management
  - oracle
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: schedule-analytics
    port: 8080
    tools:
    - name: get-schedule-variance
      description: Retrieve schedule variance and email the director.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: director_email
        in: body
        type: string
        description: Director email.
      steps:
      - name: get-variance
        type: call
        call: oracle-primavera.get-variance
        with:
          project_id: '{{project_id}}'
      - name: email-report
        type: call
        call: outlook.send-email
        with:
          to: '{{director_email}}'
          subject: Schedule Variance - Project {{project_id}}
          body: 'SPI: {{get-variance.spi}}. Critical path delay: {{get-variance.delay_days}} days.'
  consumes:
  - type: http
    namespace: oracle-primavera
    baseUri: https://primavera.bechtel.com/p6ws/restapi
    authentication:
      type: basic
      username: $secrets.primavera_user
      password: $secrets.primavera_password
    resources:
    - name: variance
      path: /project/{{project_id}}/scheduleVariance
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-variance
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → primavera-schedule-variance-report.yml

Generates a direct link to a Grafana dashboard for project infrastructure monitoring.

naftiko: '0.5'
info:
  label: Grafana Dashboard Link Generator
  description: Generates a direct link to a Grafana dashboard for project infrastructure monitoring.
  tags:
  - monitoring
  - grafana
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.bechtel.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dashboard
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-link-generator.yml

Triggers a Power Automate flow for business process automation.

naftiko: '0.5'
info:
  label: Microsoft Power Automate Flow Trigger
  description: Triggers a Power Automate flow for business process automation.
  tags:
  - automation
  - microsoft-power-automate
capability:
  exposes:
  - type: mcp
    namespace: workflow-automation
    port: 8080
    tools:
    - name: trigger-flow
      description: Trigger a Power Automate flow.
      inputParameters:
      - name: flow_id
        in: body
        type: string
        description: Flow ID.
      - name: payload
        in: body
        type: object
        description: Input payload.
      call: power-automate.trigger-flow
      with:
        flow_id: '{{flow_id}}'
        body: '{{payload}}'
      outputParameters:
      - name: run_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: power-automate
    baseUri: https://api.flow.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.power_automate_token
    resources:
    - name: flows
      path: /flows/{{flow_id}}/triggers/manual/run
      inputParameters:
      - name: flow_id
        in: path
      operations:
      - name: trigger-flow
        method: POST
Open in Framework → View in Fleet → microsoft-power-automate-flow-trigger.yml

Checks the status of an expense report in SAP Concur by report ID.

naftiko: '0.5'
info:
  label: SAP Concur Expense Status
  description: Checks the status of an expense report in SAP Concur by report ID.
  tags:
  - construction
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: concur
    port: 8080
    tools:
    - name: get-expense-status
      description: Check expense report status in SAP Concur.
      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: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-status.yml

Retrieves calendar events for a given date range from Microsoft Outlook for project meeting coordination.

naftiko: '0.5'
info:
  label: Microsoft Outlook Calendar Lookup
  description: Retrieves calendar events for a given date range from Microsoft Outlook for project meeting coordination.
  tags:
  - construction
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: outlook
    port: 8080
    tools:
    - name: get-calendar-events
      description: Retrieve Outlook calendar events for a date range.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: end_date
        in: body
        type: string
        description: End date.
      call: outlook.list-events
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: events
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: calendar
      path: /me/calendarView
      operations:
      - name: list-events
        method: GET
Open in Framework → View in Fleet → microsoft-outlook-calendar-lookup.yml

Queries Dynatrace for application performance metrics.

naftiko: '0.5'
info:
  label: Dynatrace Application Monitor
  description: Queries Dynatrace for application performance metrics.
  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://bechtel.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query?entitySelector=entityId({{entity_id}})
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → dynatrace-application-monitor.yml

Deploys cloud infrastructure for a construction site by running a Terraform plan, applying changes, validating via Datadog, and notifying the DevOps team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Terraform Site Infrastructure Pipeline
  description: Deploys cloud infrastructure for a construction site by running a Terraform plan, applying changes, validating via Datadog, and notifying the DevOps team via Microsoft Teams.
  tags:
  - construction
  - terraform
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: tf-deploy
    port: 8080
    tools:
    - name: deploy-infrastructure
      description: Orchestrate Terraform infrastructure deployment for a site.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: Terraform workspace name.
      - name: site_code
        in: body
        type: string
        description: Site code.
      steps:
      - name: run-plan
        type: call
        call: terraform.create-run
        with:
          workspace: '{{workspace}}'
          auto_apply: true
      - name: validate-health
        type: call
        call: datadog.get-service-status
        with:
          service: site-{{site_code}}-infra
      - name: notify-devops
        type: call
        call: msteams.send-message
        with:
          channel_id: devops
          text: 'Terraform deployment complete for site {{site_code}}. Run: {{run-plan.run_id}}. Health: {{validate-health.status}}.'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.datadog_api_key
    resources:
    - name: services
      path: /check_run
      operations:
      - name: get-service-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-site-infrastructure-pipeline.yml

Looks up a user in Azure Active Directory by email, returning profile and group membership details.

naftiko: '0.5'
info:
  label: Azure Active Directory User Lookup
  description: Looks up a user in Azure Active Directory by email, returning profile and group membership details.
  tags:
  - construction
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: aad
    port: 8080
    tools:
    - name: lookup-user
      description: Look up user details in Azure AD.
      inputParameters:
      - name: user_principal_name
        in: body
        type: string
        description: User principal name.
      call: aad.get-user
      with:
        upn: '{{user_principal_name}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.displayName
      - name: department
        type: string
        mapping: $.department
  consumes:
  - type: http
    namespace: aad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{upn}}
      inputParameters:
      - name: upn
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → azure-active-directory-user-lookup.yml

When a new engineer is hired in Workday, creates a ServiceNow onboarding ticket, provisions a SharePoint project folder, sets up AutoCAD license access, and sends a Microsoft Teams welcome message.

naftiko: '0.5'
info:
  label: Employee Onboarding Orchestrator
  description: When a new engineer is hired in Workday, creates a ServiceNow onboarding ticket, provisions a SharePoint project folder, sets up AutoCAD license access, and sends a Microsoft Teams welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: onboard-engineer
      description: Run the full onboarding workflow for a new Bechtel engineer.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      - name: start_date
        in: body
        type: string
        description: Start date.
      - name: department
        in: body
        type: string
        description: Department.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Onboarding: {{get-employee.full_name}}'
          category: hr_onboarding
          description: New engineer {{get-employee.full_name}} starting {{start_date}} in {{department}}.
      - name: create-folder
        type: call
        call: sharepoint.create-folder
        with:
          site_id: hr_onboarding
          folder_path: Engineers/{{get-employee.full_name}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{department}}_team'
          text: 'Welcome {{get-employee.first_name}} to Bechtel {{department}}! Starting {{start_date}}. Onboarding ticket: {{create-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://bechtel.service-now.com/api/now
    authentication:
      type: 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/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → employee-onboarding-orchestrator.yml

Creates a procurement requisition in SAP Ariba for construction materials and routes for approval.

naftiko: '0.5'
info:
  label: SAP Ariba Procurement Requisition
  description: Creates a procurement requisition in SAP Ariba for construction materials and routes for approval.
  tags:
  - procurement
  - sap-ariba
  - construction
capability:
  exposes:
  - type: mcp
    namespace: procurement-ariba
    port: 8080
    tools:
    - name: create-requisition
      description: Create a procurement requisition in SAP Ariba for construction materials.
      inputParameters:
      - name: material_description
        in: body
        type: string
        description: Material description.
      - name: quantity
        in: body
        type: number
        description: Quantity needed.
      - name: project_id
        in: body
        type: string
        description: Project ID for cost allocation.
      - name: urgency
        in: body
        type: string
        description: Urgency level.
      call: ariba.create-requisition
      with:
        description: '{{material_description}}'
        quantity: '{{quantity}}'
        project_id: '{{project_id}}'
        urgency: '{{urgency}}'
      outputParameters:
      - name: requisition_id
        type: string
        mapping: $.requisition.id
      - name: status
        type: string
        mapping: $.requisition.status
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/procurement/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: requisitions
      path: /requisitions
      operations:
      - name: create-requisition
        method: POST
Open in Framework → View in Fleet → sap-ariba-procurement-requisition.yml

Searches Splunk for security events matching a query and returns the results.

naftiko: '0.5'
info:
  label: Splunk Security Log Search
  description: Searches Splunk for security events matching a query and returns the results.
  tags:
  - security
  - monitoring
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: security-logs
    port: 8080
    tools:
    - name: search-security-logs
      description: Search Splunk for security events.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Splunk search query.
      - name: time_range
        in: body
        type: string
        description: Time range such as -24h or -7d.
      call: splunk.search
      with:
        search: '{{search_query}}'
        earliest_time: '{{time_range}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
      - name: total_count
        type: number
        mapping: $.result_count
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.bechtel.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs/export
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → splunk-security-log-search.yml

Processes an OSHA recordable incident by creating a ServiceNow incident, alerting the safety director via Microsoft Teams, sending a regulatory report via Microsoft Outlook, and logging in Google Sheets.

naftiko: '0.5'
info:
  label: OSHA Recordable Incident Pipeline
  description: Processes an OSHA recordable incident by creating a ServiceNow incident, alerting the safety director via Microsoft Teams, sending a regulatory report via Microsoft Outlook, and logging in Google Sheets.
  tags:
  - construction
  - servicenow
  - microsoft-teams
  - microsoft-outlook
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: osha-incident
    port: 8080
    tools:
    - name: report-osha-incident
      description: Orchestrate OSHA recordable incident reporting.
      inputParameters:
      - name: site_code
        in: body
        type: string
        description: Site code.
      - name: description
        in: body
        type: string
        description: Incident description.
      - name: severity
        in: body
        type: string
        description: Incident severity.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'OSHA recordable: {{site_code}}'
          description: '{{description}}'
          urgency: '1'
      - name: alert-director
        type: call
        call: msteams.send-message
        with:
          channel_id: safety_leadership
          text: 'OSHA RECORDABLE at {{site_code}}: {{description}}. Severity: {{severity}}. Incident: {{create-incident.incident_number}}.'
      - name: regulatory-report
        type: call
        call: outlook.send-email
        with:
          to: safety-compliance@bechtel.com
          subject: OSHA Recordable Incident - {{site_code}}
          body: 'Incident: {{create-incident.incident_number}}. {{description}}. Immediate regulatory review required.'
      - name: log-incident
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_osha_log
          data: '{{site_code}},{{severity}},{{create-incident.incident_number}},{{description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://bechtel.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → osha-recordable-incident-pipeline.yml

Retrieves the latest build status for an Azure DevOps pipeline used by the Bechtel digital engineering team.

naftiko: '0.5'
info:
  label: Azure DevOps Pipeline Status Checker
  description: Retrieves the latest build status for an Azure DevOps pipeline used by the Bechtel digital engineering team.
  tags:
  - devops
  - ci-cd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: cicd
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Check the latest build status for an Azure DevOps pipeline.
      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/bechtel/Engineering/_apis/build
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: builds
      path: /builds?definitions={{pipeline_id}}&$top=1&api-version=7.0
      inputParameters:
      - name: pipeline_id
        in: path
      operations:
      - name: get-latest-build
        method: GET
Open in Framework → View in Fleet → azure-devops-pipeline-status-checker.yml

Manages engineering recruitment by posting jobs on LinkedIn, creating tracking tasks in Jira, logging applicants in Google Sheets, and notifying hiring managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Engineering Recruitment Pipeline
  description: Manages engineering recruitment by posting jobs on LinkedIn, creating tracking tasks in Jira, logging applicants in Google Sheets, and notifying hiring managers via Microsoft Teams.
  tags:
  - construction
  - linkedin
  - jira
  - google-sheets
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: recruitment
    port: 8080
    tools:
    - name: post-engineering-role
      description: Orchestrate engineering job posting and tracking.
      inputParameters:
      - name: role_title
        in: body
        type: string
        description: Job title.
      - name: location
        in: body
        type: string
        description: Work location.
      - name: hiring_manager
        in: body
        type: string
        description: Hiring manager name.
      steps:
      - name: post-job
        type: call
        call: linkedin.create-job-post
        with:
          title: '{{role_title}}'
          location: '{{location}}'
      - name: create-tracking
        type: call
        call: jira.create-issue
        with:
          project: HR
          summary: 'Recruitment: {{role_title}} - {{location}}'
          issue_type: Task
      - name: log-posting
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: bechtel_recruitment
          data: '{{role_title}},{{location}},{{post-job.post_id}},{{create-tracking.issue_key}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: hiring
          text: 'Job posted: {{role_title}} in {{location}}. LinkedIn: {{post-job.post_id}}. Tracking: {{create-tracking.issue_key}}.'
  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: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: append-rows
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → engineering-recruitment-pipeline.yml

Retrieves a secret from Azure Key Vault for use in automated workflows.

naftiko: '0.5'
info:
  label: Azure Key Vault Secret Retriever
  description: Retrieves a secret from Azure Key Vault for use in automated workflows.
  tags:
  - security
  - azure-key-vault
capability:
  exposes:
  - type: mcp
    namespace: secrets
    port: 8080
    tools:
    - name: get-secret
      description: Retrieve a secret value 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
      - name: expires
        type: string
        mapping: $.attributes.expires
  consumes:
  - type: http
    namespace: keyvault
    baseUri: https://bechtel-vault.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}?api-version=7.4
      inputParameters:
      - name: secret_name
        in: path
      operations:
      - name: get-secret
        method: GET
Open in Framework → View in Fleet → azure-key-vault-secret-retriever.yml

Provisions site access for a new worker by verifying safety certifications in Workday, creating an access badge request in ServiceNow, adding to Azure AD security group, and notifying the site manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Site Access Provisioning Pipeline
  description: Provisions site access for a new worker by verifying safety certifications in Workday, creating an access badge request in ServiceNow, adding to Azure AD security group, and notifying the site manager via Microsoft Teams.
  tags:
  - construction
  - workday
  - servicenow
  - azure-active-directory
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: site-access
    port: 8080
    tools:
    - name: provision-site-access
      description: Orchestrate site access provisioning for new workers.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Employee ID.
      - name: site_code
        in: body
        type: string
        description: Construction site code.
      steps:
      - name: verify-certs
        type: call
        call: workday.get-certifications
        with:
          employee_id: '{{employee_id}}'
      - name: create-badge-request
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Site access badge: {{employee_id}} for {{site_code}}'
          category: site_access
      - name: add-to-group
        type: call
        call: aad.add-group-member
        with:
          group: site_{{site_code}}_access
          user_id: '{{employee_id}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          channel_id: site_{{site_code}}
          text: 'Site access provisioned for {{employee_id}}. Certifications: {{verify-certs.status}}. Badge request: {{create-badge-request.request_number}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/bechtel
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: certifications
      path: /workers/{{employee_id}}/certifications
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-certifications
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://bechtel.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: aad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: groups
      path: /groups/{{group}}/members/$ref
      inputParameters:
      - name: group
        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: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → site-access-provisioning-pipeline.yml

Appends a row to a Google Sheets spreadsheet.

naftiko: '0.5'
info:
  label: Google Sheets Logger
  description: Appends a row to a Google Sheets spreadsheet.
  tags:
  - productivity
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: sheets-logger
    port: 8080
    tools:
    - name: append-row
      description: Append a row to Google Sheets.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: Spreadsheet ID.
      - name: range
        in: body
        type: string
        description: Range.
      - name: values
        in: body
        type: array
        description: Values.
      call: gsheets.append-row
      with:
        spreadsheet_id: '{{spreadsheet_id}}'
        range: '{{range}}'
        values: '{{values}}'
  consumes:
  - type: http
    namespace: gsheets
    baseUri: https://sheets.googleapis.com/v4/spreadsheets
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: values
      path: /{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-row
        method: POST
Open in Framework → View in Fleet → google-sheets-logger.yml

Executes a predefined query against the Snowflake data warehouse for project analytics data.

naftiko: '0.5'
info:
  label: Snowflake Project Data Query
  description: Executes a predefined query against the Snowflake data warehouse for project analytics data.
  tags:
  - construction
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: query-project-data
      description: Query Snowflake for project analytics.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      call: snowflake.run-query
      with:
        project_id: '{{project_id}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.data
      - name: row_count
        type: number
        mapping: $.rowCount
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://bechtel.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-query
        method: POST
Open in Framework → View in Fleet → snowflake-project-data-query.yml

Retrieves the latest version information for an AutoCAD drawing file stored in the Bechtel engineering document management system.

naftiko: '0.5'
info:
  label: AutoCAD Drawing Version Tracker
  description: Retrieves the latest version information for an AutoCAD drawing file stored in the Bechtel engineering document management system.
  tags:
  - engineering
  - cad
  - autocad
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: engineering-docs
    port: 8080
    tools:
    - name: get-drawing-version
      description: Look up the latest version of an AutoCAD drawing by drawing number.
      inputParameters:
      - name: drawing_number
        in: body
        type: string
        description: Engineering drawing number.
      call: edms.get-drawing
      with:
        drawing_number: '{{drawing_number}}'
      outputParameters:
      - name: version
        type: string
        mapping: $.drawing.version
      - name: last_modified
        type: string
        mapping: $.drawing.last_modified_date
      - name: author
        type: string
        mapping: $.drawing.modified_by
      - name: status
        type: string
        mapping: $.drawing.approval_status
  consumes:
  - type: http
    namespace: edms
    baseUri: https://edms.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.edms_token
    resources:
    - name: drawings
      path: /drawings/{{drawing_number}}
      inputParameters:
      - name: drawing_number
        in: path
      operations:
      - name: get-drawing
        method: GET
Open in Framework → View in Fleet → autocad-drawing-version-tracker.yml

Retrieves weekly work schedules for construction crews from the workforce management system.

naftiko: '0.5'
info:
  label: Workforce Scheduling Viewer
  description: Retrieves weekly work schedules for construction crews from the workforce management system.
  tags:
  - hr
  - workforce-management
  - construction
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: get-crew-schedule
      description: Retrieve weekly crew schedules for a project site.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: week_start
        in: body
        type: string
        description: Week start date.
      call: wfm.get-schedule
      with:
        project_id: '{{project_id}}'
        week_start: '{{week_start}}'
      outputParameters:
      - name: crews
        type: array
        mapping: $.schedules
      - name: total_headcount
        type: number
        mapping: $.total_workers
  consumes:
  - type: http
    namespace: wfm
    baseUri: https://wfm.bechtel.com/api/v1
    authentication:
      type: bearer
      token: $secrets.wfm_token
    resources:
    - name: schedules
      path: /projects/{{project_id}}/schedules
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-schedule
        method: GET
Open in Framework → View in Fleet → workforce-scheduling-viewer.yml

Retrieves the details and hit count of a firewall rule from Palo Alto Networks.

naftiko: '0.5'
info:
  label: Palo Alto Networks Firewall Rule Lookup
  description: Retrieves the details and hit count of a firewall rule from Palo Alto Networks.
  tags:
  - security
  - networking
  - palo-alto-networks
capability:
  exposes:
  - type: mcp
    namespace: firewall
    port: 8080
    tools:
    - name: get-firewall-rule
      description: Look up a Palo Alto firewall rule by name.
      inputParameters:
      - name: rule_name
        in: body
        type: string
        description: Firewall rule name.
      call: paloalto.get-rule
      with:
        rule_name: '{{rule_name}}'
      outputParameters:
      - name: action
        type: string
        mapping: $.result.entry.action
      - name: source_zone
        type: string
        mapping: $.result.entry.from.member
      - name: destination_zone
        type: string
        mapping: $.result.entry.to.member
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://panorama.bechtel.com/restapi/v10.2
    authentication:
      type: apikey
      key: $secrets.paloalto_api_key
    resources:
    - name: security-rules
      path: /Policies/SecurityRules?name={{rule_name}}
      inputParameters:
      - name: rule_name
        in: path
      operations:
      - name: get-rule
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-firewall-rule-lookup.yml

Uploads site progress photos to SharePoint organized by project and date, and notifies the project team.

naftiko: '0.5'
info:
  label: Construction Photo Documentation Pipeline
  description: Uploads site progress photos to SharePoint organized by project and date, and notifies the project team.
  tags:
  - construction
  - documentation
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: photo-docs
    port: 8080
    tools:
    - name: upload-progress-photos
      description: Upload and organize construction progress photos.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: Project ID.
      - name: date
        in: body
        type: string
        description: Photo date.
      - name: photo_count
        in: body
        type: number
        description: Number of photos uploaded.
      steps:
      - name: upload
        type: call
        call: sharepoint.upload-file
        with:
          site_id: project_{{project_id}}
          folder_path: ProgressPhotos/{{date}}
          file_name: photos_{{date}}.zip
      - name: notify
        type: call
        call: msteams.send-message
        with:
          channel_id: project_{{project_id}}
          text: '{{photo_count}} progress photos uploaded for {{date}}. View: {{upload.url}}'
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → construction-photo-documentation-pipeline.yml

Retrieves the status, assignee, and due date of a Jira issue.

naftiko: '0.5'
info:
  label: Jira Issue Status Lookup
  description: Retrieves the status, assignee, and due date of a Jira issue.
  tags:
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: project-tracking
    port: 8080
    tools:
    - name: get-jira-issue
      description: Look up a Jira issue by key.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.fields.status.name
      - name: assignee
        type: string
        mapping: $.fields.assignee.displayName
      - name: due_date
        type: string
        mapping: $.fields.duedate
  consumes:
  - type: http
    namespace: jira
    baseUri: https://bechtel.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-status-lookup.yml

Posts a journal entry to Workday Financials for project cost allocation.

naftiko: '0.5'
info:
  label: Workday Financials Journal Entry
  description: Posts a journal entry to Workday Financials for project cost allocation.
  tags:
  - finance
  - workday
capability:
  exposes:
  - type: mcp
    namespace: financials
    port: 8080
    tools:
    - name: post-journal-entry
      description: Post a journal entry to Workday Financials.
      inputParameters:
      - name: account
        in: body
        type: string
        description: GL account.
      - name: amount
        in: body
        type: number
        description: Entry amount.
      - name: project_id
        in: body
        type: string
        description: Project cost center.
      call: workday.post-journal
      with:
        account: '{{account}}'
        amount: '{{amount}}'
        cost_center: '{{project_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: journals
      path: /journal-entries
      operations:
      - name: post-journal
        method: POST
Open in Framework → View in Fleet → workday-financials-journal-entry.yml

Generates KPI digest at Fluor from Snowflake, Oracle, Power BI, and email.

naftiko: '0.5'
info:
  label: Weekly KPI Digest Pipeline
  description: Generates KPI digest at Fluor 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 Fluor.
      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://fluor.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.fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → weekly-kpi-digest-pipeline.yml

Checks Okta user at Fluor.

naftiko: '0.5'
info:
  label: Okta User Check
  description: Checks Okta user at Fluor.
  tags:
  - identity
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: okta-user
    port: 8080
    tools:
    - name: check-user
      description: Check user at Fluor.
      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://fluor.com.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-check.yml

Routes changes at Fluor through ServiceNow and CAB approval.

naftiko: '0.5'
info:
  label: Change Management Pipeline
  description: Routes changes at Fluor 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 Fluor.
      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://fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → change-management-pipeline.yml

Sends a message to a Microsoft Teams channel for project communication.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Message
  description: Sends a message to a Microsoft Teams channel for project communication.
  tags:
  - communications
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: team-messaging
    port: 8080
    tools:
    - name: send-team-message
      description: Post a message to a Teams channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: Teams channel ID.
      - name: text
        in: body
        type: string
        description: Message text.
      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: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → microsoft-teams-channel-message.yml

Checks Snowflake warehouse usage at Fluor.

naftiko: '0.5'
info:
  label: Snowflake Warehouse Usage
  description: Checks Snowflake warehouse usage at Fluor.
  tags:
  - data
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: sf-usage
    port: 8080
    tools:
    - name: check-warehouse
      description: Check warehouse at Fluor.
      inputParameters:
      - name: warehouse
        in: body
        type: string
        description: Warehouse.
      call: snowflake.get-usage
      with:
        warehouse: '{{warehouse}}'
      outputParameters:
      - name: credits
        type: number
        mapping: $.data.credits_used
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://fluor.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: warehouses
      path: /statements
      operations:
      - name: get-usage
        method: GET
Open in Framework → View in Fleet → snowflake-warehouse-usage.yml

When a requisition is approved in SAP, creates a purchase order, validates the vendor in Oracle E-Business Suite, and notifies procurement and the requestor in Microsoft Teams.

naftiko: '0.5'
info:
  label: Procurement Requisition to PO Pipeline
  description: When a requisition is approved in SAP, creates a purchase order, validates the vendor in Oracle E-Business Suite, and notifies procurement and the requestor in Microsoft Teams.
  tags:
  - procurement
  - sap
  - oracle-e-business-suite
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement-pipeline
    port: 8080
    tools:
    - name: convert-requisition-to-po
      description: Convert an approved requisition to a PO, validate vendor, and notify.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The SAP requisition identifier.
      - name: requestor_id
        in: body
        type: string
        description: Workday employee ID of the requestor.
      steps:
      - name: get-requisition
        type: call
        call: sap.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: validate-vendor
        type: call
        call: oracle-ebs.get-vendor
        with:
          vendor_id: '{{get-requisition.vendor_id}}'
      - name: create-po
        type: call
        call: sap.create-po
        with:
          requisition_id: '{{requisition_id}}'
          vendor_id: '{{get-requisition.vendor_id}}'
          amount: '{{get-requisition.total_amount}}'
      - name: notify-procurement
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement_ops
          text: 'PO created: {{create-po.po_number}} from requisition {{requisition_id}}. Vendor: {{validate-vendor.name}}. Amount: {{get-requisition.total_amount}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://fluor-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: requisitions
      path: /requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
    - name: purchase-orders
      path: /purchase-orders
      operations:
      - name: create-po
        method: POST
  - type: http
    namespace: oracle-ebs
    baseUri: https://oracle-ebs.fluor.com/webservices/rest/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ebs_token
    resources:
    - name: vendors
      path: /vendors/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → procurement-requisition-to-po-pipeline.yml

Retrieves SharePoint metadata at Fluor.

naftiko: '0.5'
info:
  label: SharePoint File Metadata
  description: Retrieves SharePoint metadata at Fluor.
  tags:
  - document-management
  - sharepoint
  - collaboration
capability:
  exposes:
  - type: mcp
    namespace: sp-docs
    port: 8080
    tools:
    - name: get-file
      description: Look up file at Fluor.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Site ID.
      - name: file_path
        in: body
        type: string
        description: Path.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        path: '{{file_path}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: size
        type: number
        mapping: $.size
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/root:/{{path}}
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-file-metadata.yml

Analyzes feedback at Fluor via surveys, AI sentiment, and Power BI.

naftiko: '0.5'
info:
  label: Customer Feedback Pipeline
  description: Analyzes feedback at Fluor 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 Fluor.
      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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.survey_token
    resources:
    - name: responses
      path: /surveys/{{id}}/responses
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get
        method: GET
  - type: http
    namespace: ai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: analyze
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → customer-feedback-pipeline.yml

Checks license compliance at Fluor via scanning, entitlements, and procurement.

naftiko: '0.5'
info:
  label: License Compliance Pipeline
  description: Checks license compliance at Fluor 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 Fluor.
      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.fluor.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.fluor.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.fluor.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://fluor.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
Open in Framework → View in Fleet → license-compliance-pipeline.yml

Plans capacity at Fluor by collecting utilization and forecasting.

naftiko: '0.5'
info:
  label: Capacity Planning Pipeline
  description: Plans capacity at Fluor 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 Fluor.
      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.fluor.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.fluor.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://fluor.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → capacity-planning-pipeline.yml

Checks SAP PO at Fluor.

naftiko: '0.5'
info:
  label: SAP PO Check
  description: Checks SAP PO at Fluor.
  tags:
  - procurement
  - sap
  - purchase-orders
capability:
  exposes:
  - type: mcp
    namespace: sap-po
    port: 8080
    tools:
    - name: get-po
      description: Check PO at Fluor.
      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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: purchase-orders
      path: /purchase-orders/{{po_number}}
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-po-check.yml

Checks Power BI refresh at Fluor.

naftiko: '0.5'
info:
  label: Power BI Refresh Check
  description: Checks Power BI refresh at Fluor.
  tags:
  - analytics
  - power-bi
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: pbi-refresh
    port: 8080
    tools:
    - name: check-refresh
      description: Check refresh at Fluor.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Dataset ID.
      call: power-bi.get-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh
        method: GET
Open in Framework → View in Fleet → power-bi-refresh-check.yml

Checks release readiness at Fluor.

naftiko: '0.5'
info:
  label: Release Readiness Pipeline
  description: Checks release readiness at Fluor.
  tags:
  - release-management
  - devops
  - quality
capability:
  exposes:
  - type: mcp
    namespace: release-ready
    port: 8080
    tools:
    - name: check-release
      description: Check release at Fluor.
      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/fluor.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.fluor.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.fluor.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://fluor.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → release-readiness-pipeline.yml

Creates a safety incident report in ServiceNow, assigns an investigator from Workday, uploads incident photos to SharePoint, and alerts the HSE team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Safety Incident Reporting
  description: Creates a safety incident report in ServiceNow, assigns an investigator from Workday, uploads incident photos to SharePoint, and alerts the HSE team in Microsoft Teams.
  tags:
  - safety
  - servicenow
  - workday
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: safety-reporting
    port: 8080
    tools:
    - name: report-safety-incident
      description: Create incident report, assign investigator, upload evidence, and alert HSE.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: The construction site identifier.
      - name: description
        in: body
        type: string
        description: Incident description.
      - name: severity
        in: body
        type: string
        description: Incident severity (minor, moderate, serious, critical).
      - name: photo_urls
        in: body
        type: string
        description: Comma-separated URLs of incident photos.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Safety incident at {{site_id}}: {{severity}}'
          description: '{{description}}'
          severity: '{{severity}}'
          assigned_group: HSE_Investigations
      - name: get-investigator
        type: call
        call: workday.get-available-investigator
        with:
          site_id: '{{site_id}}'
          certification: safety_investigator
      - name: upload-photos
        type: call
        call: sharepoint.upload-file
        with:
          site_id: safety_site
          folder_path: Incidents/{{create-incident.number}}
          file_name: incident_photos.zip
          content: '{{photo_urls}}'
      - name: alert-hse
        type: call
        call: msteams.send-message
        with:
          channel_id: hse_alerts
          text: 'SAFETY INCIDENT: {{severity}} at {{site_id}}. {{description}}. Investigator: {{get-investigator.full_name}}. Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://fluor.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/search
      operations:
      - name: get-available-investigator
        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: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → safety-incident-reporting.yml

Retrieves Dynatrace host health metrics for construction site IT systems.

naftiko: '0.5'
info:
  label: Dynatrace Host Monitoring
  description: Retrieves Dynatrace host health metrics for construction site IT systems.
  tags:
  - monitoring
  - dynatrace
capability:
  exposes:
  - type: mcp
    namespace: host-monitoring
    port: 8080
    tools:
    - name: get-host-health
      description: Fetch Dynatrace host health by entity ID.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Dynatrace host entity ID.
      call: dynatrace.get-host
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://fluor.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: hosts
      path: /entities/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-host
        method: GET
Open in Framework → View in Fleet → dynatrace-host-monitoring.yml

Optimizes cloud costs at Fluor via Azure, FinOps, Jira, and Power BI.

naftiko: '0.5'
info:
  label: Cloud Cost Optimization Pipeline
  description: Optimizes cloud costs at Fluor 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 Fluor.
      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.fluor.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://fluor.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → cloud-cost-optimization-pipeline.yml

Checks GitHub repo at Fluor.

naftiko: '0.5'
info:
  label: GitHub Repo Check
  description: Checks GitHub repo at Fluor.
  tags:
  - devops
  - github
  - version-control
capability:
  exposes:
  - type: mcp
    namespace: gh-repo
    port: 8080
    tools:
    - name: get-branch
      description: Check branch at Fluor.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repo.
      - name: branch
        in: body
        type: string
        description: Branch.
      call: github.get-branch
      with:
        repo: '{{repo}}'
        branch: '{{branch}}'
      outputParameters:
      - name: sha
        type: string
        mapping: $.commit.sha
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branches
      path: /repos/org/{{repo}}/branches/{{branch}}
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch
        method: GET
Open in Framework → View in Fleet → github-repo-check.yml

Audits expenses at Fluor via Concur, compliance checks, and email.

naftiko: '0.5'
info:
  label: Expense Audit Pipeline
  description: Audits expenses at Fluor 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 Fluor.
      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.fluor.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.fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → expense-audit-pipeline.yml

Monitors SLAs at Fluor via Datadog and Slack.

naftiko: '0.5'
info:
  label: SLA Monitoring Pipeline
  description: Monitors SLAs at Fluor 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 Fluor.
      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://fluor.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sla-monitoring-pipeline.yml

Reviews vendors at Fluor.

naftiko: '0.5'
info:
  label: Quarterly Vendor Review Pipeline
  description: Reviews vendors at Fluor.
  tags:
  - procurement
  - vendor-management
  - review
capability:
  exposes:
  - type: mcp
    namespace: vendor-review
    port: 8080
    tools:
    - name: review-vendor
      description: Review vendors at Fluor.
      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.fluor.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.fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
  - type: http
    namespace: calendar
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: events
      path: /users/proc/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → quarterly-vendor-review-pipeline.yml

Queries Datadog for infrastructure metrics used in construction site IT monitoring.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Monitoring
  description: Queries Datadog for infrastructure metrics used in construction site IT monitoring.
  tags:
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: query-metric
      description: Query a Datadog metric by name and time range.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: Metric name.
      - name: from_ts
        in: body
        type: string
        description: Start timestamp.
      - name: to_ts
        in: body
        type: string
        description: End timestamp.
      call: datadog.query-metric
      with:
        query: '{{metric_name}}'
        from: '{{from_ts}}'
        to: '{{to_ts}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /query
      operations:
      - name: query-metric
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-monitoring.yml

Geocodes project site addresses and generates a static map for field operations.

naftiko: '0.5'
info:
  label: Google Maps Site Location Mapping
  description: Geocodes project site addresses and generates a static map for field operations.
  tags:
  - logistics
  - google-maps
capability:
  exposes:
  - type: mcp
    namespace: site-mapping
    port: 8080
    tools:
    - name: map-project-site
      description: Geocode a project site address and generate a map.
      inputParameters:
      - name: address
        in: body
        type: string
        description: The site address.
      call: googlemaps.geocode
      with:
        address: '{{address}}'
  consumes:
  - type: http
    namespace: googlemaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: bearer
      token: $secrets.google_maps_key
    resources:
    - name: geocoding
      path: /geocode/json
      operations:
      - name: geocode
        method: GET
Open in Framework → View in Fleet → google-maps-site-location-mapping.yml

Pulls construction schedules from Microsoft Project, maps milestones to Jira epics, and notifies project managers in Microsoft Teams.

naftiko: '0.5'
info:
  label: Construction Schedule Sync
  description: Pulls construction schedules from Microsoft Project, maps milestones to Jira epics, and notifies project managers in Microsoft Teams.
  tags:
  - project-mgmt
  - scheduling
  - microsoft-project
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: construction-schedule
    port: 8080
    tools:
    - name: sync-schedule
      description: Sync MS Project milestones to Jira and notify project managers.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Microsoft Project project ID.
      - name: jira_project
        in: body
        type: string
        description: Jira project key.
      steps:
      - name: get-milestones
        type: call
        call: msproject.get-tasks
        with:
          project_id: '{{project_id}}'
          filter: milestones
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project}}'
          issue_type: Epic
          summary: '{{get-milestones.next_milestone}}'
          due_date: '{{get-milestones.next_date}}'
      - name: notify-pm
        type: call
        call: msteams.send-message
        with:
          channel_id: project_mgmt
          text: 'Schedule synced: {{get-milestones.next_milestone}} on {{get-milestones.next_date}}. Jira: {{create-epic.key}}'
  consumes:
  - type: http
    namespace: msproject
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /planner/plans/{{project_id}}/tasks
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-tasks
        method: GET
  - type: http
    namespace: jira
    baseUri: https://fluor.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: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → construction-schedule-sync.yml

Checks K8s pod health at Fluor.

naftiko: '0.5'
info:
  label: K8s Pod Health
  description: Checks K8s pod health at Fluor.
  tags:
  - containers
  - kubernetes
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: k8s-pod
    port: 8080
    tools:
    - name: check-pod
      description: Check pod at Fluor.
      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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: pods
      path: /namespaces/{{namespace}}/pods/{{pod}}
      inputParameters:
      - name: namespace
        in: path
      - name: pod
        in: path
      operations:
      - name: get-pod
        method: GET
Open in Framework → View in Fleet → k8s-pod-health.yml

Searches Confluence at Fluor.

naftiko: '0.5'
info:
  label: Confluence Article Search
  description: Searches Confluence at Fluor.
  tags:
  - knowledge-management
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: confluence-search
    port: 8080
    tools:
    - name: search-articles
      description: Search Confluence at Fluor.
      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://fluor.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content/search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-article-search.yml

Checks New Relic APM at Fluor.

naftiko: '0.5'
info:
  label: New Relic APM Check
  description: Checks New Relic APM at Fluor.
  tags:
  - monitoring
  - new-relic
  - apm
capability:
  exposes:
  - type: mcp
    namespace: nr-apm
    port: 8080
    tools:
    - name: check-apm
      description: Check APM at Fluor.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: App ID.
      call: newrelic.get-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: health
        type: string
        mapping: $.application.health_status
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.new_relic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → new-relic-apm-check.yml

Maintains KB at Fluor by finding stale articles and notifying owners.

naftiko: '0.5'
info:
  label: Knowledge Base Maintenance Pipeline
  description: Maintains KB at Fluor 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 Fluor.
      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://fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: batch
      path: /send-batch
      operations:
      - name: batch
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → knowledge-base-maintenance-pipeline.yml

Reviews access at Fluor via Okta, IAM, and Jira.

naftiko: '0.5'
info:
  label: Access Review Pipeline
  description: Reviews access at Fluor 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 Fluor.
      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://fluor.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.fluor.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://fluor.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → access-review-pipeline.yml

Calculates driving directions between project sites for logistics planning.

naftiko: '0.5'
info:
  label: Google Maps Project Site Directions
  description: Calculates driving directions between project sites for logistics planning.
  tags:
  - logistics
  - google-maps
capability:
  exposes:
  - type: mcp
    namespace: directions
    port: 8080
    tools:
    - name: get-directions
      description: Get driving directions between two locations.
      inputParameters:
      - name: origin
        in: body
        type: string
        description: Origin address.
      - name: destination
        in: body
        type: string
        description: Destination address.
      call: googlemaps.get-directions
      with:
        origin: '{{origin}}'
        destination: '{{destination}}'
  consumes:
  - type: http
    namespace: googlemaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: bearer
      token: $secrets.google_maps_key
    resources:
    - name: directions
      path: /directions/json
      operations:
      - name: get-directions
        method: GET
Open in Framework → View in Fleet → google-maps-project-site-directions.yml

Triggers a Qlik Sense app reload for project analytics dashboards.

naftiko: '0.5'
info:
  label: Qlik Sense Project Analytics Refresh
  description: Triggers a Qlik Sense app reload for project analytics dashboards.
  tags:
  - analytics
  - qlik-sense
capability:
  exposes:
  - type: mcp
    namespace: qlik-ops
    port: 8080
    tools:
    - name: reload-app
      description: Trigger a Qlik Sense app reload.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: Qlik Sense app identifier.
      call: qlik.reload-app
      with:
        app_id: '{{app_id}}'
  consumes:
  - type: http
    namespace: qlik
    baseUri: https://qlik.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.qlik_token
    resources:
    - name: reloads
      path: /reloads
      operations:
      - name: reload-app
        method: POST
Open in Framework → View in Fleet → qlik-sense-project-analytics-refresh.yml

Exports a Visio process diagram and uploads it to SharePoint for project documentation.

naftiko: '0.5'
info:
  label: Microsoft Visio Process Diagram Export
  description: Exports a Visio process diagram and uploads it to SharePoint for project documentation.
  tags:
  - engineering
  - microsoft-visio
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: process-diagrams
    port: 8080
    tools:
    - name: export-diagram
      description: Export a Visio diagram and upload to SharePoint.
      inputParameters:
      - name: diagram_id
        in: body
        type: string
        description: The Visio diagram file ID.
      - name: project_id
        in: body
        type: string
        description: The project identifier.
      steps:
      - name: get-diagram
        type: call
        call: sharepoint.get-file
        with:
          site_id: engineering_site
          file_path: Diagrams/{{diagram_id}}.vsdx
      - name: convert-to-pdf
        type: call
        call: sharepoint.convert-file
        with:
          site_id: engineering_site
          source_path: Diagrams/{{diagram_id}}.vsdx
          target_format: pdf
  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
      - name: convert-file
        method: POST
Open in Framework → View in Fleet → microsoft-visio-process-diagram-export.yml

Monitors cert expiry at Fluor.

naftiko: '0.5'
info:
  label: Certificate Expiry Pipeline
  description: Monitors cert expiry at Fluor.
  tags:
  - security
  - certificates
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: cert-monitor
    port: 8080
    tools:
    - name: check-certs
      description: Monitor certs at Fluor.
      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.fluor.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://fluor.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → certificate-expiry-pipeline.yml

Analyzes budget variance at Fluor via Oracle, Workday, and Slack.

naftiko: '0.5'
info:
  label: Budget Variance Pipeline
  description: Analyzes budget variance at Fluor 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 Fluor.
      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.fluor.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.fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: var
      path: /compute
      operations:
      - name: variance
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → budget-variance-pipeline.yml

Retrieves the latest build pipeline status from Azure DevOps.

naftiko: '0.5'
info:
  label: Azure DevOps Build Pipeline Status
  description: Retrieves the latest build pipeline status from Azure DevOps.
  tags:
  - development
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: build-status
    port: 8080
    tools:
    - name: get-build-status
      description: Fetch Azure DevOps build status for a project and pipeline.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline identifier.
      call: azdo.get-build
      with:
        project: '{{project}}'
        pipeline_id: '{{pipeline_id}}'
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/fluor
    authentication:
      type: bearer
      token: $secrets.azdo_token
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds
      inputParameters:
      - name: project
        in: path
      operations:
      - name: get-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-pipeline-status.yml

Queries Cisco network devices at a construction site for connectivity status.

naftiko: '0.5'
info:
  label: Cisco Network Status at Site
  description: Queries Cisco network devices at a construction site for connectivity status.
  tags:
  - infrastructure
  - cisco
capability:
  exposes:
  - type: mcp
    namespace: site-network
    port: 8080
    tools:
    - name: get-site-network-status
      description: Fetch Cisco device status at a project site.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Cisco device hostname or IP.
      call: cisco.get-device
      with:
        device_id: '{{device_id}}'
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://dnac.fluor.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_token
    resources:
    - name: devices
      path: /network-device/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → cisco-network-status-at-site.yml

Retrieves a Salesforce opportunity for project pursuit tracking.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Tracking
  description: Retrieves a Salesforce opportunity for project pursuit tracking.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: project-pursuits
    port: 8080
    tools:
    - name: get-opportunity
      description: Fetch a Salesforce opportunity by ID.
      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://fluor.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-tracking.yml

Retrieves HubSpot contact engagement data for project pursuit tracking.

naftiko: '0.5'
info:
  label: HubSpot Client Engagement Tracking
  description: Retrieves HubSpot contact engagement data for project pursuit tracking.
  tags:
  - sales
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: client-engagement
    port: 8080
    tools:
    - name: get-contact-engagement
      description: Fetch HubSpot contact engagement by email.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Contact email.
      call: hubspot.get-contact
      with:
        email: '{{email}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-contact
        method: GET
Open in Framework → View in Fleet → hubspot-client-engagement-tracking.yml

Processes a construction change order by updating SAP project scope, adjusting the Microsoft Project schedule, recalculating budget in Oracle E-Business Suite, and notifying stakeholders in Microsoft Teams.

naftiko: '0.5'
info:
  label: Change Order Management
  description: Processes a construction change order by updating SAP project scope, adjusting the Microsoft Project schedule, recalculating budget in Oracle E-Business Suite, and notifying stakeholders in Microsoft Teams.
  tags:
  - project-mgmt
  - engineering
  - sap
  - microsoft-project
  - oracle-e-business-suite
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-orders
    port: 8080
    tools:
    - name: process-change-order
      description: Update scope, schedule, budget, and notify stakeholders for a change order.
      inputParameters:
      - name: change_order_id
        in: body
        type: string
        description: The change order identifier.
      - name: project_id
        in: body
        type: string
        description: The project identifier.
      - name: description
        in: body
        type: string
        description: Change order description.
      - name: cost_impact
        in: body
        type: number
        description: Cost impact amount.
      steps:
      - name: update-scope
        type: call
        call: sap.update-project-scope
        with:
          project_id: '{{project_id}}'
          change_order_id: '{{change_order_id}}'
          cost_impact: '{{cost_impact}}'
      - name: adjust-schedule
        type: call
        call: msproject.update-plan
        with:
          project_id: '{{project_id}}'
          change_description: '{{description}}'
      - name: update-budget
        type: call
        call: oracle-ebs.update-budget
        with:
          project_id: '{{project_id}}'
          adjustment: '{{cost_impact}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-message
        with:
          channel_id: project_{{project_id}}
          text: 'Change order {{change_order_id}} processed: {{description}}. Cost impact: ${{cost_impact}}. New budget: {{update-budget.new_total}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://fluor-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: projects
      path: /projects/{{project_id}}/scope
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: update-project-scope
        method: PATCH
  - type: http
    namespace: msproject
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: plans
      path: /planner/plans/{{project_id}}
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: update-plan
        method: PATCH
  - type: http
    namespace: oracle-ebs
    baseUri: https://oracle-ebs.fluor.com/webservices/rest/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ebs_token
    resources:
    - name: budgets
      path: /projects/{{project_id}}/budgets
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: update-budget
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → change-order-management.yml

Checks ES index at Fluor.

naftiko: '0.5'
info:
  label: ES Index Health
  description: Checks ES index at Fluor.
  tags:
  - search
  - elasticsearch
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: es-health
    port: 8080
    tools:
    - name: check-index
      description: Check ES index at Fluor.
      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.fluor.com:9200
    authentication:
      type: bearer
      token: $secrets.es_token
    resources:
    - name: indices
      path: /{{index}}/_stats
      inputParameters:
      - name: index
        in: path
      operations:
      - name: get-health
        method: GET
Open in Framework → View in Fleet → es-index-health.yml

Checks device compliance for field worker devices in Microsoft Endpoint Manager.

naftiko: '0.5'
info:
  label: Microsoft Endpoint Manager Device Check
  description: Checks device compliance for field worker devices in Microsoft Endpoint Manager.
  tags:
  - security
  - microsoft-endpoint-manager
capability:
  exposes:
  - type: mcp
    namespace: device-compliance
    port: 8080
    tools:
    - name: check-device-compliance
      description: Check Intune device compliance by device ID.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: The managed device ID.
      call: intune.get-device-compliance
      with:
        device_id: '{{device_id}}'
  consumes:
  - type: http
    namespace: intune
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: devices
      path: /deviceManagement/managedDevices/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device-compliance
        method: GET
Open in Framework → View in Fleet → microsoft-endpoint-manager-device-check.yml

Detects infrastructure drift at Fluor via Terraform, Slack, and Jira.

naftiko: '0.5'
info:
  label: Drift Detection Pipeline
  description: Detects infrastructure drift at Fluor 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 Fluor.
      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://fluor.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → drift-detection-pipeline.yml

Pulls 3D model data from AutoCAD, runs a clash detection simulation in MATLAB, documents findings in Confluence, and creates review tasks in Jira.

naftiko: '0.5'
info:
  label: Constructability Review Pipeline
  description: Pulls 3D model data from AutoCAD, runs a clash detection simulation in MATLAB, documents findings in Confluence, and creates review tasks in Jira.
  tags:
  - engineering
  - autocad
  - matlab
  - confluence
  - jira
capability:
  exposes:
  - type: mcp
    namespace: constructability
    port: 8080
    tools:
    - name: run-constructability-review
      description: Extract model data, run clash detection, document, and create review tasks.
      inputParameters:
      - name: model_id
        in: body
        type: string
        description: AutoCAD 3D model identifier.
      - name: project_id
        in: body
        type: string
        description: Project identifier.
      steps:
      - name: get-model
        type: call
        call: sharepoint.get-file
        with:
          site_id: engineering_site
          file_path: Projects/{{project_id}}/Models/{{model_id}}.dwg
      - name: run-clash-detection
        type: call
        call: matlab.execute-script
        with:
          script: clash_detection
          parameters: '{"model":"{{model_id}}","project":"{{project_id}}"}'
      - name: document-findings
        type: call
        call: confluence.create-page
        with:
          space: ENG
          title: 'Clash Detection: {{project_id}} — {{model_id}}'
          body: 'Clashes found: {{run-clash-detection.clash_count}}. Critical: {{run-clash-detection.critical_count}}. Details: {{run-clash-detection.summary}}'
      - name: create-review-tasks
        type: call
        call: jira.create-issue
        with:
          project_key: '{{project_id}}'
          summary: Resolve {{run-clash-detection.clash_count}} clashes in model {{model_id}}
          description: 'Constructability review found {{run-clash-detection.critical_count}} critical clashes. See: {{document-findings.url}}'
          priority: High
  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
  - type: http
    namespace: matlab
    baseUri: https://matlab.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.matlab_token
    resources:
    - name: scripts
      path: /execute
      operations:
      - name: execute-script
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://fluor.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: jira
    baseUri: https://fluor.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → constructability-review-pipeline.yml

Retrieves cost and usage data from Oracle Cloud for infrastructure cost management.

naftiko: '0.5'
info:
  label: Oracle Cloud Cost Reporting
  description: Retrieves cost and usage data from Oracle Cloud for infrastructure cost management.
  tags:
  - finance
  - cloud
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: cloud-costs
    port: 8080
    tools:
    - name: get-cloud-costs
      description: Fetch Oracle Cloud cost data by compartment and date range.
      inputParameters:
      - name: compartment_id
        in: body
        type: string
        description: Oracle Cloud compartment OCID.
      - 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: oraclecloud.get-usage
      with:
        compartment_id: '{{compartment_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: oraclecloud
    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-usage
        method: POST
Open in Framework → View in Fleet → oracle-cloud-cost-reporting.yml

Monitors data pipelines at Fluor via Databricks, Snowflake, Slack, and ServiceNow.

naftiko: '0.5'
info:
  label: Data Pipeline Monitor Pipeline
  description: Monitors data pipelines at Fluor 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 Fluor.
      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://fluor.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://fluor.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://fluor.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → data-pipeline-monitor-pipeline.yml

Checks Terraform workspace at Fluor.

naftiko: '0.5'
info:
  label: Terraform Workspace Check
  description: Checks Terraform workspace at Fluor.
  tags:
  - infrastructure
  - terraform
  - iac
capability:
  exposes:
  - type: mcp
    namespace: tf-ws
    port: 8080
    tools:
    - name: check-ws
      description: Check workspace at Fluor.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Workspace ID.
      call: terraform.get-ws
      with:
        workspace_id: '{{workspace_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.data.attributes.name
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /workspaces/{{workspace_id}}
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: get-ws
        method: GET
Open in Framework → View in Fleet → terraform-workspace-check.yml

Fetches an AutoCAD engineering drawing from SharePoint by drawing number and returns file metadata.

naftiko: '0.5'
info:
  label: AutoCAD Drawing Retrieval
  description: Fetches an AutoCAD engineering drawing from SharePoint by drawing number and returns file metadata.
  tags:
  - engineering
  - autocad
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: engineering-drawings
    port: 8080
    tools:
    - name: get-drawing
      description: Retrieve an AutoCAD drawing from SharePoint.
      inputParameters:
      - name: drawing_number
        in: body
        type: string
        description: The engineering drawing number.
      - name: project_id
        in: body
        type: string
        description: The project identifier.
      call: sharepoint.get-file
      with:
        site_id: engineering_site
        file_path: Projects/{{project_id}}/Drawings/{{drawing_number}}.dwg
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: files
      path: /{{site_id}}/drive/root:/{{file_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: file_path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → autocad-drawing-retrieval.yml

Checks Datadog monitor at Fluor.

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

Fetches a file from Google Drive for project documentation access.

naftiko: '0.5'
info:
  label: Google Drive Project Documentation
  description: Fetches a file from Google Drive for project documentation access.
  tags:
  - content
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: drive-files
    port: 8080
    tools:
    - name: get-drive-file
      description: Retrieve a Google Drive file by ID.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Google Drive file ID.
      call: gdrive.get-file
      with:
        file_id: '{{file_id}}'
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → google-drive-project-documentation.yml

Checks on-call at Fluor.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Check
  description: Checks on-call at Fluor.
  tags:
  - incident-management
  - pagerduty
  - on-call
capability:
  exposes:
  - type: mcp
    namespace: pd-oncall
    port: 8080
    tools:
    - name: get-oncall
      description: Check on-call at Fluor.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: Schedule ID.
      call: pagerduty.get-oncall
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: user
        type: string
        mapping: $.oncalls[0].user.summary
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: oncalls
      path: /oncalls
      operations:
      - name: get-oncall
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-check.yml

When an engineering drawing is approved in AutoCAD, uploads the file to SharePoint, creates a revision record in SAP Document Management, and notifies reviewers in Microsoft Teams.

naftiko: '0.5'
info:
  label: Engineering Document Control Pipeline
  description: When an engineering drawing is approved in AutoCAD, uploads the file to SharePoint, creates a revision record in SAP Document Management, and notifies reviewers in Microsoft Teams.
  tags:
  - engineering
  - document-control
  - autocad
  - sharepoint
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: document-control
    port: 8080
    tools:
    - name: process-drawing-approval
      description: Upload approved drawing, create revision record, and notify reviewers.
      inputParameters:
      - name: drawing_number
        in: body
        type: string
        description: The engineering drawing number.
      - name: revision
        in: body
        type: string
        description: Drawing revision (e.g., Rev-C).
      - name: file_url
        in: body
        type: string
        description: URL of the approved drawing file.
      - name: project_id
        in: body
        type: string
        description: Associated project ID.
      steps:
      - name: upload-drawing
        type: call
        call: sharepoint.upload-file
        with:
          site_id: engineering_site
          folder_path: Projects/{{project_id}}/Drawings
          file_name: '{{drawing_number}}_{{revision}}.dwg'
          content: '{{file_url}}'
      - name: create-revision
        type: call
        call: sap.create-document-revision
        with:
          document_number: '{{drawing_number}}'
          revision: '{{revision}}'
          project_id: '{{project_id}}'
          url: '{{upload-drawing.url}}'
      - name: notify-reviewers
        type: call
        call: msteams.send-message
        with:
          channel_id: engineering_{{project_id}}
          text: 'Drawing approved: {{drawing_number}} {{revision}} for project {{project_id}}. Download: {{upload-drawing.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: sap
    baseUri: https://fluor-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: documents
      path: /document-management/revisions
      operations:
      - name: create-document-revision
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → engineering-document-control-pipeline.yml

Checks Redis at Fluor.

naftiko: '0.5'
info:
  label: Redis Cache Status
  description: Checks Redis at Fluor.
  tags:
  - caching
  - redis
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: redis
    port: 8080
    tools:
    - name: check-cache
      description: Check Redis at Fluor.
      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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.redis_token
    resources:
    - name: instances
      path: /instances/{{instance}}/info
      inputParameters:
      - name: instance
        in: path
      operations:
      - name: get-info
        method: GET
Open in Framework → View in Fleet → redis-cache-status.yml

Checks IT incident in ServiceNow for Fluor.

naftiko: '0.5'
info:
  label: ServiceNow Incident Detail Check
  description: Checks IT incident in ServiceNow for Fluor.
  tags:
  - it-service
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: snow-incident
    port: 8080
    tools:
    - name: check-incident
      description: Check incident at Fluor.
      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://fluor.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-detail-check.yml

Assigns mandatory construction safety training via Pluralsight to field workers based on Workday project assignments.

naftiko: '0.5'
info:
  label: Pluralsight Training Assignment
  description: Assigns mandatory construction safety training via Pluralsight to field workers based on Workday project assignments.
  tags:
  - safety
  - learning
  - pluralsight
  - workday
capability:
  exposes:
  - type: mcp
    namespace: safety-training
    port: 8080
    tools:
    - name: assign-safety-training
      description: Assign safety training to project workers.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The project identifier.
      - name: training_path_id
        in: body
        type: string
        description: Pluralsight learning path ID.
      steps:
      - name: get-project-workers
        type: call
        call: workday.get-project-team
        with:
          project_id: '{{project_id}}'
      - name: assign-training
        type: call
        call: pluralsight.assign-path
        with:
          path_id: '{{training_path_id}}'
          emails: '{{get-project-workers.emails}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: teams
      path: /projects/{{project_id}}/team
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-team
        method: GET
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: assignments
      path: /assignments
      operations:
      - name: assign-path
        method: POST
Open in Framework → View in Fleet → pluralsight-training-assignment.yml

Tracks contract renewals at Fluor via contracts system, email, Jira, and Salesforce.

naftiko: '0.5'
info:
  label: Contract Renewal Pipeline
  description: Tracks contract renewals at Fluor 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 Fluor.
      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.fluor.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.fluor.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://fluor.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://fluor.com.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opps
      path: /sobjects/Opportunity
      operations:
      - name: update
        method: PATCH
Open in Framework → View in Fleet → contract-renewal-pipeline.yml

Remediates vulnerabilities at Fluor via scanning, Jira, and Slack.

naftiko: '0.5'
info:
  label: Security Vulnerability Remediation Pipeline
  description: Remediates vulnerabilities at Fluor 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 Fluor.
      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.fluor.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://fluor.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → security-vulnerability-remediation-pipeline.yml

Onboards employees at Fluor with Okta, ServiceNow, Slack, and calendar.

naftiko: '0.5'
info:
  label: New Employee IT Onboarding Pipeline
  description: Onboards employees at Fluor 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 Fluor.
      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://fluor.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://fluor.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: users
      path: /users.admin.invite
      operations:
      - name: invite
        method: POST
  - type: http
    namespace: calendar
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: events
      path: /users/hr/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → new-employee-it-onboarding-pipeline.yml

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:
  - operations
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: incident-mgmt
    port: 8080
    tools:
    - name: get-incident-status
      description: Fetch 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://fluor.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status.yml

Generates a Microsoft Excel report from project data and uploads it to SharePoint.

naftiko: '0.5'
info:
  label: Microsoft Excel Report Generation
  description: Generates a Microsoft Excel report from project data and uploads it to SharePoint.
  tags:
  - reporting
  - microsoft-excel
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: excel-reports
    port: 8080
    tools:
    - name: generate-excel-report
      description: Generate an Excel report and upload to SharePoint.
      inputParameters:
      - name: template_path
        in: body
        type: string
        description: SharePoint path to the Excel template.
      - name: data
        in: body
        type: string
        description: JSON data to populate the report.
      - name: output_folder
        in: body
        type: string
        description: SharePoint output folder.
      steps:
      - name: get-template
        type: call
        call: sharepoint.get-file
        with:
          site_id: reports_site
          file_path: '{{template_path}}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: reports_site
          folder_path: '{{output_folder}}'
          file_name: report_output.xlsx
          content: '{{data}}'
  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
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → microsoft-excel-report-generation.yml

Retrieves New Relic APM metrics for project management application monitoring.

naftiko: '0.5'
info:
  label: New Relic Application Performance
  description: Retrieves New Relic APM metrics for project management application monitoring.
  tags:
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-app-performance
      description: Fetch New Relic APM metrics.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: New Relic application ID.
      call: newrelic.get-app-metrics
      with:
        app_id: '{{app_id}}'
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}/metrics/data.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-application-performance.yml

Verifies backups at Fluor.

naftiko: '0.5'
info:
  label: Backup Verification Pipeline
  description: Verifies backups at Fluor.
  tags:
  - database
  - backup
  - operations
capability:
  exposes:
  - type: mcp
    namespace: backup-verify
    port: 8080
    tools:
    - name: verify-backups
      description: Verify backups at Fluor.
      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.fluor.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://fluor.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → backup-verification-pipeline.yml

Reallocates costs at Fluor.

naftiko: '0.5'
info:
  label: Cost Reallocation Pipeline
  description: Reallocates costs at Fluor.
  tags:
  - finance
  - cost-allocation
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: cost-realloc
    port: 8080
    tools:
    - name: reallocate
      description: Reallocate costs at Fluor.
      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.fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: realloc
      path: /compute
      operations:
      - name: realloc
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cost-reallocation-pipeline.yml

Retrieves SolarWinds monitoring data for construction site IT infrastructure.

naftiko: '0.5'
info:
  label: SolarWinds Site Infrastructure Monitoring
  description: Retrieves SolarWinds monitoring data for construction site IT infrastructure.
  tags:
  - monitoring
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: site-monitoring
    port: 8080
    tools:
    - name: get-site-alerts
      description: Fetch SolarWinds alerts for a construction site.
      inputParameters:
      - name: site_name
        in: body
        type: string
        description: The construction site name.
      call: solarwinds.get-alerts
      with:
        site: '{{site_name}}'
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.fluor.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: alerts
      path: /Query
      operations:
      - name: get-alerts
        method: POST
Open in Framework → View in Fleet → solarwinds-site-infrastructure-monitoring.yml

Assigns mandatory safety training via Pluralsight to field workers based on Workday project assignments.

naftiko: '0.5'
info:
  label: Pluralsight Safety Training Assignment
  description: Assigns mandatory safety training via Pluralsight to field workers based on Workday project assignments.
  tags:
  - safety
  - learning
  - pluralsight
  - workday
capability:
  exposes:
  - type: mcp
    namespace: safety-training
    port: 8080
    tools:
    - name: assign-safety-training
      description: Assign safety training to workers on a project.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The project identifier.
      - name: training_path_id
        in: body
        type: string
        description: Pluralsight learning path ID.
      steps:
      - name: get-project-workers
        type: call
        call: workday.get-project-team
        with:
          project_id: '{{project_id}}'
      - name: assign-training
        type: call
        call: pluralsight.assign-path
        with:
          path_id: '{{training_path_id}}'
          emails: '{{get-project-workers.emails}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: teams
      path: /projects/{{project_id}}/team
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-team
        method: GET
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: assignments
      path: /assignments
      operations:
      - name: assign-path
        method: POST
Open in Framework → View in Fleet → pluralsight-safety-training-assignment.yml

Retrieves the status and details of a Jira issue by key.

naftiko: '0.5'
info:
  label: Jira Issue Lookup
  description: Retrieves the status and details of a Jira issue by key.
  tags:
  - project-mgmt
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira-ops
    port: 8080
    tools:
    - name: get-issue
      description: Fetch a Jira issue by key.
      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://fluor.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-lookup.yml

Retrieves sprint progress at Fluor.

naftiko: '0.5'
info:
  label: Jira Sprint Progress Lookup
  description: Retrieves sprint progress at Fluor.
  tags:
  - project-management
  - jira
  - agile
capability:
  exposes:
  - type: mcp
    namespace: jira-sprint
    port: 8080
    tools:
    - name: get-sprint
      description: Look up sprint at Fluor.
      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://fluor.com.atlassian.net/rest/agile/1.0
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: sprints
      path: /board/1/sprint
      operations:
      - name: get-sprints
        method: GET
Open in Framework → View in Fleet → jira-sprint-progress-lookup.yml

Checks the latest Veritas InfoScale backup status for project data storage.

naftiko: '0.5'
info:
  label: Veritas InfoScale Backup Status
  description: Checks the latest Veritas InfoScale backup status for project data storage.
  tags:
  - infrastructure
  - backup
  - veritas-infoscale
capability:
  exposes:
  - type: mcp
    namespace: backup-status
    port: 8080
    tools:
    - name: get-backup-status
      description: Fetch backup status for a volume group.
      inputParameters:
      - name: volume_group
        in: body
        type: string
        description: The volume group name.
      call: veritas.get-backup-status
      with:
        volume_group: '{{volume_group}}'
  consumes:
  - type: http
    namespace: veritas
    baseUri: https://veritas.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.veritas_token
    resources:
    - name: backups
      path: /volume-groups/{{volume_group}}/backups/latest
      inputParameters:
      - name: volume_group
        in: path
      operations:
      - name: get-backup-status
        method: GET
Open in Framework → View in Fleet → veritas-infoscale-backup-status.yml

Retrieves Oracle Cloud instance status for project computing resources.

naftiko: '0.5'
info:
  label: Oracle Cloud Infrastructure Monitoring
  description: Retrieves Oracle Cloud instance status for project computing resources.
  tags:
  - infrastructure
  - oracle-cloud
capability:
  exposes:
  - type: mcp
    namespace: oci-monitoring
    port: 8080
    tools:
    - name: get-instance-status
      description: Fetch Oracle Cloud instance status.
      inputParameters:
      - name: instance_id
        in: body
        type: string
        description: OCI instance OCID.
      call: oraclecloud.get-instance
      with:
        instance_id: '{{instance_id}}'
  consumes:
  - type: http
    namespace: oraclecloud
    baseUri: https://iaas.us-ashburn-1.oraclecloud.com/20160918
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: instances
      path: /instances/{{instance_id}}
      inputParameters:
      - name: instance_id
        in: path
      operations:
      - name: get-instance
        method: GET
Open in Framework → View in Fleet → oracle-cloud-infrastructure-monitoring.yml

Escalates IT incidents at Fluor via ServiceNow, PagerDuty, and Slack.

naftiko: '0.5'
info:
  label: IT Incident Escalation Pipeline
  description: Escalates IT incidents at Fluor 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 Fluor.
      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://fluor.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: channels
      path: /conversations.create
      operations:
      - name: create-channel
        method: POST
Open in Framework → View in Fleet → it-incident-escalation-pipeline.yml

Checks Vault secret at Fluor.

naftiko: '0.5'
info:
  label: Vault Secret Metadata
  description: Checks Vault secret at Fluor.
  tags:
  - security
  - vault
  - secrets-management
capability:
  exposes:
  - type: mcp
    namespace: vault
    port: 8080
    tools:
    - name: check-secret
      description: Check secret at Fluor.
      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.fluor.com/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: secrets
      path: /secret/metadata/{{path}}
      inputParameters:
      - name: path
        in: path
      operations:
      - name: get-metadata
        method: GET
Open in Framework → View in Fleet → vault-secret-metadata.yml

Generates compliance reports at Fluor from Snowflake, Power BI, and email.

naftiko: '0.5'
info:
  label: Quarterly Compliance Report Pipeline
  description: Generates compliance reports at Fluor 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 Fluor.
      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://fluor.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.fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → quarterly-compliance-report-pipeline.yml

Tests disaster recovery at Fluor via failover, health checks, and reporting.

naftiko: '0.5'
info:
  label: DR Test Pipeline
  description: Tests disaster recovery at Fluor 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 Fluor.
      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.fluor.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.fluor.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://fluor.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → dr-test-pipeline.yml

Pulls project cost data from SAP, validates against Oracle E-Business Suite budgets, generates a Crystal Reports variance report, and distributes to the project team via SharePoint and Microsoft Teams.

naftiko: '0.5'
info:
  label: Project Cost Tracking Orchestrator
  description: Pulls project cost data from SAP, validates against Oracle E-Business Suite budgets, generates a Crystal Reports variance report, and distributes to the project team via SharePoint and Microsoft Teams.
  tags:
  - project-mgmt
  - finance
  - sap
  - oracle-e-business-suite
  - crystal-reports
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: project-costs
    port: 8080
    tools:
    - name: generate-cost-variance-report
      description: Pull costs, validate against budget, generate report, and distribute.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The SAP project identifier.
      - name: period
        in: body
        type: string
        description: Reporting period (e.g., 2026-03).
      steps:
      - name: get-costs
        type: call
        call: sap.get-project-costs
        with:
          project_id: '{{project_id}}'
          period: '{{period}}'
      - name: get-budget
        type: call
        call: oracle-ebs.get-budget
        with:
          project_id: '{{project_id}}'
          period: '{{period}}'
      - name: generate-report
        type: call
        call: crystal.generate-report
        with:
          template_id: cost_variance
          parameters: '{"project":"{{project_id}}","actual":"{{get-costs.total}}","budget":"{{get-budget.total}}","variance":"{{get-costs.variance}}"}'
      - name: upload-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: projects_site
          folder_path: Projects/{{project_id}}/CostReports/{{period}}
          file_name: cost_variance_{{period}}.pdf
          content: '{{generate-report.output_url}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: project_{{project_id}}
          text: 'Cost variance report ready for {{project_id}} ({{period}}): Actual {{get-costs.total}} vs Budget {{get-budget.total}}. Download: {{upload-report.url}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://fluor-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: projects
      path: /projects/{{project_id}}/costs
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://oracle-ebs.fluor.com/webservices/rest/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ebs_token
    resources:
    - name: budgets
      path: /projects/{{project_id}}/budgets
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-budget
        method: GET
  - type: http
    namespace: crystal
    baseUri: https://reports.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/generate
      operations:
      - name: generate-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:/{{folder_path}}/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → project-cost-tracking-orchestrator.yml

Runs a MATLAB engineering simulation for structural analysis and returns the results.

naftiko: '0.5'
info:
  label: MATLAB Engineering Simulation
  description: Runs a MATLAB engineering simulation for structural analysis and returns the results.
  tags:
  - engineering
  - matlab
capability:
  exposes:
  - type: mcp
    namespace: simulations
    port: 8080
    tools:
    - name: run-simulation
      description: Execute a MATLAB engineering simulation.
      inputParameters:
      - name: script_name
        in: body
        type: string
        description: MATLAB script name.
      - name: parameters
        in: body
        type: string
        description: JSON parameters for the simulation.
      call: matlab.execute-script
      with:
        script: '{{script_name}}'
        parameters: '{{parameters}}'
  consumes:
  - type: http
    namespace: matlab
    baseUri: https://matlab.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.matlab_token
    resources:
    - name: scripts
      path: /execute
      operations:
      - name: execute-script
        method: POST
Open in Framework → View in Fleet → matlab-engineering-simulation.yml

Checks Grafana dashboard at Fluor.

naftiko: '0.5'
info:
  label: Grafana Dashboard Status
  description: Checks Grafana dashboard at Fluor.
  tags:
  - monitoring
  - grafana
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: check-dash
      description: Check dashboard at Fluor.
      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.fluor.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dash
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-status.yml

Purges Cloudflare CDN cache for project portal pages.

naftiko: '0.5'
info:
  label: Cloudflare CDN Cache Management
  description: Purges Cloudflare CDN cache for project portal pages.
  tags:
  - infrastructure
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: cdn-mgmt
    port: 8080
    tools:
    - name: purge-cache
      description: Purge Cloudflare cache for specified URLs.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      - name: urls
        in: body
        type: string
        description: JSON array of URLs to purge.
      call: cloudflare.purge-cache
      with:
        zone_id: '{{zone_id}}'
        files: '{{urls}}'
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: cache
      path: /zones/{{zone_id}}/purge_cache
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: purge-cache
        method: POST
Open in Framework → View in Fleet → cloudflare-cdn-cache-management.yml

Tracks material shipments in SAP, maps delivery locations via Google Maps, and updates the project procurement team in Microsoft Teams when materials arrive.

naftiko: '0.5'
info:
  label: Material Tracking and Logistics
  description: Tracks material shipments in SAP, maps delivery locations via Google Maps, and updates the project procurement team in Microsoft Teams when materials arrive.
  tags:
  - procurement
  - logistics
  - sap
  - google-maps
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: material-tracking
    port: 8080
    tools:
    - name: track-material-shipment
      description: Track shipment, map location, and notify team on arrival.
      inputParameters:
      - name: shipment_id
        in: body
        type: string
        description: SAP shipment document number.
      - name: project_id
        in: body
        type: string
        description: Project identifier.
      steps:
      - name: get-shipment
        type: call
        call: sap.get-shipment
        with:
          shipment_id: '{{shipment_id}}'
      - name: map-location
        type: call
        call: googlemaps.geocode
        with:
          address: '{{get-shipment.delivery_address}}'
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: procurement_{{project_id}}
          text: 'Material shipment {{shipment_id}}: {{get-shipment.status}}. ETA: {{get-shipment.eta}}. Destination: {{get-shipment.delivery_address}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://fluor-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: shipments
      path: /logistics/shipments/{{shipment_id}}
      inputParameters:
      - name: shipment_id
        in: path
      operations:
      - name: get-shipment
        method: GET
  - type: http
    namespace: googlemaps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: bearer
      token: $secrets.google_maps_key
    resources:
    - name: geocoding
      path: /geocode/json
      operations:
      - name: geocode
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → material-tracking-and-logistics.yml

Generates monthly security reports at Fluor from Splunk and Qualys.

naftiko: '0.5'
info:
  label: Monthly Security Report Pipeline
  description: Generates monthly security reports at Fluor 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 Fluor.
      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.fluor.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.fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → monthly-security-report-pipeline.yml

Queries Palo Alto Networks firewall for active threats and policy status.

naftiko: '0.5'
info:
  label: Palo Alto Networks Firewall Status
  description: Queries Palo Alto Networks firewall for active threats and policy status.
  tags:
  - security
  - palo-alto-networks
capability:
  exposes:
  - type: mcp
    namespace: firewall-status
    port: 8080
    tools:
    - name: get-firewall-status
      description: Fetch Palo Alto firewall threat summary.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: The firewall device identifier.
      call: paloalto.get-status
      with:
        device_id: '{{device_id}}'
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://firewall.fluor.com/restapi/v10.1
    authentication:
      type: bearer
      token: $secrets.paloalto_token
    resources:
    - name: devices
      path: /Device/SystemInfo
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-firewall-status.yml

Triggers a Terraform plan for construction site IT infrastructure and posts the plan to Microsoft Teams for approval.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Deployment
  description: Triggers a Terraform plan for construction site IT infrastructure and posts the plan to Microsoft Teams for approval.
  tags:
  - infrastructure
  - terraform
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: infra-automation
    port: 8080
    tools:
    - name: run-terraform-plan
      description: Trigger a Terraform plan and post summary to Teams.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID.
      - name: team_channel
        in: body
        type: string
        description: Teams channel for plan review.
      steps:
      - name: create-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          plan_only: true
      - name: notify-team
        type: call
        call: msteams.send-message
        with:
          channel_id: '{{team_channel}}'
          text: 'Terraform plan: {{create-run.resource_additions}} additions, {{create-run.resource_changes}} changes. Run: {{create-run.id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{channel_id}}/channels/general/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-deployment.yml

Retrieves Teams activity at Fluor.

naftiko: '0.5'
info:
  label: Teams Channel Activity
  description: Retrieves Teams activity at Fluor.
  tags:
  - communications
  - microsoft-teams
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: teams-activity
    port: 8080
    tools:
    - name: get-activity
      description: Check Teams activity at Fluor.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Team ID.
      - name: channel_id
        in: body
        type: string
        description: Channel ID.
      call: teams.get-messages
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
      outputParameters:
      - name: count
        type: number
        mapping: $.value.length
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: get-messages
        method: GET
Open in Framework → View in Fleet → teams-channel-activity.yml

Manages API deprecation at Fluor via consumer identification, notices, and tracking.

naftiko: '0.5'
info:
  label: API Deprecation Pipeline
  description: Manages API deprecation at Fluor 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 Fluor.
      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.fluor.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.fluor.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.fluor.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://fluor.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → api-deprecation-pipeline.yml

Checks build at Fluor.

naftiko: '0.5'
info:
  label: Azure DevOps Build Check
  description: Checks build at Fluor.
  tags:
  - devops
  - azure-devops
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: azdo-build
    port: 8080
    tools:
    - name: check-build
      description: Check build at Fluor.
      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/fluor.com
    authentication:
      type: bearer
      token: $secrets.azdo_token
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds/{{build_id}}
      inputParameters:
      - name: project
        in: path
      - name: build_id
        in: path
      operations:
      - name: get-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-check.yml

Gathers final project documents from SharePoint, cost summaries from SAP, lessons learned from Confluence, and generates a closeout package in Crystal Reports for archive.

naftiko: '0.5'
info:
  label: Project Closeout Documentation
  description: Gathers final project documents from SharePoint, cost summaries from SAP, lessons learned from Confluence, and generates a closeout package in Crystal Reports for archive.
  tags:
  - project-mgmt
  - documentation
  - sharepoint
  - sap
  - confluence
  - crystal-reports
capability:
  exposes:
  - type: mcp
    namespace: project-closeout
    port: 8080
    tools:
    - name: generate-closeout-package
      description: Assemble final project documents, costs, lessons learned, and generate closeout report.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The project identifier.
      steps:
      - name: get-documents
        type: call
        call: sharepoint.list-files
        with:
          site_id: projects_site
          folder_path: Projects/{{project_id}}
      - name: get-final-costs
        type: call
        call: sap.get-project-costs
        with:
          project_id: '{{project_id}}'
          period: final
      - name: get-lessons-learned
        type: call
        call: confluence.search
        with:
          query: lessons learned {{project_id}}
      - name: generate-closeout
        type: call
        call: crystal.generate-report
        with:
          template_id: project_closeout
          parameters: '{"project":"{{project_id}}","final_cost":"{{get-final-costs.total}}","documents":"{{get-documents.count}}","lessons":"{{get-lessons-learned.count}}"}'
      - name: archive-report
        type: call
        call: sharepoint.upload-file
        with:
          site_id: archive_site
          folder_path: Closeout/{{project_id}}
          file_name: closeout_package.pdf
          content: '{{generate-closeout.output_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}}
      inputParameters:
      - name: site_id
        in: path
      - name: folder_path
        in: path
      operations:
      - name: list-files
        method: GET
      - name: upload-file
        method: PUT
  - type: http
    namespace: sap
    baseUri: https://fluor-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: projects
      path: /projects/{{project_id}}/costs
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project-costs
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://fluor.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search
        method: GET
  - type: http
    namespace: crystal
    baseUri: https://reports.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/generate
      operations:
      - name: generate-report
        method: POST
Open in Framework → View in Fleet → project-closeout-documentation.yml

Evaluates a new vendor by checking SAP vendor master, validating certifications in Oracle E-Business Suite, running background checks via an external API, and creating a ServiceNow approval request.

naftiko: '0.5'
info:
  label: Vendor Qualification Pipeline
  description: Evaluates a new vendor by checking SAP vendor master, validating certifications in Oracle E-Business Suite, running background checks via an external API, and creating a ServiceNow approval request.
  tags:
  - procurement
  - vendor-management
  - sap
  - oracle-e-business-suite
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vendor-qualification
    port: 8080
    tools:
    - name: qualify-vendor
      description: Evaluate a vendor through master data, certifications, background check, and approval.
      inputParameters:
      - name: vendor_name
        in: body
        type: string
        description: Vendor company name.
      - name: vendor_id
        in: body
        type: string
        description: Vendor identifier.
      - name: project_id
        in: body
        type: string
        description: Target project for the vendor.
      steps:
      - name: check-vendor-master
        type: call
        call: sap.get-vendor
        with:
          vendor_id: '{{vendor_id}}'
      - name: check-certifications
        type: call
        call: oracle-ebs.get-vendor-certs
        with:
          vendor_id: '{{vendor_id}}'
      - name: create-approval
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Vendor qualification: {{vendor_name}} for project {{project_id}}'
          description: 'SAP status: {{check-vendor-master.status}}. Certifications: {{check-certifications.cert_list}}.'
          assigned_group: Procurement_Mgmt
  consumes:
  - type: http
    namespace: sap
    baseUri: https://fluor-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: vendors
      path: /vendors/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://oracle-ebs.fluor.com/webservices/rest/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ebs_token
    resources:
    - name: certifications
      path: /vendors/{{vendor_id}}/certifications
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor-certs
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://fluor.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → vendor-qualification-pipeline.yml

Creates postmortems at Fluor.

naftiko: '0.5'
info:
  label: Incident Postmortem Pipeline
  description: Creates postmortems at Fluor.
  tags:
  - incident-management
  - postmortem
  - pagerduty
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: postmortem
    port: 8080
    tools:
    - name: create-postmortem
      description: Create postmortem at Fluor.
      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://fluor.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: calendar
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: events
      path: /users/sre/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → incident-postmortem-pipeline.yml

Validates subcontractor timesheets from SAP against project schedules in Microsoft Project, checks rates in Oracle E-Business Suite, and flags discrepancies in ServiceNow.

naftiko: '0.5'
info:
  label: Subcontractor Timesheet Validation
  description: Validates subcontractor timesheets from SAP against project schedules in Microsoft Project, checks rates in Oracle E-Business Suite, and flags discrepancies in ServiceNow.
  tags:
  - project-mgmt
  - finance
  - sap
  - microsoft-project
  - oracle-e-business-suite
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: timesheet-validation
    port: 8080
    tools:
    - name: validate-timesheets
      description: Validate subcontractor timesheets against schedules and rates.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The project identifier.
      - name: period
        in: body
        type: string
        description: Timesheet period (e.g., 2026-W13).
      steps:
      - name: get-timesheets
        type: call
        call: sap.get-timesheets
        with:
          project_id: '{{project_id}}'
          period: '{{period}}'
      - name: get-schedule
        type: call
        call: msproject.get-tasks
        with:
          project_id: '{{project_id}}'
      - name: check-rates
        type: call
        call: oracle-ebs.get-contract-rates
        with:
          project_id: '{{project_id}}'
      - name: flag-issues
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Timesheet discrepancies: {{project_id}} ({{period}})'
          description: 'Hours submitted: {{get-timesheets.total_hours}}. Schedule capacity: {{get-schedule.available_hours}}. Rate variances: {{check-rates.variance_count}}.'
          assigned_group: Project_Controls
  consumes:
  - type: http
    namespace: sap
    baseUri: https://fluor-sap.s4hana.cloud/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: timesheets
      path: /timesheets
      operations:
      - name: get-timesheets
        method: GET
  - type: http
    namespace: msproject
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /planner/plans/{{project_id}}/tasks
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-tasks
        method: GET
  - type: http
    namespace: oracle-ebs
    baseUri: https://oracle-ebs.fluor.com/webservices/rest/v1
    authentication:
      type: bearer
      token: $secrets.oracle_ebs_token
    resources:
    - name: contracts
      path: /contracts/rates
      operations:
      - name: get-contract-rates
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://fluor.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → subcontractor-timesheet-validation.yml

Offboards employees at Fluor via Okta, Slack, ServiceNow, and storage.

naftiko: '0.5'
info:
  label: Employee Offboarding Pipeline
  description: Offboards employees at Fluor 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 Fluor.
      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://fluor.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://fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.storage_token
    resources:
    - name: archives
      path: /archive
      operations:
      - name: archive
        method: POST
Open in Framework → View in Fleet → employee-offboarding-pipeline.yml

Processes invoices at Fluor via OCR, SAP matching, approval, and Oracle recording.

naftiko: '0.5'
info:
  label: Vendor Invoice Processing Pipeline
  description: Processes invoices at Fluor 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 Fluor.
      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.fluor.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.fluor.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.fluor.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.fluor.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: create-payment
        method: POST
Open in Framework → View in Fleet → vendor-invoice-processing-pipeline.yml

Areas — Total: 1300

  • .NET
  • 3D
  • 3D Modeling
  • AI Agents
  • AI Governance
  • AI Infrastructure
  • AI Solutions
  • AJAX
  • API Management
  • AWS Step Functions
  • Acceptance Testing
  • Access Controls
  • Access Management
  • Accessibility
  • Account Management
  • Accountability
  • Accounting
  • Accounting Systems
  • Accounts Payables
  • Accounts Receivables
  • Active Directory
  • Ad Management
  • Ad-teches
  • Administration
  • Administratives
  • Advertising
  • Agentic AI
  • Agentic Systems
  • Agentics
  • Agents
  • Alarm Systems
  • Alerting
  • Alerts
  • Algorithm Development
  • Algorithms
  • Ambassadors
  • Analysis
  • Analytics
  • Animations
  • Annotations
  • Anomaly Detections
  • Apache Portable Runtimes
  • Application Development
  • Application Lifecycle Management
  • Application Management
  • Application Performance Management
  • Application Platforms
  • Application Programming Interfaces
  • Application Securities
  • Applications
  • Architecture Design
  • Architectures
  • Archives
  • Archiving
  • Artificial Intelligence
  • Artificial Intelligence/Machine Learning
  • Assessments
  • Asset Inventories
  • Asset Management
  • Asset Managers
  • Assignments
  • Audio
  • Audit Processes
  • Audit Reports
  • Audit Trails
  • Audits
  • Australias
  • Authentications
  • Authoring Tools
  • Authorizations
  • Automated Testing
  • Automation
  • Automation Platforms
  • Automation Tools And Processes
  • Automotive
  • Autonomous Systems
  • Awareness
  • BI
  • BPM
  • Backends
  • Background Checks
  • Backups
  • Badge Scannings
  • Banking
  • Bashes
  • Battery Technologies
  • Benchmarkings
  • Benchmarks
  • Benefits Administration
  • Best Practices
  • Big Data
  • Billings
  • Booking Systems
  • Bookings
  • Bots
  • Bridges
  • Broadcastings
  • Browsers
  • Budgetings
  • Building Automation
  • Building Performances
  • Built Environments
  • Business
  • Business Analysis
  • Business Analytics
  • Business Continuities
  • Business Intelligence
  • Business Management
  • Business Models
  • Business News
  • Business Operations
  • Business Plannings
  • Business Plans
  • Business Process
  • Business Strategies
  • Business Transformations
  • Business to Consumers
  • Business-to-Business
  • CI
  • Caches
  • Caching
  • Calendars
  • Cameras
  • Campaign Management
  • Carbon Accounting
  • Career Development
  • Case Management
  • Cash Flow Management
  • Catalogs
  • Certificates
  • Certifications
  • Change Data Captures
  • Change Management
  • Charts
  • Chatbots
  • Chats
  • Chemical Engineering
  • Chromiums
  • Cities
  • Claims Management
  • Classification
  • Clean Energies
  • Clearings
  • Client Communications
  • Client Data
  • Client Experiences
  • Client Management
  • Client Portals
  • Client Relations
  • Client Relationship Management
  • Client Reportings
  • Client Services
  • Client Updates
  • Client Visions
  • Clients
  • Climate Changes
  • Climate Controls
  • Climates
  • Cloud Computing
  • Cloud Data
  • Cloud Integrations
  • Cloud Networking
  • Cloud Platforms
  • Cloud Services
  • Cloud Technologies
  • Cloud-Based
  • Cloud-Based Data Platforms
  • Cloud-native Architectures
  • Clouds
  • Coals
  • Code Analysis
  • Code Reviews
  • Codes
  • Collaboration Tools
  • Collaborations
  • Collaborative Development
  • Collaterals
  • Collections
  • Commerce
  • Commodities
  • Common Sense
  • Communication Tools
  • Communications
  • Communities
  • Community Engagements
  • Compatibilities
  • Competency Management
  • Competitive Intelligence
  • Competitor Analysis
  • Compilations
  • Compilers
  • Complex Systems
  • Compliance
  • Compliance Frameworks
  • Compliance Management
  • Compliance Managers
  • Compliance Monitoring
  • Compliance Policies
  • Compressions
  • Computational Tools
  • Computations
  • Computer Aided Design
  • Computer Aided Engineering
  • Computer Aided Manufacturing
  • Computer Applications
  • Computer Sciences
  • Computer Systems
  • Computer Visions
  • Computers
  • Computes
  • Computing
  • Conferences
  • Conferencings
  • Configuration Management
  • Configurations
  • Connectivity
  • Connectors
  • Construction
  • Consulting Services
  • Consultings
  • Contacts
  • Containerization
  • Containers
  • Content Creations
  • Content Deliveries
  • Content Delivery Networks
  • Content Filterings
  • Content Management
  • Content Management Systems
  • Content Strategies
  • Contents
  • Contexts and Dependency Injections
  • Continuous Improvements
  • Continuous Integration/Continuous Deployments
  • Continuous Learning
  • Continuous Monitoring
  • Contract Management
  • Contributions
  • Control Methods
  • Control Systems
  • Controllers
  • Controls
  • Controls Frameworks
  • Conveyor Systems
  • Coordinates
  • Coordination Services
  • Core Systems
  • Cost Accounting
  • Cost Containments
  • Cost Controls
  • Cost Engineering
  • Cost Management
  • Cost Optimizations
  • Country-Specific
  • Crawlings
  • Creative Suites
  • Creative Tools
  • Credentials
  • Credit Controls
  • Credit Management
  • Credit Risks
  • Critical Thinkings
  • Cross Platforms
  • Cs
  • Currencies
  • Custodies
  • Custom Solutions
  • Customer Data Platforms
  • Customer Engagements
  • Customer Experiences
  • Customer Feedback
  • Customer Relationship Management
  • Customer Satisfactions
  • Customer Service
  • Customer Success
  • Customer Support
  • Customizations
  • Customs
  • Cyber Securities
  • Cybersecurities
  • DNS, DHCP, and IP Address Management
  • Dashboards
  • Data
  • Data Access
  • Data Acquisition
  • Data Analysis
  • Data Analysis Software
  • Data Analysis Tools
  • Data Analytics
  • Data Analytics Models
  • Data Architectures
  • Data Captures
  • Data Catalogs
  • Data Center Infrastructure
  • Data Center Operations
  • Data Centers
  • Data Centres
  • Data Classification
  • Data Collection Tools
  • Data Collections
  • Data Conversions
  • Data Distributions
  • Data Encryptions
  • Data Engineering
  • Data Entries
  • Data Exchanges
  • Data Extractions
  • Data Factories
  • Data Flows
  • Data Gatherings
  • Data Governance
  • Data Governance Frameworks
  • Data Governance Policies
  • Data Governance Tools
  • Data Ingestions
  • Data Insights
  • Data Integrations
  • Data Integrity
  • Data Intelligence
  • Data Interpretations
  • Data Lake Storage
  • Data Lakes
  • Data Lineages
  • Data Management
  • Data Management Systems
  • Data Manipulations
  • Data Migrations
  • Data Mining
  • Data Pipelines
  • Data Platforms
  • Data Privacies
  • Data Processing
  • Data Processing Operations
  • Data Products
  • Data Profilings
  • Data Protection
  • Data Publishings
  • Data Quality
  • Data Quality Checks
  • Data Quality Controls
  • Data Quality Frameworks
  • Data Reportings
  • Data Sciences
  • Data Securities
  • Data Services
  • Data Stacks
  • Data Stewardships
  • Data Storage
  • Data Storytellings
  • Data Strategies
  • Data Structures
  • Data Systems
  • Data Technologies
  • Data Tracking
  • Data Transfers
  • Data Transformations
  • Data Validation
  • Data Visualisations
  • Data Visualization Software
  • Data Visualization Tools
  • Data Visualizations
  • Data Warehouses
  • Data-Driven
  • Data-driven Initiatives
  • Data-driven Insights
  • Database Administration
  • Database Applications
  • Database Design
  • Database Management
  • Database Systems
  • Databases
  • Debuggings
  • Decentralized
  • Decision Making
  • Decision Support
  • Deep Learning
  • Defis
  • Deliveries
  • Dependencies
  • Deployment Tools
  • Deployments
  • Derbies
  • Design
  • Design Guidelines
  • Design Principles
  • Design Reviews
  • Design Software
  • Design Systems
  • Design Thinkings
  • Design Tools
  • Design Validation
  • Desktop Applications
  • Desktop Software
  • Desktops
  • Development
  • Development Lifecycle
  • Development Operations
  • Development Practices
  • Development Process
  • Development Software
  • Development Tools
  • Diagnostic Tools
  • Diagrammings
  • Digital Arts
  • Digital Assets
  • Digital Contents
  • Digital Experiences
  • Digital Infrastructure
  • Digital Media
  • Digital Products
  • Digital Services
  • Digital Solutions
  • Digital Storytellings
  • Digital Strategies
  • Digital Systems
  • Digital Technologies
  • Digital Tools
  • Digital Transformations
  • Digital Twins
  • Digitals
  • Directed Acyclic Graphs
  • Directory
  • Disaster Recovery
  • Distributed
  • Distributed Systems
  • Distribution Platforms
  • Distribution Systems
  • Distributions
  • Document Databases
  • Document Management
  • Document Management Systems
  • Document Object Models
  • Document Stores
  • Documentaries
  • Documentations
  • Documents
  • Due Diligences
  • Dynamics
  • E-learnings
  • E-mails
  • E-procurements
  • ERP
  • ESB
  • Earth Sciences
  • Ecommerces
  • Economic Analysis
  • Economic Data
  • Economics
  • Ecosystems
  • Edge Computing
  • Educations
  • Efficiencies
  • Efficiency Optimizations
  • Elections
  • Electric Vehicles
  • Electrical Infrastructure
  • Electronic Data Interchange
  • Electronics
  • Emails
  • Embeddings
  • Emergency Responses
  • Employee Engagements
  • Employee Experiences
  • Employment
  • Enablement
  • Encryptions
  • End To End
  • Energies
  • Energy Efficiencies
  • Energy Generations
  • Energy Infrastructure
  • Energy Management
  • Energy Performances
  • Engineering
  • Enterprise Applications
  • Enterprise Architectures
  • Enterprise Automation
  • Enterprise Content Management
  • Enterprise Data
  • Enterprise Resource Planning
  • Enterprise Software
  • Enterprise Solutions
  • Enterprise Systems
  • Enterprises
  • Entertainments
  • Environment Management
  • Equipments
  • Estate Plannings
  • Estimations
  • Ethics
  • Evaluation Frameworks
  • Evaluations
  • Event Plannings
  • Events
  • Examples
  • Excels
  • Executions
  • Executive Reportings
  • Experimentations
  • Exploitations
  • Extensions
  • Extract Transform Loads
  • Facilities Management
  • Fault Tolerances
  • Federations
  • Feedback
  • Filing Systems
  • Finances
  • Financial Accounting
  • Financial Analysis
  • Financial Controls
  • Financial Data
  • Financial Management
  • Financial Plannings
  • Financial Reportings
  • Financial Securities
  • Financial Software
  • Financial Systems
  • Fine-tunings
  • Firewalls
  • Flashes
  • Flexibilities
  • Flexible Workings
  • Forecasting
  • Forecasting Models
  • Foreign Exchanges
  • Forexes
  • Forge
  • Forms
  • Fossil Fuels
  • Foundations
  • Frameworks
  • Frenches
  • Front-ends
  • Functional Testing
  • Functions
  • Futures
  • Gateways
  • General Ledgers
  • Geographic Information Systems
  • Geographies
  • Geolocations
  • Geospatials
  • Global Markets
  • Global Positioning Systems
  • Goal Settings
  • Governance
  • Governance Frameworks
  • Governance Tools
  • Government
  • Government Policies
  • Government Relations
  • Graphic Design
  • Graphical User Interfaces
  • Graphics
  • Graphics Processing Units
  • Graphings
  • Graphs
  • Green Buildings
  • Guest Services
  • HCM
  • HR Tech
  • HR Technologies
  • Hardware
  • Healthcare
  • Heating, Ventilation, and Air Conditionings
  • High Availabilities
  • High Performance Computing
  • High Performances
  • Hirings
  • Hospitality
  • Hosting
  • Human Factors
  • Human Resources
  • Hypothesis Testing
  • IT Architectures
  • IT Infrastructure
  • IT Management
  • IT Plannings
  • IT Risks
  • IT Service Management
  • IT Strategies
  • Ideas
  • Identities
  • Identity And Access Management
  • Identity Management
  • Illuminations
  • Image Editings
  • Implementations
  • Incident Management
  • Incident Management Systems
  • Incident Responses
  • Incremental Processing
  • Industrial Automation
  • Industrial Engineering
  • Inferences
  • Information Architectures
  • Information Governance
  • Information Management
  • Information Protection
  • Information Securities
  • Information Security Controls
  • Information Systems
  • Information Technologies
  • Infrastructure
  • Infrastructure Components
  • Infrastructure Improvements
  • Infrastructure Management
  • Innovation
  • Insights
  • Inspections
  • Instrumentations
  • Insurances
  • Integrated Development Environments
  • Integrated Solutions
  • Integration Testing
  • Integration Workflows
  • Integrations
  • Integrity
  • Intellectual Properties
  • Intelligence
  • Interactive Contents
  • Interactive Voice Responses
  • Interactives
  • Interfaces
  • Internal Audits
  • Internal Communications
  • Internal Control Frameworks
  • Internal Controls
  • Internal Databases
  • Internal Systems
  • Internal Tools
  • International Laws
  • International Markets
  • International Trades
  • Internet
  • Internet of Things
  • Interoperabilities
  • Intrusion Detection Systems
  • Intrusion Detections
  • Inventory Management
  • Investment Analysis
  • Investment Banking
  • Investments
  • Invoice Processing
  • Isolations
  • Issue Trackers
  • Job Boards
  • Journalism
  • Kernels
  • Key Management
  • Key Metrics
  • Knowledge Bases
  • Knowledge Management
  • Knowledge Sharing
  • LLM
  • Large Data Sets
  • Large-scale Distributed Systems
  • Law Enforcements
  • Layer 2S
  • Lead Generations
  • Leaderships
  • Learning
  • Learning And Development
  • Learning Management
  • Ledgers
  • Legal
  • Legal Compliances
  • Legal Holds
  • Lendings
  • Lessons Learned
  • Libraries
  • Licensings
  • Life Cycle Management
  • Lifecycle Management
  • Lightings
  • Load Balancers
  • Load Balancings
  • Load Testing
  • Localizations
  • Log Management
  • Logging
  • Logistics
  • Low Carbons
  • M&AS
  • Machine Learning
  • Mails
  • Maintenance
  • Management
  • Management Information
  • Management Software
  • Management Systems
  • Management Tools
  • Manufacturing
  • Mappings
  • Market Analysis
  • Market Intelligence
  • Market Researches
  • Marketing
  • Marketing Strategies
  • Marketplaces
  • Markets
  • Massively Parallel Processing
  • Master Data
  • Master Data Management
  • Material Handling
  • Mathematics
  • Matrixes
  • Measurements
  • Mechanical Systems
  • Media
  • Mediations
  • Meetings
  • Mental Healths
  • Mentoring
  • Meridians
  • Messaging
  • Metadata
  • Metadata Management
  • Metrics
  • Microsoft Access
  • Migrations
  • Milestone Tracking
  • Mission Critical
  • Mobile Applications
  • Mobile Apps
  • Mobiles
  • Model Calibrations
  • Model Context Protocols
  • Model Context Protocols (MCP)
  • Model Deployments
  • Model Development
  • Model Integrity
  • Model Lifecycle Management
  • Model Management
  • Model Orchestration
  • Model Performance
  • Model Templates
  • Model Validation
  • Modeling
  • Modeling Platforms
  • Modeling Tools
  • Modernizations
  • Monitoring
  • Monitoring And Controls
  • Monitoring Tools
  • Monte Carlo Simulations
  • Monte Carloes
  • Multi-Agent Systems
  • Multi-regions
  • Multimedias
  • Multimodals
  • Multiple Systems
  • Natural Gas
  • Navigation
  • Negotiations
  • Network Analysis
  • Network Architectures
  • Network Automation
  • Network Design
  • Network Engineering
  • Network Infrastructure
  • Network Management
  • Network Monitoring
  • Network Performance
  • Network Securities
  • Network Simulations
  • Networking
  • Neurodiversities
  • News
  • Newsletters
  • NoSQL
  • Nostro
  • Notebooks
  • Notifications
  • Nuclear Energies
  • Nuxts
  • OIA
  • OLE for Process Controls
  • ORM
  • Observability
  • Observability Tools
  • Office Applications
  • Office Management
  • Office Software
  • Office Suites
  • On Demands
  • Onboardings
  • Operating Systems
  • Operational Efficiencies
  • Operational Excellence
  • Operational Intelligence
  • Operational Resiliences
  • Operational Risks
  • Operational Safety
  • Operational Systems
  • Operational Technologies
  • Operations
  • Operations Management
  • Operators
  • Optical Character Recognitions
  • Optimization Techniques
  • Optimizations
  • Options
  • Orchestration
  • Organizational Changes
  • Organizational Development
  • Organizational Structures
  • Organizations
  • Packages
  • Packaging
  • Patterns
  • Pay Per Clicks
  • Payment Processing
  • Payments
  • Payroll
  • Performance
  • Performance Analysis
  • Performance Evaluations
  • Performance Improvements
  • Performance Management
  • Performance Measurements
  • Performance Metrics
  • Performance Monitoring
  • Performance Optimizations
  • Performance Testing
  • Performance Tracking
  • Performance Tuning
  • Pharmaceuticals
  • Photographies
  • Physical Securities
  • Pipeline Orchestration
  • Pipelines
  • Pivot Tables
  • Plannings
  • Platform Development
  • Platform Engineering
  • Platform Services
  • Platforms
  • Plottings
  • Plugins
  • Policies
  • Policy Researches
  • Portabilities
  • Portables
  • Portals
  • Portfolio Management
  • Power Distributions
  • Power Generations
  • Power Plants
  • Power Tools
  • Power Transmissions
  • Practice Management
  • Predictions
  • Predictive Analytics
  • Presentation Software
  • Presentations
  • Pricing Strategies
  • Pricing Tools
  • Pricings
  • Prioritizations
  • Privacy
  • Probabilities
  • Problem Resolutions
  • Problem Solving
  • Process Analysis
  • Process Automation
  • Process Controls
  • Process Design
  • Process Documentations
  • Process Engineering
  • Process Improvements
  • Process Management
  • Process Mapping Tools
  • Process Mappings
  • Process Maps
  • Process Mining
  • Process Modeling
  • Process Modeling Tools
  • Process Optimizations
  • Process Safety
  • Processes
  • Procurement Tools
  • Procurements
  • Product Design
  • Product Development
  • Product Management
  • Product Owners
  • Product Ownerships
  • Product Strategies
  • Production
  • Production Environments
  • Production Management
  • Production Support
  • Production Systems
  • Productivity
  • Productivity Tools
  • Products
  • Professional Development
  • Professional Services
  • Professional Trainings
  • Profilings
  • Program Management
  • Programmable Logic Controllers
  • Programming
  • Programming Languages
  • Progress Reports
  • Project Closeouts
  • Project Governance
  • Project Life-cycles
  • Project Management
  • Project Management Processes
  • Project Management Tools
  • Project Schedules
  • Projects
  • Prompt Engineering
  • Promptings
  • Prompts
  • Property Management
  • Protection
  • Protocols
  • Prototyping
  • Provisionings
  • Proxies
  • Prunings
  • Public Affairs
  • Public Healths
  • Purchasings
  • QA
  • Quality Assurance
  • Quality Assurance Processes
  • Quality Assurance Reviews
  • Quality Assurance Testing
  • Quality Controls
  • Quality Frameworks
  • Quality Management
  • Quality Metrics
  • Quality Tools
  • Quantitative Analysis
  • Rapid Prototyping
  • Ratings
  • Reactives
  • Real Estates
  • Real Time
  • Real-Time Operating Systems
  • Real-time Data
  • Real-time Experiences
  • Real-time Operations
  • Real-time Rendering
  • Real-time Visibility
  • Reasonings
  • Reconciliations
  • Reconnaissances
  • Record Keepings
  • Recordings
  • Records Management
  • Recruitings
  • Recruitment
  • Reference Data
  • Registrations
  • Regression Analysis
  • Regression Testing
  • Regulatory Affairs
  • Regulatory Compliances
  • Regulatory Consultings
  • Regulatory Filings
  • Regulatory Reportings
  • Reinforcement Learning
  • Relational Data
  • Relational Databases
  • Relationals
  • Relationship Buildings
  • Relationship Management
  • Release Plannings
  • Reliabilities
  • Remote Works
  • Rendering
  • Renewable Energies
  • Reporting Dashboards
  • Reporting Frameworks
  • Reporting Platforms
  • Reporting Systems
  • Reporting Tools
  • Reportings
  • Requirements
  • Requirements Engineering
  • Requirements Gatherings
  • Requirements Management
  • Research
  • Resiliences
  • Resiliency
  • Resource Allocations
  • Resource Management
  • Resource Plannings
  • Responsive Design
  • Retails
  • Retrofittings
  • Revenue Generations
  • Revenues
  • Review And Approvals
  • Reviews
  • Rich Internet Applications
  • Risk Analysis
  • Risk Assessments
  • Risk Management
  • Risk Management Plans
  • Risk Management Systems
  • Risk Management Tools
  • Risk Models
  • Robotic Process Automation
  • Robotics
  • Robustness
  • Root Cause Analysis
  • Routers
  • Routings
  • Runtimes
  • SQL Stored Procedures
  • Safes
  • Safety
  • Safety Engineering
  • Sales
  • Scalabilities
  • Scaling
  • Scannings
  • Scenario Analysis
  • Scenario Modeling
  • Scenarios
  • Scheduling
  • Screenings
  • Scripting Languages
  • Scriptings
  • Search
  • Search Engine Optimizations
  • Secure Codings
  • Secure Communications
  • Secure Development
  • Security
  • Security Administration
  • Security Compliances
  • Security Controls
  • Security Design
  • Security Development Lifecycle
  • Security Equipments
  • Security Groups
  • Security Information and Event Management
  • Security Infrastructure
  • Security Measures
  • Security Operations
  • Security Requirements
  • Security Risk Assessments
  • Security Systems
  • Segmentations
  • Serverless
  • Servers
  • Service Bus
  • Service Deliveries
  • Service Design
  • Service Management
  • Service Operations
  • Services
  • Settlements
  • Shells
  • Shippings
  • Short Message Services
  • Simple API for XML
  • Simulation Modeling
  • Simulation Tools
  • Simulations
  • Skill Development
  • Skills Development
  • Slides
  • Smart Grids
  • Social
  • Social Media
  • Software
  • Software Applications
  • Software Configuration Management
  • Software Deployments
  • Software Design
  • Software Development
  • Software Development Best Practices
  • Software Development Kits
  • Software Engineering
  • Software Management
  • Software Platforms
  • Software Quality
  • Software Solutions
  • Software Systems
  • Software Tools
  • Software Upgrades
  • Solutions
  • Source Systems
  • Sourcings
  • Spatial Analysis
  • Spatial Data
  • Spreadsheets
  • Stakeholder Management
  • Standard Computer Software
  • Startups
  • Static Application Security Testing
  • Statistical Analysis
  • Statistical Modellings
  • Statistical Tools
  • Statistics
  • Steam Turbines
  • Storage
  • Stored Procedures
  • Strategic Plannings
  • Strategies
  • Stream Analytics
  • Streamings
  • Structured Data
  • Subscription Management
  • Subscriptions
  • Supplier Management
  • Supply Chain Management
  • Supply Chain Risk Management
  • Supply Chains
  • Support
  • Support Systems
  • Surveillances
  • Sustainability
  • Switches
  • Synthetics
  • System Administration
  • System Analysis
  • System Applications
  • System Architectures
  • System Configurations
  • System Design
  • System Development
  • System Integrations
  • System Interfaces
  • System Maintenance
  • System Management
  • System Monitoring
  • System Of Records
  • System Operations
  • System Optimizations
  • System Performances
  • System Requirements
  • System Securities
  • System Services
  • System Software
  • System Solutions
  • System Stabilities
  • System Testing
  • System Tools
  • System Updates
  • Systems
  • Systems Administration
  • Systems Analysis
  • Systems Design
  • Systems Development
  • Systems Engineering
  • Systems Integrations
  • Systems Management
  • Systems Testing
  • Systems Thinkings
  • T1S
  • Tablets
  • Tainas
  • Talent Acquisition
  • Talent Management
  • Task Management
  • Tasks
  • Tax Compliances
  • Tax Plannings
  • Tax Researches
  • Taxes
  • Team Collaborations
  • Team Communications
  • Team Development
  • Team Management
  • Technical Plannings
  • Technical Reviews
  • Technical Support
  • Technical Writings
  • Technologies
  • Technology Plannings
  • Technology Platforms
  • Technology Services
  • Technology Stacks
  • Telecommunications
  • Telemetry
  • Telephonies
  • Telewerkens
  • Terminals
  • Test Anything Protocols
  • Test Automation
  • Test Automation Tools
  • Test Design
  • Test Equipments
  • Test Plannings
  • Test Reportings
  • Testing Strategies
  • Testing Tools
  • Tests
  • Thermal Powers
  • Third Parties
  • Third-party Data
  • Ticketing
  • Tickets
  • Time Management
  • Timelines
  • Tools
  • Total Rewards
  • Tracking
  • Tracking Software
  • Tracs
  • Trade Shows
  • Traffic Analysis
  • Traffic Management
  • Traffic Monitoring
  • Training Data
  • Training Matrixes
  • Training Platforms
  • Trainings
  • Transformations
  • Transformers
  • Translations
  • Transparency
  • Transportation
  • Travels
  • Treasuries
  • Troubleshooting
  • Tuning
  • UI
  • UX
  • UX Design
  • Underwritings
  • Unstructured Data
  • Updates
  • Uptime
  • Urban Plannings
  • Usabilities
  • Usability Testing
  • User Acceptance Testing
  • User Experiences
  • User Feedback
  • User Guides
  • User Interface/User Experiences
  • User Interfaces
  • User Researches
  • Utilities
  • Utility Systems
  • VBA
  • VOIP
  • Validation
  • Valuations
  • Value Streams
  • Vector Databases
  • Venues
  • Verifications
  • Version Control Systems
  • Version Controls
  • Versionings
  • Video Conferences
  • Video Conferencings
  • Video Editings
  • Video Encodings
  • Video Productions
  • Videos
  • Virtual Environments
  • Virtual Meetings
  • Virtualizations
  • Visibility
  • Visioconférences
  • Visual Arts
  • Visual Design
  • Visualizations
  • Voice
  • Vues
  • Vulnerability Assessments
  • Warehouse Management
  • Web Design
  • Web Development
  • Web Performances
  • Web Servers
  • Web Services
  • Web Sites
  • Web-based Applications
  • Web-based Platforms
  • Webs
  • Wellbeings
  • Whiteboards
  • Wi-Fi
  • Wins
  • Words
  • Work From Homes
  • Workflow Analysis
  • Workflow Automation
  • Workflow Management
  • Workflow Orchestration
  • Workflows
  • Workforce Development
  • Workforce Management
  • Working Capital
  • Workshops
  • Workspaces

Services — Total: 244

  • ADP
  • Adobe
  • Adobe Acrobat
  • Adobe Analytics
  • Adobe Campaign
  • Adobe Creative Cloud
  • Adobe Creative Suite
  • Adobe Illustrator
  • Adobe Launch
  • Adobe Photoshop
  • Adobe Premiere Pro
  • Adobe Suite
  • Amazon ECS
  • Amazon Kinesis
  • Amazon S3
  • Amazon Web Services
  • Ambassador
  • Ansible Automation Platform
  • Anthropic
  • Apple
  • Apple Safari
  • Aruba
  • Asana
  • AutoCAD
  • Autodesk
  • Azure API Management
  • Azure Active Directory
  • Azure Data Factory
  • Azure Databricks
  • Azure DevOps
  • Azure Event Hubs
  • Azure Functions
  • Azure Kubernetes Service
  • Azure Log Analytics
  • Azure Machine Learning
  • Azure Service Bus
  • Azure Storage
  • Azure Synapse Analytics
  • BigCommerce
  • Bitbucket
  • Bloomberg AIM
  • Bloomberg Buyside Enterprise Solutions
  • Bloomberg Economics
  • Bloomberg Enterprise Data
  • Bloomberg Intelligence
  • Bloomberg News
  • Bloomberg Professional Service
  • Bloomberg Terminal
  • Boomi
  • Box
  • Bruno
  • Canva
  • ChatGPT
  • Choreo
  • Circana
  • Cisco
  • Cisco Expressway
  • Citrix NetScaler
  • CloudFormation
  • CloudWatch
  • Cloudflare
  • Concur
  • Conductor
  • Confluence
  • Coupa
  • Crystal Reports
  • Databricks
  • Datadog
  • DynamoDB
  • Dynatrace
  • EC2
  • EMC
  • F5 Networks
  • Facebook
  • FactSet
  • Fern
  • Figma
  • Fortinet
  • Fusio
  • G2
  • GCP Cloud Storage
  • GitHub
  • GitHub Actions
  • GitHub Copilot
  • GitLab
  • Google
  • Google Analytics
  • Google Apps Script
  • Google Chrome
  • Google Cloud Platform
  • 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
  • Harness
  • HubSpot
  • Hugging Face
  • IBM
  • Informatica
  • Informática
  • Instagram
  • IntelliJ IDEA
  • International Business Machines
  • Jira
  • Juniper
  • Juniper Networks
  • Kestra
  • Kinesis
  • Knit
  • Kong
  • Lightroom
  • LinkedIn
  • MATLAB
  • MailChimp
  • Make
  • Mastercard
  • Membrane
  • Merge
  • Meta
  • Metasploit
  • Microsoft
  • Microsoft .NET
  • Microsoft 365
  • Microsoft Access
  • Microsoft Azure
  • Microsoft Copilot
  • Microsoft Dynamics 365
  • Microsoft Edge
  • Microsoft Endpoint Manager
  • Microsoft Entity Framework
  • Microsoft Entra
  • Microsoft Excel
  • Microsoft Intune
  • Microsoft Office
  • Microsoft Office 365
  • Microsoft Outlook
  • Microsoft Planner
  • Microsoft Power Apps
  • Microsoft Power Automate
  • Microsoft Power Platform
  • Microsoft PowerPoint
  • Microsoft Project
  • Microsoft Purview
  • Microsoft Sentinel
  • Microsoft Teams
  • Microsoft Visio
  • Microsoft Windows
  • Microsoft Word
  • Microsoft Xbox
  • Moody's
  • MuleSoft
  • NASA
  • Navision
  • New Relic
  • Notion
  • OpenAI
  • Oracle
  • Oracle APEX
  • Oracle Cloud
  • Oracle Database
  • Oracle E-Business Suite
  • Oracle Enterprise Manager
  • Oracle Financials
  • Oracle General Ledger
  • Oracle GoldenGate
  • Oracle Hyperion
  • Oracle Integration
  • Orion
  • Palo Alto Networks
  • Panora
  • PeopleSoft
  • Photoshop
  • Pluralsight
  • Port
  • Power Apps
  • Power BI
  • Power Platform
  • Power Query
  • Prefect
  • Productiv
  • Pulse
  • Qlik Sense
  • Qlik Sense Enterprise
  • QlikSense
  • QlikView
  • Red Hat
  • Red Hat Ansible Automation Platform
  • Red Hat Satellite
  • SAP
  • SAP BW
  • SAP Concur
  • SAP HANA
  • SQL Server
  • Salesforce
  • Salesforce Automation
  • Salesforce Lightning
  • Seismic
  • ServiceNow
  • SharePoint
  • Shell
  • SimCorp Dimension
  • Slack
  • Snowflake
  • SolarWinds
  • Solaris Zones
  • Sparx Enterprise Architect
  • Spot
  • Square
  • Stainless
  • Tableau
  • Tableau Desktop
  • TeamCity
  • Temenos Transact
  • Temporal
  • Teradata
  • Tradeweb
  • Tropic
  • Twitter
  • Tyk
  • Unity
  • Vantage
  • Veritas Cluster
  • Veritas InfoScale
  • Veritas NetBackup
  • Veritas Volume Manager
  • Vessel
  • Visio
  • Visualforce
  • WebSphere
  • WhatsApp
  • Workday
  • Workday Report Writer
  • Youtube
  • Zendesk
  • Zoom
  • ZoomInfo
  • n8n

Tools — Total: 153

  • Angular
  • Ansible
  • Apache
  • Apache AGE
  • Apache APR
  • Apache Airflow
  • Apache Ant
  • Apache Archiva
  • Apache Aries
  • Apache Arrow
  • Apache Axis
  • Apache Beam
  • Apache BookKeeper
  • Apache Camel
  • Apache Cassandra
  • Apache DB
  • Apache DolphinScheduler
  • Apache Drill
  • Apache Flex
  • Apache Fluo
  • Apache FreeMarker
  • Apache Geode
  • Apache Hadoop
  • Apache Helix
  • Apache Hive
  • Apache Hop
  • Apache Hudi
  • Apache Iceberg
  • Apache Kafka
  • Apache Knox
  • Apache Kylin
  • Apache MINA
  • Apache NiFi
  • Apache ORC
  • Apache Olingo
  • Apache OpenWebBeans
  • Apache Ozone
  • Apache POI
  • Apache Phoenix
  • Apache Pivot
  • Apache Portals
  • Apache Pulsar
  • Apache Ranger
  • Apache Ratis
  • Apache Roller
  • Apache Rya
  • Apache SINGA
  • Apache Serf
  • Apache SkyWalking
  • Apache Solr
  • Apache SpamAssassin
  • Apache Spark
  • Apache Spatial
  • Apache Steve
  • Apache Storm
  • Apache Streams
  • Apache Struts
  • Apache Submarine
  • Apache Subversion
  • Apache Synapse
  • Apache Tapestry
  • Apache TomEE
  • Apache Traffic Control
  • Apache Traffic Server
  • Apache Turbine
  • Apache Velocity
  • Apache Web Services
  • Apache ZooKeeper
  • Argo
  • BFE
  • Blender
  • Buildpacks
  • C#
  • C++
  • Chef
  • ClickHouse
  • Cloud Custodian
  • Consul
  • Contour
  • Dex
  • Django
  • Docker
  • Elastic Stack
  • Elasticsearch
  • Elk
  • Elk Stack
  • Ethereum
  • FastAPI
  • Fluid
  • Flux
  • Git
  • Grafana
  • HAMI
  • Harbor
  • Hashicorp Vault
  • Helm
  • Hexa
  • Hugging Face Transformers
  • Kafka Connect
  • Keycloak
  • Koordinator
  • Kotlin
  • Kubeflow
  • Kubernetes Operators
  • Lean
  • Lima
  • Matplotlib
  • MongoDB
  • MySQL
  • NATS
  • NumPy
  • ORAS
  • Open Policy Agent
  • OpenTelemetry
  • Pandas
  • Perl
  • Pixie
  • Porter
  • PostgreSQL
  • PowerShell
  • Prometheus
  • PySpark
  • PyTorch
  • Python
  • R
  • Radius
  • React
  • React Native
  • Redis
  • Rook
  • SPIRE
  • SVN
  • Scala
  • Score
  • Semantic Kernel
  • Sonar
  • SonarQube
  • Spring
  • Spring Boot
  • Spring Boot Admin Console
  • Spring Cloud Stream
  • Spring Framework
  • Stacker
  • Swift
  • TensorFlow
  • Terraform
  • Vault
  • Vite
  • Vitess
  • Vue.js
  • WordPress
  • jQuery
  • werf

Standards — Total: 152

  • .cursorrules
  • ACID
  • AIS
  • AUTHORS.md
  • Acceptance Criteria
  • Accessibility Standards
  • Accounting Standards
  • Actor Model
  • Agile
  • Agile Methodology
  • Architecture Pattern
  • BDD
  • BLE
  • CCPA
  • CHANGELOG.md
  • CITATION.cff
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • CONTRIBUTORS.md
  • CSS
  • Certificate Enrolment Protocols
  • Circuit Breaker
  • Communication Protocols
  • Configuration Language
  • Consensus
  • Convention Over Configuration
  • DHCP
  • DNS
  • DSL
  • Data Flow Diagrams
  • Data Format
  • Data Modeling
  • Data Models
  • Data Privacy Standards
  • Data Quality Standards
  • Database Schema Design
  • Defense In Depth
  • Dependency Injection
  • Design Patterns
  • Design Standards
  • DevOps
  • Development Methodology
  • Dimensional Modeling
  • Domain-Driven Design
  • Enterprise Integration Patterns
  • Entity Relationship
  • Equator Principles
  • Event Sourcing
  • Event-driven Architecture
  • Extreme Programming
  • Flowcharts
  • Functional Programming
  • GDPR
  • Good Manufacturing Practices
  • HIPAA
  • HTML
  • HTTP
  • HTTP/2
  • Health Standards
  • IAM
  • ISO
  • ISO Standard
  • ITIL
  • ITSM
  • Integration Patterns
  • Internal Control Standards
  • JSON
  • Kanban
  • LICENSE.md
  • Lakehouse Architecture
  • Lean Management
  • Lean Manufacturing
  • Lean Six Sigma
  • Lean Six Sigma Black Belt
  • MLOps
  • MVC
  • Mandatory Reserves Requirement
  • MapReduce
  • Methodology
  • Mockups
  • NIO
  • NIST
  • Network Protocols
  • OAuth
  • OCI
  • OData
  • OSHA
  • Object-Oriented Programming
  • OpenAPI
  • PDF
  • Partitioning
  • Process Flow Diagrams
  • Product Backlog
  • Product Backlog Items
  • Product Specifications
  • Protocol Buffers
  • Prototypes
  • Quality Standards
  • RACI
  • RBAC
  • REST
  • Raft
  • Reactive Programming
  • Regular Expressions
  • Regulation
  • Regulatory
  • Relational Data Modeling
  • SAFe Agile
  • SCADA
  • SDLC
  • SECURITY.md
  • SPA
  • SQL
  • SSH
  • SSL/TLS
  • SSO
  • SUPPORT.md
  • Scaled Agile
  • Schema Evolution
  • Schema Validation
  • Scrum
  • SecOps
  • Security Protocols
  • Security Standards
  • Security Standards And Procedures
  • Six Sigma
  • Sketches
  • Software Design Architectural Patterns
  • Software Design Patterns
  • Software Development Life Cycle
  • Software Development Lifecycle
  • Specification
  • Standard Operating Procedures
  • Standardization
  • Standards
  • TCP/IP
  • Table Format
  • Technical Specifications
  • Templates
  • Test Cases
  • Test Plans
  • Test Scripts
  • Use Cases
  • User Stories
  • VPN
  • Versioning Protocols
  • WCAG
  • Waterfall
  • WebSockets
  • Wireframes
  • Write Ahead Log
  • XML

Why do we do this?

  • Understand the state of the market by industry.
  • Meet new and diverse design partners across verticals.
  • Help us prioritize industry-specific business capabilities.

Who is this for?

  • AI, API, integration and platform leadership within the industry.
  • The C-Suite looking to benchmark their enterprise against peers.
  • Analysts and media outlets reporting on industry-level technology trends.

Why become a design partner?

  • Collaboration to define industry-wide capabilities and benchmarks.
  • Obtain more control over the integrations your industry depends on.
  • Help shape the Naftiko roadmap to meet your vertical’s needs.

About This Research

  • Signals aggregate how we rate investments across all companies in the industry.
  • Areas reveal the technology areas being invested in across the vertical.
  • Services show which SaaS platforms appear across industry companies.
  • Tools highlight the open-source investments being made industry-wide.
  • Standards speak to how aligned integrations are with market standards.

About This Guidance

  • Impact Report provides a narrative analysis of the industry’s collective AI investment posture.
  • Impact Pages outlines the layered data behind the industry’s AI response, with company rankings per signal area.
  • Companies lists all organizations tracked in this industry vertical.
  • Radar maps the maturity of technology investments across the industry.
  • Capabilities are Naftiko definitions for how industry-common services and tools can deliver AI-driven business value.
  • Navigation highlights strategic opportunities for this industry vertical.

What This Means For You

See where you stand, decide what to build, control what you build — grounded in public-data signals, not boilerplate best practice.

01

Where you stand

The leads, the gaps, and where AI has shifted the gradient — in numbers from public data, not vendor decks.

See full report →
02

What to build

Capabilities being built across the peer set — tied to the markets you actually serve.

View capabilities →
03

Where to go next

A prioritized roadmap grounded in signal data. Not a generic best-practices deck, not a vendor-shaped pitch.

Get your navigation →
04

Control what you build

Run it on infrastructure you control. Open source — fork it, audit it, run it on your stack. No vendor lock-in.

First capability live in 90 days.

Become a design partner →