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.
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 SystemsAdvanced Drainage Systems (ADS) is a leading manufacturer of stormwater and onsite septic wastewater solutions....
- AECOMA global infrastructure consulting firm providing planning, design, engineering, and construction management services. Delivers projects...
- APi GroupAPi Group Corporation is a Fortune 500 global, market-leading business services provider of safety, specialty,...
- AutodeskAutodesk is a global leader in design, engineering, and entertainment software, providing cloud-connected platform APIs...
- Beacon Roofing SupplyBeacon Roofing Supply (BECN) is one of the largest distributors of residential and non-residential roofing...
- BechtelOne of the largest privately held engineering, procurement, and construction companies in the world. Has...
- Boise CascadeBoise Cascade is a leading North American manufacturer and distributor of building materials for the...
- BrightView HoldingsProfile for BrightView Holdings in the API Evangelist network. Fortune F1000 (rank 891).
- Builders FirstSourceBuilders FirstSource (NYSE: BLDR) is the nation's largest supplier and manufacturer of structural building products,...
- Carlisle CompaniesCarlisle Companies Incorporated (NYSE: CSL) is a global diversified manufacturer of highly engineered building envelope...
- Century CommunitiesCentury Communities is a major US corporation and Fortune 1000 company. The Century Communities API...
- Comfort Systems USAComfort Systems USA is a major US corporation and Fortune 1000 company. The Comfort Systems...
- Core & MainCore & Main is a leading specialty distributor of water, wastewater, storm drainage, and fire...
- D.R. HortonD.R. Horton is the largest homebuilder by volume in the United States, building and selling...
- Dream Finders HomesDream Finders Homes is a national homebuilder that constructs new residential properties across markets in...
- Dycom IndustriesDycom Industries is a major US corporation and Fortune 1000 company. The Dycom Industries API...
- EMCOR GroupEMCOR Group is a Fortune 500 mechanical and electrical construction, energy, and facilities services company...
- FluorFluor, a leading engineering & construction company, provides engineering, procurement, construction (EPC), maintenance & project...
- Fluor CorporationA multinational engineering and construction firm providing design, procurement, construction, and maintenance services. Serves energy,...
- GMSProfile for GMS in the API Evangelist network. Fortune F1000 (rank 758).
- Granite ConstructionGranite Construction is one of the largest diversified heavy civil contractors and construction materials producers...
- Hovnanian EnterprisesHovnanian Enterprises is a leading homebuilder in the United States, designing, constructing, marketing, and selling...
- Installed Building ProductsInstalled Building Products, Inc. is one of the largest installers of insulation, garage doors, rain...
- Jacobs SolutionsJacobs Solutions is a global technology-forward solutions company providing consulting, design, engineering, technical, scientific, and...
- KB HomeKB Home is one of the largest and most recognized homebuilders in the United States,...
- KBRKBR is a Fortune 500 company that delivers science, technology, and engineering solutions to governments...
- Knife RiverKnife River Corporation is one of the leading aggregates-led construction materials and contracting companies in...
- LennarLennar Corporation is a Fortune 500 company and one of the leading homebuilders of new...
- MasTecMasTec is a Fortune 500 infrastructure construction company operating across clean energy, data centers, EV...
- MDC HoldingsProfile for MDC Holdings in the API Evangelist network. Fortune F1000 (rank 733).
- MDU Resources GroupMDU Resources Group is a diversified natural resources company with operations in regulated energy delivery,...
- Meritage HomesMeritage Homes is one of the leading designers and builders of single-family homes in the...
- M/I HomesProfile for M/I Homes in the API Evangelist network. Fortune F1000 (rank 871).
- MYR GroupProfile for MYR Group in the API Evangelist network. Fortune F1000 (rank 971).
- NVRNVR Inc. operates in two business segments: homebuilding and mortgage banking, constructing and selling single-family...
- Parsons CorporationParsons 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 ServicesPrimoris Services is a specialty contractor and infrastructure company providing construction, fabrication, maintenance, replacement, and...
- PulteGroupPulteGroup is one of America's largest homebuilding companies, building homes under the Centex, Pulte Homes,...
- Quanta ServicesQuanta Services is a Fortune 500 specialty contracting company that delivers infrastructure solutions to the...
- Riggs DistlerA specialty electrical and mechanical contractor headquartered in Cherry Hill, NJ, serving the energy, utility,...
- Taylor Morrison HomeTaylor Morrison Home Corporation (NYSE: TMHC) is a leading national homebuilder and developer recognized as...
- Tetra TechTetra Tech is an American consulting and engineering services firm headquartered in Pasadena, California. Founded...
- Toll BrothersToll Brothers is the nation's leading builder of luxury homes, designing, building, marketing, and arranging...
- TopBuildProfile for TopBuild in the API Evangelist network. Fortune F1000 (rank 854).
- Tri Pointe HomesTri Pointe Homes is one of the largest homebuilders in the United States, designing and...
- TrimbleTrimble Inc. is a global technology company that provides advanced positioning, navigation, and data analytics...
- Tutor PeriniTutor Perini Corporation is a leading civil, building, and specialty construction company offering diversified general...
- Vulcan Materials CompanyVulcan Materials Company is the nation's largest producer of construction aggregates, primarily crushed stone, sand,...
- XylemXylem 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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Score Breakdown — Total: 2587
Each row links to its full definition on the Naftiko Signal Groups page.
29 8 8 98 118 40 82 61 34 222 63 66 132 28 50 55 20 24 7 86 106 56 16 40 165 398 70 39 17 24 21 2 26 34 79 23 31 11 25 36 39Areas — 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
- FactSet
- Fern
- Figma
- Fortinet
- Fusio
- G2
- GCP Cloud Storage
- GitHub
- GitHub Actions
- GitHub Copilot
- GitLab
- 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
- IntelliJ IDEA
- International Business Machines
- Jira
- Juniper
- Juniper Networks
- Kestra
- Kinesis
- Knit
- Kong
- Lightroom
- 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
- Tyk
- Unity
- Vantage
- Veritas Cluster
- Veritas InfoScale
- Veritas NetBackup
- Veritas Volume Manager
- Vessel
- Visio
- Visualforce
- WebSphere
- 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
- 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.
Where you stand
See your signals
The leads, the gaps, and where AI has shifted the gradient — in numbers from public data, not vendor decks.
See full report →What to build
Translate to capabilities
Capabilities being built across the peer set — tied to the markets you actually serve.
View capabilities →Where to go next
Navigate the next move
A prioritized roadmap grounded in signal data. Not a generic best-practices deck, not a vendor-shaped pitch.
Get your navigation →Control what you build
Integrate with AI
Run it on infrastructure you control. Open source — fork it, audit it, run it on your stack. No vendor lock-in.
First capability live in 90 days.
Become a design partner →